PyQt-신호 및 슬롯

순차적으로 실행되는 콘솔 모드 애플리케이션과 달리 GUI 기반 애플리케이션은 이벤트 기반입니다. 버튼 클릭, 컬렉션에서 항목 선택 또는 마우스 클릭 등과 같은 사용자의 작업에 대한 응답으로 함수 또는 메서드가 실행됩니다.events.

GUI 인터페이스를 구축하는 데 사용되는 위젯은 이러한 이벤트의 소스 역할을합니다. QObject 클래스에서 파생 된 각 PyQt 위젯은 'signal'하나 이상의 이벤트에 대한 응답으로. 신호 자체는 어떤 작업도 수행하지 않습니다. 대신 '에'연결 '됩니다.slot'. 슬롯은 무엇이든 될 수 있습니다.callable Python function.

PyQt에서 신호와 슬롯 간의 연결은 다른 방식으로 달성 될 수 있습니다. 다음은 가장 일반적으로 사용되는 기술입니다.

QtCore.QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function)

시그널이 위젯에 의해 방출 될 때 slot_function을 호출하는 더 편리한 방법은 다음과 같습니다.

widget.signal.connect(slot_function)

버튼을 클릭 할 때 함수가 호출된다고 가정합니다. 여기에서 클릭 된 신호는 호출 가능한 함수에 연결됩니다. 다음 두 가지 기술 중 하나로 달성 할 수 있습니다.

QtCore.QObject.connect(button, QtCore.SIGNAL(“clicked()”), slot_function)

또는

button.clicked.connect(slot_function)

다음 예제에서는 QDialog 창에 두 개의 QPushButton 개체 (b1 및 b2)가 추가됩니다. b1과 b2를 각각 클릭 할 때 b1_clicked ()와 b2_clicked () 함수를 호출하려고합니다.

b1을 클릭하면 clicked () 신호가 b1_clicked () 함수에 연결됩니다.

b1.clicked.connect(b1_clicked())

b2를 클릭하면 clicked () 신호가 b2_clicked () 함수에 연결됩니다.

QObject.connect(b2, SIGNAL("clicked()"), b2_clicked)

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

def window():
   app = QApplication(sys.argv)
   win = QDialog()
   b1 = QPushButton(win)
   b1.setText("Button1")
   b1.move(50,20)
   b1.clicked.connect(b1_clicked)

   b2 = QPushButton(win)
   b2.setText("Button2")
   b2.move(50,50)
   QObject.connect(b2,SIGNAL("clicked()"),b2_clicked)

   win.setGeometry(100,100,200,100)
   win.setWindowTitle("PyQt")
   win.show()
   sys.exit(app.exec_())

def b1_clicked():
   print "Button 1 clicked"

def b2_clicked():
   print "Button 2 clicked"

if __name__ == '__main__':
   window()

위의 코드는 다음 출력을 생성합니다.

산출

Button 1 clicked
Button 2 clicked