OVH Cloud OVH Cloud

Début avec Python et Tkinter

3 réponses
Avatar
smu
Bonjour,

Je débute avec python et tkinter. Je suis sous w2k.
J'ai un petit souci avec le code suivant, il doit y manquer quelque chose.

from Tkinter import *

class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.button = Button(frame, text="ADD", command=self.job)
self.button.pack(side=LEFT)
self.buttonquit = Button(frame, text="QUIT", command=frame.quit)
self.buttonquit.pack(side=LEFT)
self.list = Listbox()
self.list.pack()
def job(self):
self.list.insert(END, "Salut")

if "__main__"==__name__:
root = Tk()
app = App(root)
root.mainloop()
print "Fin"


Lorsque j'interromps le programme en cliquant sur la croix en haut à
droite, l'application se ferme "correctement".
Lorsque je clique sur le bouton QUIT qui appelle la méthode quit() de
l'objet Frame, la fenêtre se fige et je suis obligé de tuer le processus.

Il doit y avoir une solution simple pour corriger ce dysfonctionnement
mais je ne sais pas comment.

D'avance merci pour votre aide.

smu

3 réponses

Avatar
LioneL
self.buttonquit = Button(frame, text="QUIT", command=frame.quit)


utilise command=master.destroy cela permet d'éviter un bug de Tkinter et
de fermer proprement le fenêtre.

Lionel
--
Python facile : http://pythonfacile.free.fr/
Les ressources (liens) en français sur Python.
Python et l'unicode. Les caractères accentués dans un terminal 'DOS'.

Adrian a disparu, aidez-nous: http://www.encontrar-adrian.com/

Avatar
J.Pierre Pourrez
Le Thu, 14 Jul 2005 11:56:55 +0200, smu a écrit :

Je débute avec python et tkinter. Je suis sous w2k. J'ai un petit souci
avec le code suivant, il doit y manquer quelque chose.

from Tkinter import *

class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()

self.button = Button(frame, text="ADD", command=self.job)
self.button.pack(side=LEFT)


Button(frame, text="Add", command=self.job).pack(side=left)

self.buttonquit = Button(frame, text="QUIT", command=frame.quit)
self.buttonquit.pack(side=LEFT)


Button(Frame, text='QUIT', command=master.destroy).pack(side=left)

self.list = Listbox()


self.list = Listbox(frame)

self.list.pack()
def job(self):
self.list.insert(END, "Salut")

if "__main__"==__name__:
root = Tk()
app = App(root)
root.mainloop()
print "Fin"


Lorsque j'interromps le programme en cliquant sur la croix en haut à
droite, l'application se ferme "correctement". Lorsque je clique sur le
bouton QUIT qui appelle la méthode quit() de l'objet Frame, la fenêtre
se fige et je suis obligé de tuer le processus.

Il doit y avoir une solution simple pour corriger ce dysfonctionnement
mais je ne sais pas comment.

D'avance merci pour votre aide.


Avec plaisir
Jean-Pierre

Avatar
smu

self.buttonquit = Button(frame, text="QUIT", command=frame.quit)



utilise command=master.destroy cela permet d'éviter un bug de Tkinter et
de fermer proprement le fenêtre.

Lionel


Avant tout, merci à Lionel et Jean-Pierre

J'ai réécrit mon code de la façon suivante :

from Tkinter import *

class App:
def __init__(self, master):
self.master = master
self.frame = Frame(master)
self.frame.pack()
self.button = Button(self.frame, text="QUIT", fg="red",
command=self.close)
self.button.pack(side=LEFT)
self.hi_there = Button(self.frame, text="Hello",
command=self.say_hi)
self.hi_there.pack(side=LEFT)
self.list = Listbox(selectmode=EXTENDED)
self.list.pack()
def say_hi(self):
print "hi there, everyone!"
def close(self):
self.frame.quit()
self.master.destroy()

root = Tk()
app = App(root)
root.mainloop()

Si j'utilise uniquement master.destroy tel que vous le suggérez, je me
retrouve avec un message:

"Already executing

The Python Shell window is already executing a command; please wait
until it is finished."

Conclusion: si j'utilise master.destroy, il y a un bout de code qui
continue à être exécuter. Par contre, en faisant un frame.quit() avant
le master.destroy() alors il n'y a plus de problème.

smu