通过上一节内容Gtk给按钮添加快捷键的讲解,我们了解到Gtk开发中如何给插件添加快捷键的方法,那么python+gtk3的开发中如何给按钮添加快捷键呢?其实也很简单,在python的gi库中也有相应方法的实现。
方法一:
使用Gtk.AccelGroup
1.首先介绍几个我们使用的方法:
Gtk.AccelGroup.new()
功能简介:
用于创建一个新的组合器,一个组合器可以绑定一组组合键。
Gtk.Widget.add_acceleratorr(widget,accel_signal,
accel_group, accel_key, accel_mods, accel_flags)
参数介绍:
widget:要绑定组合按键的插件
accel_signal:(str)按下热键后要激活的控件的信号
acc_group:(Gtk.AccelGroup)指定一个组合器(上一个函数创建),这个 accel group将被分配给TopLevel的控件 (主窗体)
accel_key:(int) GDK键值 我们要分配的热键
accel_mods:(Gdk.ModifierType)组合键(Shift Ctrl之类的)
accel_flags:(Gtk.AccelFlags)组合键参数,如设置是否可见
功能简介:
用于给插件添加热键或者组合按键,当组合键按下时激发相应的插件的信号,执行关联的回调函数。
Gtk.Window.add_accel_group(window,accel_group)
参数简介:
window:(Gtk.Window),所创建gui的主窗体
accel_group:(Gtk.AccelGroup)键盘按键组合器,用于添加给主窗体
功能简介:
该函数用于将创建的组合器accel_group添加到主窗体,只有这样当主窗体获得焦点时,程序才能监视组合器中的组合按键,当组合键按下时,触发相应插件的信号,执行回调函数。
2.小程序
#!/usr/bin/env python2
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk
class mywindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Hello World")
self.button = Gtk.Button(label="Click Here")
gag = Gtk.AccelGroup.new()
Gtk.Widget.add_accelerator(self.button,"clicked",gag,69,
Gdk.ModifierType.MOD1_MASK,Gtk.AccelFlags.VISIBLE)
self.button.connect("clicked",self.on_button_clicked)
self.add(self.button)
Gtk.Window.add_accel_group(self,gag)
def on_button_clicked(self, widget):
print("Hello World")
win = mywindow()
win.connect("delete-event",Gtk.main_quit)
win.show_all()
Gtk.main()
在终端执行如下命令给python程序添加可执行权限并执行:
chmod a+x helloword.py
./helloword.py
点击helloword按钮,终端输出Hello world,按下alt+e组合键,终端输出Hello world,至此python+gtk3给给插件绑定组合键设置成功。
方法二 :
使用带快捷按键的按钮:
Gtk.Button.new_with_mnemonic(label)
label:按钮上面显示的助记符,助记符前面会有下划线
这个函数用于创建一个按钮,并把按钮后面第一个字符作为快捷按键。
小程序:
#!/usr/bin/env python2
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk
class mywindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Hello World")
self.button = Gtk.Button.new_with_mnemonic("_Hello world"
)
self.button.connect("clicked",self.on_button_clicked)
self.add(self.button)
def on_button_clicked(self, widget):
print("Hello World")
win = mywindow()
win.connect("delete-event",Gtk.main_quit)
win.show_all()
Gtk.main()
此时程序的快捷键变为”alt+h“