日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PyQt5 笔记7 -- 多个类共享信号

發布時間:2025/3/12 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PyQt5 笔记7 -- 多个类共享信号 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PyQt5 筆記7 – 多個類共享信號


應用:對話框發送信號給主窗口,控制主窗口的控件


1、信號傳遞


  • 主窗口類中自定義信號并在構造函數中綁定槽函數
  • 實例化對話框類時把主窗口的對象傳過去
  • 對話框中自定義信號并在構造函數中綁定槽函數為主窗口類中的信號觸發函數
  • 當要執行主窗口類中自定義信號綁定槽函數時,只要觸發當前類中的自定義信號,就可以往上傳遞信號了
  • 可以嵌套多層
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog, QPushButton from PyQt5.QtCore import Qt, pyqtSignalclass MainWindow(QMainWindow):"""主窗口類"""my_signal = pyqtSignal()def __init__(self, *args):super(MainWindow, self).__init__(*args)# 設置主窗口的標題及大小self.setWindowTitle('主窗口')self.resize(400, 300)# 創建按鈕self.btn = QPushButton(self)self.btn.setText('彈出對話框')self.btn.clicked.connect(self.show_dialog)# 自定義信號綁定self.my_signal.connect(self.test)# 創建對話框對象self.dialog = Dialog(self)def show_dialog(self):self.dialog.show()self.dialog.exec()def test(self):self.btn.setText('我改變了')class Dialog(QDialog):"""對話框類"""my_signal = pyqtSignal()def __init__(self, parent, *args):super(Dialog, self).__init__(*args)# 設置對話框的標題及大小self.setWindowTitle('對話框')self.resize(200, 200)self.setWindowModality(Qt.ApplicationModal)self.btn = QPushButton(self)self.btn.setText('改變主窗口按鈕的名稱')self.btn.clicked.connect(self.my_signal.emit)# 自定義信號綁定self.my_signal.connect(parent.my_signal.emit)if __name__ == '__main__':app = QApplication(sys.argv)demo = MainWindow()demo.show()sys.exit(app.exec())

2、單例模式


  • 新建一個信號類成單例模式(該類只能有一個對象),類中自定義信號和一個觸發信號的方法
  • 在主窗口類中獲得信號類的對象的自定義信號,并綁定槽函數
  • 在對話框類中調用信號類對象中的觸發信號的方法即可觸發信號
  • 可以有多個對話框類共用信號類的觸發信號方法
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog, QPushButton from PyQt5.QtCore import QObject, Qt, pyqtSignalclass MySignal(QObject):"""信號類"""instance = Nonesignal = pyqtSignal()@classmethoddef my_signal(cls):if cls.instance:return cls.instanceelse:obj = cls()cls.instance = objreturn cls.instancedef em(self):self.signal.emit()class MainWindow(QMainWindow):"""主窗口類"""Signal = MySignal.my_signal().signaldef __init__(self, *args):super(MainWindow, self).__init__(*args)# 設置主窗口的標題及大小self.setWindowTitle('主窗口')self.resize(400, 300)# 創建按鈕self.btn = QPushButton(self)self.btn.setText('彈出對話框')self.btn.move(50, 50)self.btn.clicked.connect(self.show_dialog)# 自定義信號綁定self.Signal.connect(self.test)self.dialog = Dialog()def show_dialog(self):self.dialog.show()self.dialog.exec()def test(self):self.btn.setText('我改變了')class Dialog(QDialog):"""對話框類"""def __init__(self, *args):super(Dialog, self).__init__(*args)# 設置對話框的標題及大小self.setWindowTitle('對話框')self.resize(200, 200)self.setWindowModality(Qt.ApplicationModal)self.btn = QPushButton(self)self.btn.setText('改變主窗口按鈕的名稱')self.btn.move(50, 50)self.btn.clicked.connect(MySignal.my_signal().em)if __name__ == '__main__':app = QApplication(sys.argv)demo = MainWindow()demo.show()sys.exit(app.exec())

總結

以上是生活随笔為你收集整理的PyQt5 笔记7 -- 多个类共享信号的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。