Tkinter help - Why this behavior ? (py3)

Dodo dodo_do_not_wake_up at yahoo.Fr
Wed Jun 9 11:10:51 EDT 2010


Le 07/06/2010 15:26, Alf P. Steinbach a écrit :
> * Dodo, on 07.06.2010 12:38:
>> Le 05/06/2010 19:07, Alf P. Steinbach a écrit :
>>> * Dodo, on 05.06.2010 15:46:
>>>> Hi,
>>>>
>>>> let's consider this exemple :
>>>>
>>>> from tkinter import *
>>>> from tkinter.ttk import *
>>>>
>>>> class First:
>>>> def __init__(self):
>>>> self.root = Tk()
>>>> B = Button(self.root, command=self.op)
>>>> B.pack()
>>>>
>>>> self.root.mainloop()
>>>>
>>>> def op(self):
>>>> Second(self)
>>>> print("print")
>>>>
>>>>
>>>> class Second:
>>>> def __init__(self, parent):
>>>> root = Toplevel(parent.root)
>>>> root.grab_set()
>>>>
>>>> root.mainloop()
>>>>
>>>>
>>>> First()
>>>>
>>>>
>>>>
>>>> when I close the second window, the print is NOT executed. It's done
>>>> when I close the first window.
>>>> Why do it "freeze" my function?
>>>
>>> First, sorry about Thunderbird 3.x messing up the quoting of the code.
>>>
>>> Don't know what they did to introduce all those bugs, but anyway,
>>> Thunderbird 3.x is an example that even seasoned programmers introduce
>>> an unbelievable number of bugs, I think mostly just by repeating code
>>> patterns blindly.
>>>
>>> In your code above you're doing as the TB programmers presumably did,
>>> repeating a code pattern that you've seen has worked, without fully
>>> grokking it. The call to 'mainloop' enters a loop. A button press causes
>>> your callback to be invoked from within that loop, but your code then
>>> enters a new 'mainloop'.
>>>
>>> Don't.
>>>
>>> Except for modal dialogs the single top level 'mainloop' suffices (all
>>> it does is to dispatch "messages" to "handlers", such as your button
>>> press callback). So, just place a single call to 'mainloop' at the end
>>> of your program. Remove the calls in 'First' and 'Second'.
>>>
>>>
>>
>> How do I create custom modal dialogs then?
>
> I typed
>
> tkinter modal dialog
>
> in the Firefox address bar, and it landed me on
>
> http://effbot.org/tkinterbook/tkinter-dialog-windows.htm
>
>
> Cheers & hth.,
>
> - Alf
>
>

Thanks,
I don't know why I didn't find effbot.org on the first place. But I 
__did__ googled about modal dialogs!

.wait_window() works great

Thanks for your time,
Dorian



More information about the Python-list mailing list