PyGTK - obsługa sygnału

W przeciwieństwie do aplikacji w trybie konsoli, która jest wykonywana w sposób sekwencyjny, aplikacja oparta na graficznym interfejsie użytkownika jest sterowana zdarzeniami. Plikgtk.main()funkcja uruchamia nieskończoną pętlę. Zdarzenia występujące w GUI są przekazywane do odpowiednich funkcji zwrotnych.

Każdy widget PyGTK, który jest pochodną klasy GObject, jest przeznaczony do emisji ‘signal’w odpowiedzi na jedno lub więcej wydarzeń. Sam sygnał nie wykonuje żadnej akcji. Zamiast tego jest „połączony” z funkcją wywołania zwrotnego.

Niektóre sygnały są dziedziczone przez widżet, podczas gdy inne są specyficzne dla widżetu. Na przykład sygnał „toggled” jest emitowany przez widżet toggleButton.

Program obsługi sygnału jest konfigurowany przez wywołanie connect() metoda klasy gtk.widget.

handler_id = object.connect(name, func, func_data)
  • Pierwszy argument, name, to łańcuch zawierający nazwę sygnału, który chcesz przechwycić.

  • Drugi argument, func, to funkcja oddzwaniania, którą chcesz wywołać, gdy zostanie złapana.

  • Trzeci argument, func_data, dane, które chcesz przekazać do tej funkcji.

  • Identyfikator obsługi, który służy do jednoznacznego identyfikowania metody wywołania zwrotnego.

Na przykład, aby wywołać funkcję onClicked () po kliknięciu przycisku, użyj następującej składni -

btn.connect("clicked",onClicked,None)

Funkcja onClicked () jest zdefiniowana jako -

def onClicked(widget, data=None):

Jeśli metoda wywołania zwrotnego jest metodą obiektową, otrzymuje self jako dodatkowy argument -

def onClicked(self, widget, data=None):

Przykład

W poniższym przykładzie Button jest dodawany do gtk.Window. Po kliknięciu przycisku drukowany jest komunikat „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()

Uruchom powyższy kod z zachęty Pythona. Zostanie wyświetlone następujące wyjście -

Po naciśnięciu przycisku na konsoli wyświetlane są następujące dane wyjściowe -

Hello TutorialsPoint