Bonjour,

Mon soucis dans ce bout de code est que si j enleve le print dans la boucle
le canvas ne se cree pas et la fonction create_rectangle ne s affiche pas

quelle est la relation entre print sur la console et Tkinter?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from Tkinter import *
import subprocess
def go():
    top = Canvas(fenetre, relief=RAISED, borderwidth=4)
    top.grid()
    p = subprocess.Popen("dir c:",bufsize=0,shell=True, stdout=subprocess.PIPE).stdout
    while 1:
        line = p.read(3)
        if not line:
            break
        chaine=(line.partition(" ")[0])
        if chaine.isdigit() == 1:
            top.delete(all)
            top.create_rectangle(1,1,int(chaine),40, fill="blue")
            print int(chaine)  #ici est le probleme
    top.destroy()
fenetre = Tk()
bgo = Button(fenetre, text="  go  ", command= go)
bgo.grid()
bquit = Button(fenetre, text=" Quit ", command= fenetre.quit)
bquit.grid()
fenetre.mainloop()
fenetre.destroy()
rapidement j explique :

je cree une fenetre tk avec 2 boutons bquit qui ferme l appli et bgo qui lance la fonction def go():

go : ouvre un canvas (top) dans ma fenetre
lance p un subprocess.Popen pipé qui lance betement 'dir c:'
tant que je lis 3 caracteres je continue sinon break (la commande dir est finie)
cette chaine je la coupe en 3 separé par un espace et je garde la partie 0 (du genre "424"," ","fichierTruc"
si la chaine est un digit (chiffre seulement) alors True je continue (dans l example 424)
j efface mes anciens rectangles (toute la liste comme cela c est certain)
j en cree un de x=1 y=1 longueur int(de la string chaine soit 424), hauteur 40, que je remplis en bleu
je print quelque chose ici la valeur convertie en nombre (donc 424)
la boucle finie j efface mon canvas (je retrouve mes 2 boutons)

le programme tel quel fonctionne, c est pas beau, ca va trop vite, le rectangle glignote mais c est pas grave
le probleme est que si je supprime le Print, il n y a plus de rectangle, ni d ailleurs de canvas

il faut un print n importe ou dans une des boucles (dans le if ou dans le while), qui imprime n importe quoi sinon ca marche pas

si quelqun a des indices, je suis preneur