【问题标题】:Key binding for window/app in python Gtk+ 3 without menu items, UI manager, etcpython Gtk+ 3中窗口/应用程序的键绑定,没有菜单项、UI管理器等
【发布时间】:2014-04-16 13:47:47
【问题描述】:

我正在尝试将 Python 中的 GTK3 和 Cairo 用于一个最小的绘图应用程序,其中 Cairo 输出的屏幕显示是为了方便用户。

典型的用法是我运行一个命令,屏幕上会弹出一个绘图并写入文件,我希望能够尽快关闭窗口,理想情况下只是一个“q”键,但也除了默认的 Alt-F4 之外,还有常用的 Ctrl-W 和 Ctrl-Q(真的有人经常使用吗?!?)。

我还希望窗口中的 UI 尽可能少混乱:理想情况下只有标准的窗口环绕,没有菜单、工具栏等。

那么...我怎样才能将我的“q”、“Ctrl-Q”等键绑定绑定到Gtk.main_quit,而不必a)创建一个杂乱的下拉菜单栏和b)通过重量级@ 987654323@ 在此处由 Python Gtk+ 3 文档重点关注:http://python-gtk-3-tutorial.readthedocs.org/en/latest/menus.html。我希望这是可能的,并且不需要很多代码(至少不像设置所有菜单那样多!),但我在网上的任何地方都找不到示例:也许我只是在搜索错误的术语,作为 GTK 新手。

不幸的是,似乎没有任何文档说明如何进行如此简单的加速器设置,并且配置加速器键的代码在 GTK2 和 3 之间似乎存在很大差异......感谢您的帮助。

【问题讨论】:

  • 请记住 PyGTK(仅限 Gtk+ 2.x)与在 python 中执行 Gtk+ 3 程序时使用的 gi.repository 内省绑定完全不同。
  • 感谢您的澄清,我不确定它们是同一项目的不同版本还是完全独立的。听起来更像后者。

标签: python gtk keyboard-shortcuts gtk3 gobject-introspection


【解决方案1】:

将信号连接到您的主框架Win.connect('key-press-event', self.on_key_function) 并在 on_key_function (self, widget, event) 中检查 event.keyval 的值。如果您喜欢硬编码,则 ESC 为 65307。此外,对于组合键,event.state 报告 shift、alt(meta) 等:if Gdk.ModifierType.CONTROL_MASK & event.state:do_something if ctrl is pressed 您可以为 left-ctrl、right-alt 设置单独的状态;确保不要尝试捕获预定义的组合键,它们可能会被窗口管理器使用。 具有良好自省功能的 IDE 会对您有很大帮助,只需编写 Gdk(之前导入的),自动补全就会弹出很多函数/类,其中大部分都有一个不言自明的名称。

【讨论】:

  • 好极了,与所有针对更大事物的教程相比,这令人耳目一新!
  • 不好的建议。 event.keyval 是依赖于布局的,这样的热键在非拉丁键盘布局中不起作用。
  • 我没有时间检查,但它是“一体式”解决方案 - windows/linux 中的代码相同。而且布局并不相同(但是是的,都是拉丁文)。随时更新,我忙着画房子
【解决方案2】:

不要使用 key-press-event 和 keyval,它不适用于非拉丁键盘布局的用户。 GTK+ 在内部很好地将密钥值与硬件密钥匹配,此功能通过加速器(在 API 中通常缩写为 accel)和绑定公开。

【讨论】:

  • 也许可以举一个例子来说明你会如何做到这一点?
  • @Thayne,抱歉,不是在 Python 中,但对于加速器,有 an example in C,希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
相关资源
最近更新 更多