Apple Python启动程序正在执行命令键绑定

时间:2011-03-21 01:09:49

标签: python macos tkinter

我编写了一个使用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。

3 个答案:

答案 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