Pygtk 简明教程

PyGTK - Signal Handling

与按顺序执行的控制台模式应用程序不同,基于 GUI 的应用程序是事件驱动的。 gtk.main() 函数会启动一个无限循环。GUI 上发生的事件会被传输到相应的回调函数中。

每个 PyGTK 小工具均源自 GObject 类,它被设计为在针对一个或多个事件做出响应时发出 ‘signal’ 。信号自身并不执行任何操作。相反,它会“连接”到一个回调函数。

某些信号会被小工具继承,而另一些信号是小工具特有的。例如,toggleButton 小工具会发出“toggled”信号。

通过调用 gtk.widget 类中的 connect() 方法可以设置信号处理程序。

handler_id = object.connect(name, func, func_data)
  1. 第一个参数 name 是一个字符串,它包含要捕获的信号的名称。

  2. 第二个参数 func 是在捕获到信号时要调用的回调函数。

  3. 第三个参数 func_data 是要传递给此函数的数据。

  4. 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 提示符下运行上述代码。将显示以下输出 -

signal handling

当按钮被按下时,以下输出会显示在控制台上 -

Hello TutorialsPoint