Who's on First, IDLE or pythonWin? Dialog Problem?

Mike Driscoll kyosohma at gmail.com
Wed Feb 11 22:33:26 CET 2009


On Feb 11, 3:27 pm, "W. eWatson" <notval... at sbcglobal.net> wrote:
> Steve Holden wrote:
> > W. eWatson wrote:
> >> Steve Holden wrote:
> >>> W. eWatson wrote:
> >>>> My program in IDLE bombed with:
> >>>> ==============
> >>>> Exception in Tkinter callback
> >>>> Traceback (most recent call last):
> >>>>   File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
> >>>>     return self.func(*args)
> >>>>   File
> >>>> "C:\Sandia_Meteors\New_Sentinel_Development\Sentuser_Utilities_Related\sentuser\sentuserNC25-Dev4.py",
>
> >>>> line 552, in OperationalSettings
> >>>>     dialog = OperationalSettingsDialog( self.master, set_loc_dict )
> >>>>   File
> >>>> "C:\Sandia_Meteors\New_Sentinel_Development\Sentuser_Utilities_Related\sentuser\sentuserNC25-Dev4.py",
>
> >>>> line 81, in __init__
> >>>>     tkSimpleDialog.Dialog.__init__(self, parent)
> >>>>   File "C:\Python25\lib\lib-tk\tkSimpleDialog.py", line 69, in __init__
> >>>>     self.wait_visibility() # window needs to be visible for the grab
> >>>>   File "C:\Python25\lib\lib-tk\Tkinter.py", line 415, in wait_visibility
> >>>>     self.tk.call('tkwait', 'visibility', window._w)
> >>>> TclError: window ".34672232" was deleted before its visibility changed
> >>>> ===============
> >>>> It runs fine in pythonWin performing the same entry operation. Open a
> >>>> menu,  select an item to open a dialog, select a select button in the
> >>>> dialog, press OK to leave the dialog. Boom, as above.
>
> >>>> (This does not mean pythonWin doesn't have problems of its own. ) If I
> >>>> just execute the code (double click on the py file, the console shows no
> >>>> problems. IDLE is unhappy.
>
> >>>> Another side to this is that I use WinMerge to find differences between
> >>>> my last saved copy and the current copy. I found the current copy had
> >>>> two lines where a abc.get() was changed to abc.get. This was undoubtedly
> >>>> from briefly using the pyWin editor, when I mis-hit some keys. Yet pyWin
> >>>> had no trouble executing the program. My guess is that while briefly
> >>>> editing there, I hit some odd combination of keys that produced,
> >>>> perhaps, an invisible character that pyWin ignores.
>
> >>>> Not the 34672232 window is a dialog that I closed by pressing OK. I
> >>>> would again guess, that, if there is a problem, it occurs in the code
> >>>> that destroys the dialog.
>
> >>> Well you have to remember that you are trying to run a windowed GUI
> >>> under the control of another windows GUI, so it isn't surprising that
> >>> you hit trouble.
>
> >>> With IDLE the issue will be that IDLE already created a main window
> >>> before your program started running. With PythonWin you are using two
> >>> different toolkits, so it isn't really surprising that breaks down -
> >>> there will be two entirely separate main loops competing with each other.
>
> >> Not quite. I take down IDLE when I run pyWin, and vice versa.
>
> > The two separate loops being PyWin (which uses MFC) and your program
> > (which uses Tkinter). You just can't mix GUIs in the same process like
> > that, sorry.
>
> > regards
> >  Stedve
>
> I have no idea what MFC is or how it relates to Tkinter. Neither IDLE and
> pyWin are being run together.
>
> Assume neither is running.
> a. run IDLE, and execute program
> b. close IDLE script, and interactive window. Kill py program
> result: boom
> c. run pyWin and execute program
> d. do same as b for pyWin
> resulst: all OK
> e. repeat a and b.
> Result: boom
>
> Repeat the above and you get the same results.
>
> I had running IDLE successfully w/o using Pywin, and IDLE goofed, as above.
> I switched to it to see if it work there. It did. I double clicked on the py
> file, and it worked fine. Can you explain this?
>
> --
>                                 W. eWatson
>
>               (121.015 Deg. W, 39.262 Deg. N) GMT-8 hr std. time)
>                Obz Site:  39° 15' 7" N, 121° 2' 32" W, 2700 feet
>
>                      Web Page: <www.speckledwithstars.net/>

What Steve (and I) are saying is that IDLE has it's own mainloop and
your program has a mainloop too as it sounds like it is running a
Tkinter app. Sometimes when you run a Tk app from another Tk app, the
two mainloops clash and have weird issue like this one.

If you just double-click it or run it from the command line, you only
have one mainloop (i.e. the one that's part of your app). Thus, no
conflicts.

Mike



More information about the Python-list mailing list