pyqt5多窗口切换
生活随笔
收集整理的這篇文章主要介紹了
pyqt5多窗口切换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在研究qt5,研究到多窗口切換,發現網上講的不是很清楚,在此記錄一下
第一頁
首先創建頁面
first = pyqtSignal()為一個連接槽,用于連接QPushButton的事件
self.first.emit()發出一個信號
emit()默認為空,如果添加值,例:emit('first ')時pyqtSignal()必須要一個參數接收數據pyqtSignal(str)str為數據類型,可自己替換
需要注意的是emit('first ')與pyqtSignal(str)數據類型要統一
可以這么寫:
class FirstUI(QWidget):first = pyqtSignal(str)def __init__(self, *args, **kwargs):super(FirstUI, self).__init__(*args, **kwargs)self.resize(500, 500)self.but = QPushButton('first', self)self.but.resize(100, 40)self.but.move(100, 100)self.but.clicked.connect(self.but_clicked)def but_clicked(self):self.first.emit('first')self.close()第二頁
代碼與第一頁基本相同
第一種寫法
class SecondUi(QWidget):second = pyqtSignal()def __init__(self, *args, **kwargs):super(SecondUi, self).__init__(*args, **kwargs)self.resize(500, 500)self.but = QPushButton('second', self)self.but.resize(100, 40)self.but.move(100, 100)self.but.clicked.connect(self.but_clicked)def but_clicked(self):self.second.emit()self.close()第二種寫法
class SecondUi(QWidget):second = pyqtSignal(str)def __init__(self, *args, **kwargs):super(SecondUi, self).__init__(*args, **kwargs)self.resize(500, 500)self.but = QPushButton('second', self)self.but.resize(100, 40)self.but.move(100, 100)self.but.clicked.connect(self.but_clicked)def but_clicked(self):self.second.emit('second')self.close()調用頁面
self.firstui.first.connect(self.second)重寫FirstUI()中的QPushButton事件
同理SecondUi()也是
注:重寫后,程序會先運行
def but_clicked(self): self.second.emit('second') self.close()函數,運行完畢后會繼續續運行自定義的函數
如果需要接收self.second.emit('second')中的’second’值,在調用槽函數時,在self.firstui.first.connect(self.second)中 可用self.second接收
完整代碼
from PyQt5.QtWidgets import * from PyQt5.QtCore import * import sysclass FirstUI(QWidget):first = pyqtSignal(str)def __init__(self, *args, **kwargs):super(FirstUI, self).__init__(*args, **kwargs)self.resize(500, 500)self.but = QPushButton('first', self)self.but.resize(100, 40)self.but.move(100, 100)self.but.clicked.connect(self.but_clicked)def but_clicked(self):self.first.emit('first')self.close()class SecondUi(QWidget):second = pyqtSignal(str)def __init__(self, *args, **kwargs):super(SecondUi, self).__init__(*args, **kwargs)self.resize(500, 500)self.but = QPushButton('second', self)self.but.resize(100, 40)self.but.move(100, 100)self.but.clicked.connect(self.but_clicked)def but_clicked(self):self.second.emit('second')self.close()class MainWindow:def first(self):self.firstui = FirstUI()self.firstui.first.connect(self.second)self.firstui.show()def second(self, st):print(st)self.secondui = SecondUi()self.secondui.second.connect(self.first)self.secondui.show()if __name__ == '__main__':app = QApplication(sys.argv)ma = MainWindow()ma.first()sys.exit(app.exec_()) # app.exet_()是指程序一直循環運行直到主窗口被關閉終止進程(如果沒有這句話,程序運行時會一閃而過)若不需要第三個調用函數MainWindow(),也可以這么寫
from PyQt5.QtWidgets import * from PyQt5.QtCore import * import sysclass FirstUI(QWidget):def __init__(self, *args, **kwargs):super(FirstUI, self).__init__(*args, **kwargs)self.resize(500, 500)self.but = QPushButton('first', self)self.but.resize(100, 40)self.but.move(100, 100)self.but.clicked.connect(self.but_clicked)def but_clicked(self):self.close()# SecondUi必須為類的一個屬性,否則程序會一閃而過,必須帶self.self.s = SecondUi()self.s.show()class SecondUi(QWidget):def __init__(self, *args, **kwargs):super(SecondUi, self).__init__(*args, **kwargs)self.resize(500, 500)self.but = QPushButton('second', self)self.but.resize(100, 40)self.but.move(100, 100)self.but.clicked.connect(self.but_clicked)def but_clicked(self):self.close()# FirstUI必須為類的一個屬性,否則程序會一閃而過,必須帶self.self.f = FirstUI()self.f.show()if __name__ == '__main__':app = QApplication(sys.argv)f = FirstUI()f.show()sys.exit(app.exec_())總結
以上是生活随笔為你收集整理的pyqt5多窗口切换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTB打靶日记:Cerberus
- 下一篇: 中国净水设备市场需求前景分析及投资策略研