[Tkinter-discuss] Redefine quit menu item on Mac to quit from a Twisted/Tkinter application?

Russell Owen rowen at u.washington.edu
Tue Apr 7 22:35:39 CEST 2009


On Apr 7, 2009, at 1:08 PM, Kevin Walzer wrote:

> Russell E. Owen wrote:
>> Anyone know how to redefine what the File>Quit menu item does on  
>> MacOS X using Aqua Tcl/Tk?
>> I am trying to convert a cross-platform application to use Twisted,  
>> and unfortunately this seems to make the pre-existing Quit menu  
>> item on MacOS X do *nothing*. I can't quit the application without  
>> using ctrl-C or closing the root window (not an option for this  
>> application).
>> I have tried to configure that menu item, but tk does not seem to  
>> know that it exists (the index of the last menu item is too small).
>> Any suggestions would be most welcome.
>> -- Russell
>
> The pre-defined "Quit" menu entry that comes with Tk/Aqua is in the  
> application menu, not the file menu. In my two Python/Tk apps,  
> hitting "Command-Q" quits them without any code on my part--Tk is  
> invoking the standard "quit" event.

That is the one I meant (as you surmised).

The normal Quit menu item has always worked fine for me until I  
switched to using Twisted framework. Now it does nothing.

> If...you are talking about the "Quit" entry in the app menu, try  
> something like this:
>
> self.bind('Command-Key-Q', lamdba event: sys.exit())


What should self be to bind this application-wide (for all windows and  
widgets)? Root doesn't seem to accept key events.

(Also, although this is much better than nothing, presumably it will  
not actually support the Quit menu item? If so, I hope to find a more  
thorough solution.)

-- Russell

P.S. here is a minimal Twisted/Tkinter application that cannot be quit  
normally:
import Tkinter
import twisted.internet.tksupport
root = Tkinter.Tk()
twisted.internet.tksupport.install(root)
reactor = twisted.internet.reactor
reactor.run()


Whereas the following minimal non-Twisted application quits normally:
import Tkinter
root = Tkinter.Tk()
root.mainloop()



More information about the Tkinter-discuss mailing list