Учебники

PyGTK – Обработка сигналов

В отличие от приложения в консольном режиме, которое выполняется последовательно, приложение на основе графического интерфейса управляется событиями. Функция gtk.main () запускает бесконечный цикл. События, происходящие в GUI, передаются в соответствующие функции обратного вызова.

Каждый виджет PyGTK, производный от класса GObject, предназначен для передачи «сигнала» в ответ на одно или несколько событий. Сигнал сам по себе не выполняет никаких действий. Вместо этого он «связан» с функцией обратного вызова.

Некоторые сигналы наследуются виджетом, тогда как некоторые сигналы зависят от виджета. Например, «переключаемый» сигнал испускается виджетом toggleButton.

Обработчик сигнала настраивается путем вызова метода connect () класса gtk.widget.

handler_id = object.connect(name, func, func_data)
  • Первый аргумент 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):

пример

В следующем примере 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. Будет отображен следующий вывод –

Обработка сигналов

При нажатии кнопки на консоли отображается следующий вывод: