PyGTK 信号处理
与顺序执行的控制台模式应用程序不同,基于GUI的应用程序是事件驱动的。 gtk.main() 函数启动一个无限循环。在GUI上发生的事件被传递到相应的回调函数。
每个PyGTK小部件,它派生自GObject类,被设计为响应一个或多个事件而发出 ‘signal’ 。单独的信号本身不执行任何操作,它被“连接”到一个回调函数。
一些信号被小部件继承,而一些信号是特定于小部件的。例如,”toggled”信号由toggleButton小部件发出。
通过调用gtk.widget类的 connect() 方法设置信号处理程序。
handler_id = object.connect(name, func, func_data)
- 第一个参数, name ,是包含您希望捕捉的信号名称的字符串。
-
第二个参数, func ,是当捕捉到信号时希望调用的回调函数。
-
第三个参数, func_data ,是您希望传递给此函数的数据。
-
处理程序ID,用于唯一标识回调方法。
例如,当单击按钮时调用 onClicked() 函数,可以使用以下语法 –
btn.connect("clicked",onClicked,None)
onClicked()函数被定义为:
def onClicked(widget, data=None):
如果回调方法是一个对象方法,它会额外接收self作为参数。
def onClicked(self, widget, data=None):
示例
在下面的示例中,将一个按钮添加到gtk.Window中。当点击按钮时,将打印“Hello World”消息。
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("Hello World in PyGTK")
self.set_default_size(400,300)
self.set_position(gtk.WIN_POS_CENTER)
self.label = gtk.Label("Enter name")
self.entry = gtk.Entry()
self.btn = gtk.Button("Say Hello")
self.btn.connect("clicked",self.hello)
fixed = gtk.Fixed()
fixed.put(self.label, 100,100)
fixed.put(self.entry, 100,125)
fixed.put(self.btn,100,150)
self.add(fixed)
self.show_all()
def hello(self,widget):
print "hello",self.entry.get_text()
PyApp()
gtk.main()
在Python提示符下运行上述代码。将显示以下输出−
当按钮被按下时,在控制台上显示以下输出。
Hello TutorialsPoint