[Python-bugs-list] [ python-Bugs-453489 ] Using deiconify() hangs on exit

noreply@sourceforge.net noreply@sourceforge.net
Thu, 07 Nov 2002 07:00:54 -0800


Bugs item #453489, was opened at 2001-08-20 16:38
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=453489&group_id=5470

Category: Tkinter
Group: Platform-specific
Status: Open
Resolution: None
Priority: 4
Submitted By: Nobody/Anonymous (nobody)
Assigned to: Nobody/Anonymous (nobody)
Summary: Using deiconify() hangs on exit

Initial Comment:
If you run the following script, and iconize the 
window before the after() timer, it'll restore and 
raise the window as it should, but then you can't 
exit.  You have to kill winoldap with ctrl+alt+del and 
wait.

I ran into this trying to write a portable jabber 
client using tkinter.

This is with 2.1.1 on Windows 98.  Does it every 
time.  May be related to bug #216289.

from Tkinter import *
import sys

def foo():
   print 'foo'
   sys.stdout.flush()
   root.deiconify()
   print 'bar'
   sys.stdout.flush()

root=Tk()
Button(root, text='Quit', command=root.quit).pack()
root.after(5000, foo)
root.mainloop()


----------------------------------------------------------------------

>Comment By: Guido van Rossum (gvanrossum)
Date: 2002-11-07 10:00

Message:
Logged In: YES 
user_id=6380

idiscovery, when you say "PythonWin" do you actually mean
Pythonwin (a Win32-specific Python IDE, part of Mark
Hammond's win32all)?  Or do you simple mean "Python under
Windows", as installed by the Python installer you get from
python.org? This difference is significant; I would not
expect Tkinter apps to work well using Pythonwin, because it
has its own Win32 event loop.

I don't understand why you'd need a root.destroy() after
root.mainloop() exits -- when Python exits, it destroys the
Tk windows anyway in my experience.

----------------------------------------------------------------------

Comment By: Internet Discovery (idiscovery)
Date: 2002-11-03 06:06

Message:
Logged In: YES 
user_id=33229

See my comments in bug 231207:
    IMHO all Tkinter programs need a root.destroy() 
    after root.mainloop()

Your test case DOES NOT die whether or not you deiconify it,
if you run it under PythonWin.

Your test case DOES die whether or not you deiconify it,
whether or not you run it under PythonWin, if you add a
    root.destroy()
after the
    root.mainloop()

If you run it as a console script without the root.destroy()
then Python reaches the end of the script and exits, without 
having shut Tk down first. PythonWin of course is not exiting
at the end, and in the status line says the script 
returns with code 0.

I think this is a usage/documentation error and is 
IMHO unrelated to the very real bug 216289.


----------------------------------------------------------------------

Comment By: Howard Lightstone (hlightstone)
Date: 2001-09-05 14:31

Message:
Logged In: YES 
user_id=66570

Since I was also looking at #216289:

Data using pythonw.exe (Taskinfo2000):
Handles while running (before quit)
4 :      Process   4  PID:FFF6F92D, C:\PYTHON20\PYTHONW.EXE
C :      Event     1
10 :     Event     1
1C :     Mutex    17  OLESCMLOCKMUTEX
20 :     Event     1
24 :     Event     1
--------------------------------------------------------
Handles while running Python.exe (before quit)

|Handle||Type|    |Refs||Name|

4 :     Process      7  PID:FFF50719, C:\PYTHON20\PYTHON.EXE
8 :     Console      3
C :     Screen Buff  3
10 :    Screen Buff  3
18 :    Event        1
1C :    Event        1
20 :    Event        1
24 :    Event        2
28 :    Mutex       19  OLESCMLOCKMUTEX
2C :    Event        1
30 :    Event        1
34 :    Thread       1  ThID:FFF79069, PID:FFF50719, 
C:\PYTHON20\PYTHON.EXE
38 :    Event        1
3C :    Event        2
40 :    Thread       1  ThID:FFF52B8D, PID:FFF50719, 
C:\PYTHON20\PYTHON.EXE
44 :    Event        1
48 :    Event        2
4C :    Thread       1  ThID:FFF53539, PID:FFF50719, 
C:\PYTHON20\PYTHON.EXE
----------------------------------------------------------
Handles AFTER trying to quit
|Handle||Type|    |Refs||Name|

4 :     Process      4  PID:FFF50719, C:\PYTHON20\PYTHON.EXE
8 :     Console      3
C :     Screen Buff  3
10 :    Screen Buff  3
18 :    Event        1
1C :    Event        1
20 :    Event        1
24 :    Event        1
28 :    Mutex       19  OLESCMLOCKMUTEX
2C :    Event        1
30 :    Event        1
34 :    Thread       1
38 :    Event        1
3C :    Event        1
40 :    Thread       2  ThID:FFF52B8D, PID:FFF50719, 
C:\PYTHON20\PYTHON.EXE

It appears that there is a thread NOT terminating.  I just 
don't know how to go about finding it.


----------------------------------------------------------------------

Comment By: Guido van Rossum (gvanrossum)
Date: 2001-08-20 22:39

Message:
Logged In: YES 
user_id=6380

I agree that this is likely the same as #216289.

AFAIK it's a Tcl bug and we don't know what to do about it.


----------------------------------------------------------------------

Comment By: Nobody/Anonymous (nobody)
Date: 2001-08-20 18:51

Message:
Logged In: NO 

Interestingly enough, if you add a print statement after 
the mainloop(), it gets printed, showing the event loop 
exits properly.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=453489&group_id=5470