PyQt5-신호 및 슬롯

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

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

Qt Designer의 신호 / 슬롯 편집기 사용

먼저 LineEdit 컨트롤과 PushButton을 사용하여 간단한 양식을 디자인합니다.

버튼을 누르면 텍스트 상자의 내용을 지워야합니다. QLineEdit 위젯에는이를위한 clear () 메서드가 있습니다. 따라서 버튼의clicked 신호가 연결됩니다 clear() 텍스트 상자의 방법.

시작하려면 편집 메뉴에서 신호 / 슬롯 편집을 선택하거나 F4 키를 누릅니다. 그런 다음 마우스로 버튼을 강조 표시하고 커서를 텍스트 상자로 끕니다.

마우스를 놓으면 버튼의 신호와 슬롯의 방법을 보여주는 대화 상자가 표시됩니다. 클릭 된 신호 선택 및 clear () 메서드

오른쪽 하단의 신호 / 슬롯 편집기 창에 결과가 표시됩니다.

아래 코드와 같이 ui 파일에서 ui 및 Build 및 Python 코드를 저장하십시오.

pyuic5 -x signalslot.ui -o signalslot.py

생성 된 Python 코드는 다음 명령문에 의해 신호와 슬롯 사이에 연결됩니다.

self.pushButton.clicked.connect(self.lineEdit.clear)

signallot.py를 실행하고 LineEdit에 텍스트를 입력합니다. 버튼을 누르면 텍스트가 지워집니다.

신호 슬롯 연결 구축

Designer를 사용하는 대신 다음 구문을 사용하여 신호 슬롯 연결을 직접 설정할 수 있습니다.

widget.signal.connect(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 () 함수에 연결됩니다.

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets 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)
   b2.clicked.connect(b2_clicked)
   
   win.setGeometry(100,100,200,100)

   win.setWindowTitle("PyQt5")
   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