Retry: Help: Tkinter mainloop rewrite, when do we want to exit/wh ere is the "app.OnExit" callback?
Mike Fletcher
mfletch at tpresence.com
Wed Oct 25 16:52:54 EDT 2000
More information about the Python-list mailing list
Wed Oct 25 16:52:54 EDT 2000
- Previous message (by thread): facets of objects
- Next message (by thread): Quixote mailing list created
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Seems this didn't go through (or the subject wasn't clear enough). I've been asked how to run Tkinter under micro-threads. I only use wxPython, so I'm not really sure how to write the mainloop substitute for Tkinter. For wxPython I use the OnExit handler for the wxApp to kill the mainloop micro-thread. Could some Tkinter guru suggest the correct test/event for when to shut down the mainloop? Side note: are all the mouse interactions under Tkinter atomic C functions? For instance, dragging or resizing the window stops all other micro-threads until the drag/resize stops. Any pointers appreciated, Mike 8<_________________ Tkinter test ____________ import uthread9 from Tkinter import * from _tkinter import dooneevent def go(): print 'starting TK' global root root=Tk() while 1: # should use some TK-specific mechanism for determining when the root is closed, don't know what... if not dooneevent( tkinter.DONT_WAIT ): uthread9.wait( 0.01 ) print 'somehow exited loop' def yo( finishedThread ): i=0 for x in range(1000000): if x % 10000 == 0: print '.', finishedThread.exit() print 'exited mainloop' uthread9.new(yo, uthread9.new(go) ) uthread9.run() 8<______________ wxPython mainloop (from larger codebase) _______ def MainLoop(self): # This outer loop determines when to exit the application, for # this example we let the main frame reset this flag when it # closes. self.mainloopThread = uthread9.new( self.__mainLoop ) uthread9.new( self.StartMUTech ) if not uthread9.microThreadsRunning(): uthread9.run() def __mainLoop( self ): try: while 1: # This inner loop will process any GUI events until there # are no more waiting. while self.Pending(): uthread9.atomic( self.Dispatch ) # Send idle events to idle handlers. You may want to throtle # this back a bit so there is not too much CPU time spent in # the idle handlers. For this example, I'll just snooze a # little... uthread9.switchContext() uthread9.atomic( self.ProcessIdle ) uthread9.wait( 0.01 ) # hack! except: traceback.print_exc() def OnExit( self, event ): print 'closing mutech' self.MUTech.close() print 'exiting' event.Skip() if self.mainloopThread: self.mainloopThread.exit() __________________________________ Mike C. Fletcher Designer, VR Plumber http://members.home.com/mcfletch
- Previous message (by thread): facets of objects
- Next message (by thread): Quixote mailing list created
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list