我编写了一个使用tkinter的Python实用程序。我在Macintosh上运行它。执行时,它在Apple提供的Python启动程序(/Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app)中运行。
我的代码安装了自己的菜单,我绑定到我的编辑菜单(Command-x,command-c,command-x,command-a,command-z)和quitting(命令)的常用Macintosh命令键等效项-q)。我的问题是Python启动程序正在响应命令键绑定。这对于粘贴之类的东西来说是不方便的,因为它会完成两次。退出是一个真正的问题,因为启动程序会在我保存更改的文件之前杀死我的程序。
有什么方法可以阻止Python启动程序对命令密钥等效操作?我试过这个:“rootWindow.unbind ('<Command-Key-q>')
”,但无济于事。启动程序在我的代码清理之前退出。
我在OS X 10.6.6上使用CPython 3.2。
答案 0 :(得分:2)
不要覆盖Tkinter的默认键绑定,而应将re-mapping Tcl's "exit" command考虑为自定义函数。 (每次按下command-q或使用“退出”菜单项时都会调用此方法。)
def save_and_exit():
save_changed_files()
sys.exit()
self.createcommand('exit', save_and_exit)
除此之外,我建议您删除复制/粘贴自定义键绑定并让库为您完成工作。如果你仍然倾向于覆盖默认值,Effbot在Tkinter events and bindings上有一个很好的教程。
答案 1 :(得分:0)
您是否有使用Python.app进行启动的具体原因?这个.app很可能是行为不端的原因。
如果我理解正确,这个启动器只是一个带有特殊导入的默认python(/ usr / bin / python)的包装器。
如果从终端运行(-v是此处的密钥):
/Library/Frameworks/Python.framework/Versions/5.1.1/Resources/Python.app/Contents/MacOS/Python -v
您将在开始时看到它导入的内容。将这些行添加到主文件应该使命令行启动与.app。
相同另请注意,python.app的版本为5.1.1。
BR,
的Juha
答案 2 :(得分:0)
首先,/Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app
不是Apple提供的。很可能您使用python.org installers here之一或某些第三方分销商安装了Python 3.2,或者您可能从源代码构建了一个框架版本。在任何情况下,Python.app
都是每个框架版本中包含的虚拟应用程序包。它的目的是确保在调用python时,即使从命令行调用python,它也被OS X视为一个成熟的GUI应用程序。使用tkinter
时,这一点尤其重要。您看到的默认菜单和键绑定由Tcl/Tk
提供,而不是tkinter
。正如您所发现的,更改这些内容的正确方法是重新映射默认菜单。请注意,目前Mac OS X上至少有三种Tk
可用的主要变体:Aqua Carbon Tk,Aqua Cocoa Tk和X11 Tk。有一些重要的细节,特别是关于Mac OS X 10.6,关于Python and Tcl/Tk on Mac OS X at the python.org website。