[Python] Imprimer une liste dans une zone texte...

Imprimer une liste dans une zone texte... [Python] - Python - Programmation

Marsh Posté le 24-10-2003 à 22:25:56    

Salut,
 
Je voudrais savoir que dois-je utiliser pour copier le contenu d'une liste dans une zone de texte. Je m'explique, je récupère dans une liste les imprimantes installées sur le système, puis ensuite je l'affiche dans l'interpréteur Python (grace à un Print), mais je viens de créer une interface graphique pour mon programme et je voudrais "imprimer" le contenu de cette liste dans une zone de texte (ou autre si Python le propose, un label par exemple, ... sachant que ca tiens sur plusieurs lignes).
 
J'espère avoir été clair :) sinon n'hésitez pas à me poser des questions.
 
Voilà mon code pour le moment:
 

Code :
  1. # -*- coding: cp1252 -*-
  2. import win32print
  3. from Tkinter import *
  4. class printer:
  5.     def __init__(self):
  6.         self.fenetre = Tk()
  7.         self.fenetre.title("Detect Printer" )
  8.         font10 = ('Times', 15, 'italic')
  9.         self.texte1 = Label(self.fenetre, text = "Logiciel de détection d'imprimantes", fg='red', font = font10)
  10.         self.texte1.pack()
  11.         self.listeL = []
  12.         self.listeN = []
  13.        
  14.     def listePrinter(self):
  15.        
  16. #Recherche des imprimantes
  17.         try:
  18.             for (Flags,pDescription,pName,pComment) in list(win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL,None,1)):
  19.                 self.listeL.append(pName)
  20.        
  21.         except:
  22.             print '    >> Aucune imprimante locale détectée.'
  23.         try:   
  24.             for (Flags,pDescription,pName,pComment) in list(win32print.EnumPrinters(win32print.PRINTER_ENUM_CONNECTIONS,None,1)):
  25.                 self.listeN.append(pName)
  26.         except:
  27.             print '    >> Aucune imprimante réseau detectée'
  28. #Impression des deux listes
  29.         print 'Liste des imprimantes locales:'
  30.         for i in range(len(self.listeL)):
  31.             print '    >>',self.listeL[i]
  32.         print ""
  33.         print 'Liste des imprimantes réseau:'
  34.         for j in range(len(self.listeN)):
  35.             print '    >>',self.listeN[j]
  36.  
  37. if __name__ == '__main__':
  38.     a = printer()
  39.     a.listePrinter()
  40.     a.fenetre.mainloop()      #Je suis obligé de rajouter le mainloop() içi car dans le def__init__ ca provoque un comportement étrange: tant que la fenêtre "fenetre" n'est pas fermée la liste des imprimantes ne s'affiche pas dans l'IDLE.


Message édité par Webman le 25-10-2003 à 10:35:41
Reply

Marsh Posté le 24-10-2003 à 22:25:56   

Reply

Marsh Posté le 25-10-2003 à 09:30:55    

Un petit UP, je précise que dans mon code pour l'instant "j'imprime" les listes dans l'interpréteur mais que mon but est bien de les "imprimer" dans la fenêtre fenetre.
 
:hello:
 
EDIT: je viens de farfouiller la doc et je pense que je dois utiliser le "composant" Message  pour afficher mon texte, car je veux afficher un texte multi-lignes sans que celui ci soit modifiable.


Message édité par Webman le 25-10-2003 à 10:06:10
Reply

Marsh Posté le 25-10-2003 à 11:03:33    

J'ai trouvé une méthode grace aux listbox, ca marche mais le résultat n'est pas encore trés esthétique... donc a travailler encore :d
 

Code :
  1. # -*- coding: cp1252 -*-
  2. #Programme de détection des imprimantes locales et réseau sous Windows...
  3. from Tkinter import *
  4. import win32print
  5. class printer:
  6.     def __init__(self):
  7.         self.fenetre = Tk()
  8.         self.fenetre.title("Detect Printer" )
  9.         font10 = ('Arial', 10, 'bold')
  10.         self.texte1 = Label(self.fenetre, text = "Logiciel de détection d'imprimantes", fg='black', font = font10)
  11.         self.texte1.pack()
  12.         self.listeL = []
  13.         self.listeL.append("Imprimantes locales: " )
  14.         self.listeN = []
  15.         self.listeN.append("Imprimantes réseau: " )
  16.         self.bouttonQuitter = Button(self.fenetre, text ="QUITTER", command = self.fenetre.destroy)
  17.         self.bouttonQuitter.pack(side = BOTTOM)
  18.        
  19.        
  20.     def listePrinter(self):
  21.        
  22. #Recherche des imprimantes
  23.         try:
  24.             for (Flags,pDescription,pName,pComment) in list(win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL,None,1)):
  25.                 self.listeL.insert(0, pName)
  26.                 #self.listeL.reverse() Utile uniquement si on utilise juste au dessus append() à la place de insert()
  27.                
  28.        
  29.         except:
  30.             print '    >> Aucune imprimante locale détectée.'
  31.         try:   
  32.             for (Flags,pDescription,pName,pComment) in list(win32print.EnumPrinters(win32print.PRINTER_ENUM_CONNECTIONS,None,1)):
  33.                 self.listeN.insert(0, pName)
  34.                 #self.listeN.reverse() Utile uniquement si on utilise juste au dessus append() à la place de insert()
  35.                
  36.         except:
  37.             print '    >> Aucune imprimante réseau detectée'
  38. #Impression des deux listes dans les listbox
  39.         listBoxLoc = Listbox(self.fenetre)
  40.         for i in self.listeL :
  41.             listBoxLoc.insert(0, i)
  42.             listBoxLoc.pack(side = LEFT)
  43.         listBoxNet = Listbox(self.fenetre)
  44.         for i in self.listeN:
  45.             listBoxNet.insert(0, i)
  46.             listBoxNet.pack(side = RIGHT)
  47.  
  48. if __name__ == '__main__':
  49.     a = printer()
  50.     a.listePrinter()
  51.     a.fenetre.mainloop()


Message édité par Webman le 25-10-2003 à 16:03:53
Reply

Marsh Posté le 26-10-2003 à 09:44:46    

:bounce:
 
Alors pas de meilleure méthode que les listbox ?
 
:hello:

Reply

Marsh Posté le 26-10-2003 à 19:27:21    

Bah je suis pas un expert en TK, mais je cerne pas bien ton probleme...
Tu peux tout a fait utiliser une case de saisie de texte multi-lignes non editable, non ? :??:

Reply

Marsh Posté le 27-10-2003 à 08:04:39    

Bah oui, pourquoi pas, mais je connais absolument pas (ou du moins trop peu Tkinter) donc je ne sais pas comment le faire... de plus la doc sur Tkinter est pas des plus claires à ce sujet), donc je me disais qu'il doit surement avoir ici quelqu'un qui pourrait m'expliquer cela en 2 lignes :)
 
:hello: et merci de ta réponse ;)

Reply

Marsh Posté le 27-10-2003 à 14:08:56    

Sinon, apres consult rapide d'une doc, le Label doit marcher... t'as essayé ?

Reply

Marsh Posté le 28-10-2003 à 09:08:28    

Non je n'ai pas essayé le label car je cherchais un objet multi-lignes, mais je vais essayer quand même l'essayer :jap:
 
:hello:


Message édité par Webman le 28-10-2003 à 09:08:49
Reply

Marsh Posté le 29-10-2003 à 10:46:22    

webman a écrit :

Non je n'ai pas essayé le label car je cherchais un objet multi-lignes, mais je vais essayer quand même l'essayer :jap:
 
:hello:


Bah le label, avec des '\n' entre tes lignes peut peut-etre devenir muti-lignes (je dis ca mais je n'ai pas testé !).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed