PyGTK - обработка сигналов
В отличие от приложения консольного режима, которое выполняется последовательно, приложение на основе графического интерфейса пользователя управляется событиями. Вgtk.main()функция запускает бесконечный цикл. События, происходящие в графическом интерфейсе, передаются соответствующим функциям обратного вызова.
Каждый виджет PyGTK, производный от класса GObject, предназначен для выдачи ‘signal’в ответ на одно или несколько событий. Сам по себе сигнал не выполняет никаких действий. Вместо этого он «подключен» к функции обратного вызова.
Некоторые сигналы наследуются виджетом, тогда как некоторые сигналы специфичны для виджета. Например, виджет toggleButton излучает сигнал «переключено».
Обработчик сигнала настраивается путем вызова connect() метод класса gtk.widget.
handler_id = object.connect(name, func, func_data)
Первый аргумент, name, это строка, содержащая имя сигнала, который вы хотите поймать.
Второй аргумент, func, это функция обратного вызова, которую вы хотите вызвать, когда она будет обнаружена.
Третий аргумент, func_data, данные, которые вы хотите передать этой функции.
Идентификатор обработчика, который используется для однозначной идентификации метода обратного вызова.
Например, чтобы вызвать функцию 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