PyQt 5 매일 배 워 야 할 이벤트 와 신호
이벤트 이벤트
모든 GUI 프로그램 은 이벤트 로 작 동 됩 니 다.응용 프로그램 이 벤트 는 주로 사용자 로부터 발생 하지만,인터넷 연결,창 관리자,타이머 등 다른 방법 으로 도 발생 할 수 있다.응용 프로그램의 exec ()를 호출 할 때방법,응용 프로그램 이 주 순환 에 들 어 갑 니 다.주 순환 으로 각종 사건 을 감지 하고 사건 대상 에 보 냅 니 다.
이벤트 모델 에 세 명의 참여 자가 있 습 니 다.
이벤트 소스(이벤트 소스)이벤트 object(이벤트 대상)이벤트 target(이벤트 목표)
사건 의 근원 은 대상 의 상태 가 바 뀌 어 사건 이 발생 하 는 것 이다.이벤트 대상(이벤트)은 이벤트 원본 에 포 장 된 상태 변화 대상 입 니 다.사건 의 목 표 는 통 지 를 원 하 는 대상 이다.이벤트 원본 대상 은 이벤트 에서 이벤트 목표 까지 의 작업 을 대표 합 니 다.
PyQt 5 는 독특한 신호 와 슬롯 메커니즘 을 사용 하여 사건 을 처리 합 니 다.신호 와 슬롯 은 대상 간 의 통신 에 사용 되 며,특정한 사건 이 발생 했 을 때 신호 가 발사 된다.홈 은 임의의 Python 호출 이 가능 합 니 다.신호 가 발 사 될 때 홈 에 연결 되 어 호출 됩 니 다.
Signals&slots 신호 와 슬롯
이것 은 PyQt 5 의 신호 와 슬롯 을 보 여 주 는 간단 한 예 이다.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
PyQt5
, QSlider QLCDNumber 。
:
:http://blog.csdn.net/weiaitaowang
:2016 8 1
"""
import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QSlider,
QLCDNumber, QVBoxLayout)
from PyQt5.QtCore import Qt
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
lcd = QLCDNumber(self)
sld = QSlider(Qt.Horizontal, self)
vbox = QVBoxLayout()
vbox.addWidget(lcd)
vbox.addWidget(sld)
self.setLayout(vbox)
sld.valueChanged.connect(lcd.display)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle(' / ')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
우리 의 예 에서 QtGui.QLCD Number 와 QtGui.QSlider 를 사용 할 것 입 니 다.우 리 는 슬라이더 를 끌 어서 LCD 숫자 를 바 꾸 었 다.
sld.valueChanged.connect(lcd.display)
슬라이더 의 value Changed 신 호 는 lcd 디 스 플레이 슬롯 에 연 결 됩 니 다.송신기 는 대상 이 신 호 를 보 내 는 것 이다.수신 기 는 신 호 를 받 는 대상 이다.홈 은 신 호 를 피드백 하 는 방법 이다.
프로그램 실행 후
덮어 쓰기 시스템 이벤트 처리 프로그램
PyQt 5 에서 의 사건 처 리 는 종종 사건 재 작성 을 통 해 프로그램 을 처리 합 니 다.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
PyQt5
, 。
:
:http://blog.csdn.net/weiaitaowang
:2016 8 1
"""
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import Qt
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle(' ')
self.show()
def keyPressEvent(self, e):
if e.key() == Qt.Key_Escape:
self.close()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
우리 의 예 에서,우 리 는 키 프레스 이벤트()이벤트 처리 프로그램 을 다시 실현 합 니 다.
def keyPressEvent(self, e):
if e.key() == Qt.Key_Escape:
self.close()
키보드 에 있 는 Esc 키 를 누 르 면 프로그램 이 종 료 됩 니 다.이벤트 sender 이벤트 발송
같은 이벤트 대상 에 연 결 된 여러 이벤트 원본 을 쉽게 구분 하기 위해 PyQt 5 에서 sender()방법 을 사용 할 수 있 습 니 다.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
PyQt5
, 。
:
:http://blog.csdn.net/weiaitaowang
:2016 8 1
"""
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
btn1 = QPushButton(' ', self)
btn1.move(30, 50)
btn2 = QPushButton(' ', self)
btn2.move(150, 50)
btn1.clicked.connect(self.buttonClicked)
btn2.clicked.connect(self.buttonClicked)
self.statusBar()
self.setGeometry(300, 300, 300, 150)
self.setWindowTitle(' ')
self.show()
def buttonClicked(self):
sender = self.sender()
self.statusBar().showMessage(sender.text() + ' ')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
우리 의 예 에는 두 개의 버튼 이 있다.두 단 추 는 모두 buttonClicked()방법 을 연결 합 니 다.저 희 는 sender()방법 으로 클릭 한 단 추 를 응답 합 니 다.
btn1.clicked.connect(self.buttonClicked)
btn2.clicked.connect(self.buttonClicked)
두 단 추 를 같은 홈 에 연결 합 니 다.
def buttonClicked(self):
sender = self.sender()
self.statusBar().showMessage(sender.text() + ' ')
우 리 는 sender()방법 을 호출 하여 신호원 을 확정 합 니 다.프로그램의 상태 표시 줄 에 단 추 를 누 른 탭 을 표시 합 니 다.프로그램 실행 후
맞 춤 형 송신 신호
QObject 가 만 든 대상 에서 신 호 를 보 낼 수 있 습 니 다.아래 의 예 에서 우 리 는 우리 가 어떻게 신 호 를 맞 춤 형 으로 보 낼 수 있 는 지 볼 것 이다.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
PyQt5
, 。
:
:http://blog.csdn.net/weiaitaowang
:2016 8 1
"""
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import pyqtSignal, QObject
class Communicate(QObject):
closeApp = pyqtSignal()
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.c = Communicate()
self.c.closeApp.connect(self.close)
self.setGeometry(300, 300, 300, 150)
self.setWindowTitle(' ')
self.show()
def mousePressEvent(self, event):
self.c.closeApp.emit()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
우 리 는 closeApp 이라는 새로운 신 호 를 만 들 었 다.이 신 호 는 마 우 스 를 누 르 는 사건 을 발사 하 는 것 이다.이 신 호 는 QMainWindow 의 close()슬롯 에 연결 되 어 있 습 니 다.
class Communicate(QObject):
closeApp = pyqtSignal()
QObject 에서 계승 하 는 Communicate 클래스 를 만 듭 니 다.이 클래스 에는 pyqtSignal()클래스 의 속성 이 있 습 니 다.
self.c = Communicate()
self.c.closeApp.connect(self.close)
사용자 정의 closeApp 신 호 를 QMainWindow 의 close()슬롯 에 연결 합 니 다.
def mousePressEvent(self, event):
self.c.closeApp.emit()
프로그램 창 에서 마우스 가 클릭 동작 을 할 때 closeApp 신호 가 발 사 됩 니 다(emit).응용 프로그램 종료.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Qt Designer와 PyQt5로 GUI인 MQTT 구독자를 만들 때의 메모직장의 건물이 신축되었으므로, 각 층의 분전반에 전력계를 설치해, 1곳에서 모니터링할 수 있는 시스템을 구축하려고 생각했다. 전력계는 을 참고로 제작했다. 시스템의 전체도 Windows10상에, 선인의 지혜를 참고로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.