PyGTK 信号处理

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

PyGTK 信号处理

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

Hello TutorialsPoint

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程