PyGTK-신호 처리

순차적으로 실행되는 콘솔 모드 애플리케이션과 달리 GUI 기반 애플리케이션은 이벤트 기반입니다. 그만큼gtk.main()함수는 무한 루프를 시작합니다. GUI에서 발생하는 이벤트는 적절한 콜백 함수로 전송됩니다.

GObject 클래스에서 파생 된 각 PyGTK 위젯은 ‘signal’하나 이상의 이벤트에 대한 응답. 신호 자체는 어떤 작업도 수행하지 않습니다. 대신 콜백 함수에 '연결'됩니다.

일부 신호는 위젯에 의해 상속되는 반면 일부 신호는 위젯에 따라 다릅니다. 예를 들어 "toggled"신호는 toggleButton 위젯에 의해 방출됩니다.

신호 처리기는 다음을 호출하여 설정됩니다. connect() gtk.widget 클래스의 메소드.

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 프롬프트에서 위 코드를 실행합니다. 다음 출력이 표시됩니다-

버튼을 누르면 다음 출력이 콘솔에 표시됩니다.

Hello TutorialsPoint