Pygtk 简明教程
PyGTK - Signal Handling
与按顺序执行的控制台模式应用程序不同,基于 GUI 的应用程序是事件驱动的。 gtk.main() 函数会启动一个无限循环。GUI 上发生的事件会被传输到相应的回调函数中。
每个 PyGTK 小工具均源自 GObject 类,它被设计为在针对一个或多个事件做出响应时发出 ‘signal’ 。信号自身并不执行任何操作。相反,它会“连接”到一个回调函数。
某些信号会被小工具继承,而另一些信号是小工具特有的。例如,toggleButton 小工具会发出“toggled”信号。
通过调用 gtk.widget 类中的 connect() 方法可以设置信号处理程序。
handler_id = object.connect(name, func, func_data)
-
第一个参数 name 是一个字符串,它包含要捕获的信号的名称。
-
第二个参数 func 是在捕获到信号时要调用的回调函数。
-
第三个参数 func_data 是要传递给此函数的数据。
-
handler id,它用于唯一标识回调方法。
例如,要当按钮被单击时调用 onClicked() 函数,请使用以下语法:
btn.connect("clicked",onClicked,None)
onClicked() 函数定义为:
def onClicked(widget, data=None):
如果回调方法是一个对象方法,则它会额外接收 self 作为参数:
def onClicked(self, widget, data=None):
Example
在以下示例中,一个 Button 被添加到了 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