PyQt 5 매일 배 워 야 할 이벤트 와 신호

이 부분 에서 우 리 는 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).응용 프로그램 종료.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기