国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

PyQt5每天必學之事件與信號

2020-02-22 23:45:28
字體:
來源:轉載
供稿:網友

這一部分我們將探索 PyQt5 的事件和信號是如何在應用程序中實現的。

Events事件

所有的GUI應用程序都是事件驅動的。應用程序事件主要產生自用戶,但它們也可通過其他方法來產生,例如一個互聯網連接,一個窗口管理器,或計時器。當我們調用應用程序的exec_()方法,應用程序進入主循環。主循環檢測各種事件,并把它們發送到事件對象。

在事件模型中,有三個參與者:

event source(事件源) event object(事件對象) event target(事件目標)

事件源是對象的狀態改變而產生事件。事件對象(事件)是封裝在事件源中狀態變化的對象。事件目標是希望被通知的對象。事件源對象代表處理一個事件到事件目標的任務。

PyQt5使用獨特的信號和槽機制來處理事件。信號和槽用于對象之間的通信,當一個特定的事件發生時,信號被發射。槽可以是任意的Python調用。信號發射時連接到槽被調用。

Signals & slots信號和槽

這是一個簡單的例子演示PyQt5的信號和槽。

#!/usr/bin/python3# -*- coding: utf-8 -*-"""PyQt5 教程這個例子中,我們將QSlider的滑動信號連接到QLCDNumber中。作者:我的世界你曾經來過博客:http://blog.csdn.net/weiaitaowang最后編輯:2016年8月1日"""import sysfrom PyQt5.QtWidgets import (QApplication, QWidget, QSlider, QLCDNumber, QVBoxLayout)from PyQt5.QtCore import Qtclass 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.QLCDNumber和QtGui.QSlider。我們通過拖動滑塊改變LCD數字。

sld.valueChanged.connect(lcd.display)

在這里,滑塊的 valueChanged 信號連接到 lcd 的顯示(display)槽。

發送器是對象發送信號。接收器是接收信號的對象。槽的是反饋給信號的方法。

程序執行后

這里寫圖片描述

覆寫系統事件處理程序

事件在PyQt5中的處理往往通過重寫事件來處理程序。

#!/usr/bin/python3# -*- coding: utf-8 -*-"""PyQt5 教程在這個例子中,我們執行事件處理程序。作者:我的世界你曾經來過博客:http://blog.csdn.net/weiaitaowang最后編輯:2016年8月1日"""import sysfrom PyQt5.QtWidgets import QApplication, QWidgetfrom PyQt5.QtCore import Qtclass 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_())            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南江县| 韶关市| 江山市| 淮北市| 松潘县| 合作市| 赤水市| 桑植县| 南通市| 宁明县| 黄龙县| 和田市| 从江县| 祁阳县| 高雄县| 梁山县| 同仁县| 宜兴市| 阿拉善左旗| 泰来县| 许昌县| 犍为县| 大悟县| 宽甸| 黔南| 新巴尔虎左旗| 镇雄县| 平顶山市| 大丰市| 邢台市| 陆河县| 仙居县| 巍山| 奈曼旗| 封开县| 江达县| 花莲县| 富民县| 汕尾市| 霍州市| 铁力市|