Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/12/2006, à 01:53

bakalegum_

recherche un "mentor" pour pygtk

bonjour a tous,

je voudrais savoir si quelqu un qui a deja touché a pygtk voudrais bien m aider... je butte sur le concept de "treeview" je sent que c est ce dont j ai besoin, mais je bloque sur le concept, et tout ce que j ai pu lire ne ma pas aider...

donc est ce que quelqu un voudrait bien me prendre sous son aile pour m expliquer un peu??

merci


bakalegun

Hors ligne

#2 Le 14/12/2006, à 13:43

bakalegum_

Re : recherche un "mentor" pour pygtk

snif' sad



big_smile

Hors ligne

#3 Le 14/12/2006, à 14:05

Pho8os

Re : recherche un "mentor" pour pygtk

hello smile
Ben dit toujours, on va bien voir .... wink
Que souhaites tu faire ?

Hors ligne

#4 Le 14/12/2006, à 14:52

bakalegum_

Re : recherche un "mentor" pour pygtk

bon alors sans ecrire un roman voici mon projet:
je veux fait un "super copier" pour nunux, si tu ne connais pas il s agit d un gestionnnaire de copie, qui permet de faire pause, changer de debit en tps reel des copies..de plus vu qu il existe tout un tas d option pour le cp, d autre option sont envisageable. pour l instant grace a nautilus action, et queslques script bash je peux mettre des copies a la suite, voir l avancement des copies, ainsi que leur vitesse, il me reste a simuler un ctrl +Z pour mettre le tout en pause et j aurais une version utilisable de l utilitaire.
donc dans le fonctionnement du programme je dispose d un fichier texte dans le quel se trouve ala suite le chemin de tous les fichiers que je veux copier. je voudrais afficher cette liste de maniere graphique dans une fenetre,en l actualisant des qu une copie est terminée, c est a dire en enlevant le fichier de la liste. puis dans un second temps pouvoir modifier l ordre des fichiers en liste (le premier etant celui qui sera copie juste apres) et aussi pouvoir faire un glisser deposer de l exterieur de nautilus vers la liste en le placant a l endroit voulu dans la file d attente. a cela se rajoute un bouton anuler un bouton pause qui devient reprise une fois enfoncé ainsi qu une reglette pour modifier le debit de copie...

je ne sais pas s i c est tres clair hmm

cela me semble tout a fait faisable, et pas trop difficile
qu en penses tu?


bakalegum

Dernière modification par bakalegum_ (Le 14/12/2006, à 14:53)

Hors ligne

#5 Le 14/12/2006, à 17:00

Pho8os

Re : recherche un "mentor" pour pygtk

Tu souhaites donc faire une appli gtk qui affiche, dans une liste, le contenu ligne par ligne du fichier ?
A ce moment, ton idée d'utiliser un treeview était effectivement la bonne. C'est un treeview qui affiche les liste en gtk. (liste=treeview à un seul "étage")
Cette application semble effectivment "relativement" simple à écrire. Le plus "difficile" sera peut être la mise à jour sur changement du contenu de fichier. Mais je sais que c'est faisable avec gnomevfs smile
A priori les exemples du tutorial pygtk te seront grandement utiles et peuvent, à mon avis, contituer une bonne base.
N'hésites pas si t'as d'autre question(s) smile

Hors ligne

#6 Le 14/12/2006, à 17:20

bakalegum_

Re : recherche un "mentor" pour pygtk

je vais essayer de "pondre" un bout de code tout bete pour afficher le contenue dun fichier texte dans un treeview.. je te le soumetrais...

Hors ligne

#7 Le 14/12/2006, à 17:37

Pho8os

Re : recherche un "mentor" pour pygtk

no problemo
bon courage ! smile

Hors ligne

#8 Le 14/12/2006, à 19:30

bakalegum_

Re : recherche un "mentor" pour pygtk

bon alors voila j ai essayé d utiliser
http://mcclinews.free.fr/python/pygtktu … dDrop.html

et ca
http://mcclinews.free.fr/python/pygtktu … idget.html
dans le meme code ce qui donne

#!/usr/bin/env python

# exemple treeviewbasique.py
import pygtk
pygtk.require('2.0')
import gtk
class ExempleTreeViewBasique:
	
    CIBLES = [('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_WIDGET, 0),('text/plain', 0, 1),('TEXT', 0, 2),('STRING', 0, 3),]
	
	
	
    # fermeture de la fenetre et sortie du programme
    def evnmt_delete(self, widget, evnmt, donnees=None):
         gtk.main_quit()
         return False
  
    def __init__(self):
         # Creation d'une nouvelle fenetre
         self.fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
         self.fenetre.set_title("Exemple TreeView")
         self.fenetre.set_size_request(200, 400)
         self.fenetre.connect("delete_event", self.evnmt_delete)
         # Creation d'un TreeStore avec une colonne de type chaine, pour servir de model
         self.treestore = gtk.TreeStore(str)
         # Ajoutons des donnees : 4 lignes ayant 3 lignes filles chacune
	 fichier = open('/home/baka/Desktop/Lalist.txt', 'r')
         list = fichier.readlines()
	 
        
	 
	 
	 
         for x in range(len(list)):
                 m_iter = self.treestore.append(None, [' %s' % list[x]])

                                                    
         # creation du TreeView en utilisant notre TreeStore
         self.treeview = gtk.TreeView(self.treestore)
         # creation du TreeViewColumn pour afficher les donnees
	 self.tvcolumn = gtk.TreeViewColumn('fichiers a copier')
         # on place tvcolumn dans notre TreeView
         self.treeview.append_column(self.tvcolumn)
         # creation d'un CellRendererText pour afficher les donnees
         self.cell = gtk.CellRendererText()
         # on place cell dans le TreeViewColumn et on lui permet de s'etirer
         self.tvcolumn.pack_start(self.cell, True)
         # reglage de l'attribut "text" de cell sur la colonne 0 - recupere le
         # texte dans cette colonne du TreeStore
         self.tvcolumn.add_attribute(self.cell, 'text', 0)
         # on autorise la recherche
         self.treeview.set_search_column(0)

	 
         # on autorise la classement de la colonne
         #self.tvcolumn.set_sort_column_id(0)
         # on autorise le classement des lignes par glisser-deposer
         self.treeview.set_reorderable(True)
         self.fenetre.add(self.treeview)
         self.fenetre.show_all()
	 
	 self.treeview.enable_model_drag_source( gtk.gdk.BUTTON1_MASK,self.CIBLES,gtk.gdk.ACTION_DEFAULT|gtk.gdk.ACTION_MOVE)
	 self.treeview.enable_model_drag_dest(self.CIBLES,gtk.gdk.ACTION_DEFAULT)
	 
	 
	 
	 

    def donnees_du_glisser(self, treeview, context, selection, id_cible,etime):
         treeselection = treeview.get_selection()
         modele, iter = treeselection.get_selected()
         donnees = modele.get_value(iter, 0)
         selection.set(selection.target, 8, donnees)
	 
    def donnees_du_deposer(self, treeview, context, x, y, selection,info, etime):
         modele = treeview.get_model()
         donnees = selection.data
         info_depot = treeview.get_dest_row_at_pos(x, y)
         if info_depot:
		 chemin, position = info_depot
                 iter = modele.get_iter(chemin)
	         if (position == gtk.TREE_VIEW_DROP_BEFORE or position == gtk.TREE_VIEW_DROP_INTO_OR_BEFORE):
			modele.insert_before(iter, [donnees])
                 else:
			 modele.insert_after(iter, [donnees])
	 else:
               modele.append([donnees])
         if context.action == gtk.gdk.ACTION_MOVE:
               context.finish(True, True, etime)
	 return




 
def main():
      gtk.main()
if __name__ == "__main__":
        exempletv = ExempleTreeViewBasique()
        main()

avec /home/baka/desktop/Lalist.txt qui contient

/home/baka/bin 
/home/baka/caya 
/home/baka/screencap 
/media/fat/logz 
/media/fat/Mes Images 
/media/fat/mes videos 
/media/fat/nokia 
/media/fat/pas bien! 
/media/fat/perso linux 
/media/fat/baka/Desktop

mais bon je n arrive pas a glisser quoi que ce soit dans la liste, je n arrive meme plus a faire fonctionner le glisser deposer interne , qui marchat au debut...

help, je tourne en rond..mais bon je suis rassuré c est exactement ce dont j ai besoin smile

Hors ligne

#9 Le 15/12/2006, à 11:20

Pho8os

Re : recherche un "mentor" pour pygtk

ok, pas mal.
Si ton drag&drop ne fonctionne pas (plus...) c'est parce que tu ne connectes pas l'évenement "drop" à ta méthode "donnee_du_deposer"
Rajoute, ligne 58 quelque chose comme

self.treeview.connect("drag-data-received",self.donnee_du_deposer)

Dernière modification par Pho8os (Le 15/12/2006, à 11:24)

Hors ligne

#10 Le 15/12/2006, à 17:16

aleph

Re : recherche un "mentor" pour pygtk

Trois peites remarques.

Très important. Ne jamais oublier de fermer un fichier.
f = open(.....)
#lecture des données
f.close()

Moins important. Eviter d'utiliser le nom d'un type de variable comme nom de variable.
li = ['a', 'b', 'c']
et non
list =  ['a', 'b', 'c']

En Python, le méthode correcte pour parcourir une <list> est

li = ['a', 'b', 'c']
for e in li:
    print e
   
a
b
c

et non

li = ['a', 'b', 'c']
for i in range(len(li)):
    print li[i]
   
a
b
c

Brève explication. En Python certains type de données (ou ceux que l'on crée) ont une méthode
itérative sous-jacente qui se manifeste lorsque l'on utilise une commande comme

for element in <type itérable>

Ne pas utiliser cette propriété est contraproductif. C'est l'âme de Python.

Exemple avec un <tuple>

tu = ('a', 'b', 'c')
for e in tu:
    print e
   
a
b
c

Exemple avec un <dictionary>

di = (1: 'a', 2: 'b', 3:'c')
for e in di:
    print e, di[e]
   
1 a
2 b
3 c

Dans le dernier exemple, il y a mieux mais je passe ici sous silence.

#11 Le 15/12/2006, à 18:16

bakalegum_

Re : recherche un "mentor" pour pygtk

@ aleph: merci pour ce precision j en prend note smile

donc voila j ai rajouté ca

# on autorise le classement des lignes par glisser-deposer
         self.treeview.set_reorderable(True)
     self.treeview.connect("drag-data-received",self.donnee_du_deposer)
         self.fenetre.add(self.treeview)
         self.fenetre.show_all()

mais j obtient ce message d erreur

self.treeview.connect("drag-data-received",self.donnee_du_deposer)
AttributeError: ExempleTreeViewBasique instance has no attribute 'donnee_du_deposer'

je continue a chercher...
edit:
j ai trouvé c est parce qu il manque un S tongue



bon alors autre message d erreur au drag drop maintenant:

> baka@ElPeTioT:~$ python /home/baka/Desktop/treecopier.py
Traceback (most recent call last):
  File "/home/baka/Desktop/treecopier.py", line 85, in donnees_du_deposer
    modele.insert_before(iter, [donnees])
TypeError: sibling must be a GtkTreeIter or None

la je bloque smile

Dernière modification par bakalegum_ (Le 15/12/2006, à 18:21)

Hors ligne