在Python Gtk+ 3中为窗口/应用绑定快捷键,无需菜单项、UI管理器等
我正在尝试用Python结合GTK3和Cairo来做一个简单的绘图应用,Cairo的输出在屏幕上显示主要是为了方便用户。
我通常的使用方式是,运行一个命令后,图表会弹出来,同时也会保存到文件中。我希望能尽快关闭这个窗口,理想情况下只需要按“q”键,当然也希望能支持常用的Ctrl-W和Ctrl-Q,当然还有默认的Alt-F4(真的有人经常用这个吗?)。
我还希望窗口里尽量少一些杂乱的界面元素:理想情况下只保留标准的窗口边框,不要菜单、工具栏等等。
那么...我该如何把我的“q”、“Ctrl-Q”等按键绑定到Gtk.main_quit
,而不需要a) 创建一个杂乱的下拉菜单栏,b) 还要使用比较复杂的Gtk.UIManager
,这个在Python Gtk+ 3的文档中有提到:http://python-gtk-3-tutorial.readthedocs.org/en/latest/menus.html。我希望这能实现,而且不需要写很多代码(至少不要像设置所有菜单那样多!),但我在网上找不到任何例子:也许我是用错了搜索词,因为我还是个GTK的新手。
不幸的是,似乎没有关于如何设置这样一个简单快捷键的文档,而且配置快捷键的代码在GTK2和GTK3之间差别很大...谢谢你的帮助。
2 个回答
不要使用按键事件和键值,这对使用非拉丁字母键盘的用户来说是行不通的。GTK+ 在内部很好地处理了将键值与硬件按键匹配的工作,这个功能通过加速器(在API中通常简写为 accel
)和绑定来实现。
要把一个信号连接到你的主窗口,可以用这行代码:Win.connect('key-press-event', self.on_key_function)
。在这个叫做 on_key_function 的函数里,你需要检查事件的键值,也就是 event.keyval
。如果你想直接写死的话,ESC键的值是65307。对于组合键,event.state
会告诉你是否按下了shift、alt(也叫meta)等键。例如:if Gdk.ModifierType.CONTROL_MASK & event.state:do_something
,这段意思是如果按下了ctrl键,就做某件事情。
你可以为左边的ctrl和右边的alt分别写不同的判断语句;不过要注意,不要试图捕捉一些已经定义好的组合键,因为这些可能会被窗口管理器使用掉。
使用一个功能强大的集成开发环境(IDE)会对你很有帮助,只需输入Gdk(之前已经导入过的),然后自动补全功能会弹出很多函数和类,大部分都有自解释的名字。