PyQt5 designer 頁(yè)面點(diǎn)擊按鈕跳轉(zhuǎn)頁(yè)面實(shí)現(xiàn)
使用 designer 進(jìn)行開(kāi)發(fā)
首先要知道,使用 Qt designer 和 代碼進(jìn)行 Qt 開(kāi)發(fā)實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)是不一樣的,這里我們使用的是 designer 開(kāi)發(fā),在這里簡(jiǎn)單記錄一下。
PyQt5 實(shí)現(xiàn)兩個(gè)頁(yè)面跳轉(zhuǎn)
目前場(chǎng)景:
- 用 Qt designer 設(shè)計(jì)好了兩個(gè)頁(yè)面:
a_ui.py
、b_ui.py
a_ui.py
中有個(gè)按鈕的 id 為goButton
我們實(shí)現(xiàn)兩個(gè)頁(yè)面之間的跳轉(zhuǎn):
from a_ui import Ui_MainWindow as A_Ui # a界面的庫(kù) from b_ui import Ui_MainWindow as B_Ui # b界面的庫(kù) from PyQt5 import QtCore, QtWidgets import sys class AUi(QtWidgets.QMainWindow, A_Ui): def __init__(self): super(AUi, self).__init__() self.setupUi(self) class BUi(QtWidgets.QMainWindow, B_Ui): def __init__(self): super(BUi, self).__init__() self.setupUi(self) if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) a = AUi() a.show() b = BUi() # button是你定義的按鈕 a.goButton.clicked.connect( lambda:{a.close(), b.show()} ) sys.exit(app.exec_())
PyQt5 實(shí)現(xiàn)多個(gè)頁(yè)面跳轉(zhuǎn)
PyQt5 實(shí)現(xiàn)多個(gè)頁(yè)面跳轉(zhuǎn),我們可以借助一個(gè) Controller
控制器來(lái)實(shí)現(xiàn),大體思路如下:
# 利用一個(gè)控制器來(lái)控制頁(yè)面的跳轉(zhuǎn) class Controller: def __init__(self): pass def show_A(self): # 創(chuàng)建 A 窗口對(duì)象并顯示 # 關(guān)閉其余窗口對(duì)象 def show_B(self): # 創(chuàng)建 B 窗口對(duì)象并顯示 # 關(guān)閉其余窗口對(duì)象 def show_C(self): # 創(chuàng)建 C 窗口對(duì)象并顯示 # 關(guān)閉其余窗口對(duì)象
來(lái)看一個(gè)使用情景:
- 用 Qt designer 設(shè)計(jì)好了三個(gè)頁(yè)面:
hello.py
、login.py
、operate.py
hello.py
中有一個(gè) Id 為loginBuuton
的按鈕,用于跳轉(zhuǎn)到login.py
窗口hello.py
中還有一個(gè) Id 為operateButton
的按鈕,用于跳轉(zhuǎn)到operate.py
窗口
實(shí)現(xiàn)效果
注:由于我們的 界面 與 邏輯 是分離的,所以界面只需滿(mǎn)足上面的使用情境中的要求即可。
運(yùn)行程序啟動(dòng)一個(gè) hello.py
的歡迎界面:
點(diǎn)擊 票務(wù)管理,實(shí)際上是點(diǎn)擊了 loginButton
按鈕,跳轉(zhuǎn)到了 login.py
登錄界面:
如果歡迎界面中點(diǎn)擊的是 票務(wù)查詢(xún),實(shí)際上是點(diǎn)擊了 operateButton
,會(huì)跳轉(zhuǎn)到 operate.py
界面:
代碼編寫(xiě)
首先導(dǎo)入需要的模塊:系統(tǒng)模塊 和 利用designer設(shè)計(jì)的頁(yè)面
import sys from PyQt5 import QtCore, QtWidgets, QtCore # 導(dǎo)入 Qt designer 設(shè)計(jì)的頁(yè)面 from hello import Ui_MainWindow as Hello_Ui from login import Ui_MainWindow as Login_Ui from operate import Ui_MainWindow as Operate_Ui
然后寫(xiě)頁(yè)面對(duì)應(yīng)的窗口類(lèi),我們這里簡(jiǎn)單的實(shí)現(xiàn) 一個(gè)頁(yè)面往其他頁(yè)面的跳轉(zhuǎn);
實(shí)現(xiàn)跳轉(zhuǎn)的邏輯主要都在 HelloWindow
類(lèi)中,其他窗口類(lèi)僅僅做了初始化:
# 主窗口 class HelloWindow(QtWidgets.QMainWindow, Hello_Ui): switch_window1 = QtCore.pyqtSignal() # 跳轉(zhuǎn)信號(hào) switch_window2 = QtCore.pyqtSignal() # 跳轉(zhuǎn)信號(hào) def __init__(self): super(HelloWindow, self).__init__() self.setupUi(self) self.queryButton.clicked.connect(self.goOperate) self.manageButton.clicked.connect(self.goLogin) def goLogin(self): self.switch_window1.emit() def goOperate(self): self.switch_window2.emit() # 登錄窗口 class LoginWindow(QtWidgets.QMainWindow, Login_Ui): def __init__(self): super(LoginWindow, self).__init__() self.setupUi(self) # 操作窗口 class OperateWindow(QtWidgets.QMainWindow, Operate_Ui): def __init__(self): super(OperateWindow, self).__init__() self.setupUi(self)
控制器用來(lái)控制頁(yè)面的跳轉(zhuǎn):
# 利用一個(gè)控制器來(lái)控制頁(yè)面的跳轉(zhuǎn) class Controller: def __init__(self): pass # 跳轉(zhuǎn)到 hello 窗口 def show_hello(self): self.hello = HelloWindow() self.hello.switch_window1.connect(self.show_login) self.hello.switch_window2.connect(self.show_operate) self.hello.show() # 跳轉(zhuǎn)到 login 窗口, 注意關(guān)閉原頁(yè)面 def show_login(self): self.login = LoginWindow() self.hello.close() self.login.show() # 跳轉(zhuǎn)到 operate 窗口, 注意關(guān)閉原頁(yè)面 def show_operate(self): self.operate = OperateWindow() self.hello.close() self.operate.show()
啟動(dòng)整個(gè)項(xiàng)目:
def main(): app = QtWidgets.QApplication(sys.argv) controller = Controller() # 控制器實(shí)例 controller.show_hello() # 默認(rèn)展示的是 hello 頁(yè)面 sys.exit(app.exec_()) if __name__ == '__main__': main()
補(bǔ)充:使用 designer 開(kāi)發(fā),頁(yè)面跳轉(zhuǎn)函數(shù)
假設(shè)寫(xiě)好了一個(gè) A 頁(yè)面:
class MainWindow(QMainWindow, Ui_MainWindow): # 多重繼承QMainWindow和Ui_MainWindow def __init__(self): super(MainWindow, self).__init__() # 先調(diào)用父類(lèi)QMainWindow的初始化方法 self.setupUi(self) # 再調(diào)用setupUi方法
在 B 頁(yè)面引入了 A 頁(yè)面:
from main import MainWindow
在 A 頁(yè)面需要進(jìn)行頁(yè)面跳轉(zhuǎn)只需要封裝一個(gè)以下函數(shù)即可:
# 關(guān)閉當(dāng)前界面, 打開(kāi)主界面 def toMainWindow(self): self.ui1 = MainWindow() self.ui1.show() self.close()
不使用 designer 的頁(yè)面跳轉(zhuǎn)
這個(gè)更簡(jiǎn)單了,只需要在 main 方法里將 A 頁(yè)面的點(diǎn)擊事件與 B 頁(yè)面的展示綁定即可:
import sys from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication class First(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.btn = QPushButton("Button", self) self.btn.move(30, 50) self.setGeometry(300, 300, 500, 500) self.setWindowTitle('Event sender') self.show() class Second(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 290, 150) self.setWindowTitle('Get sender') if __name__ == '__main__': app = QApplication(sys.argv) a = First() b = Second() a.show() a.btn.clicked.connect(b.show) # 重點(diǎn)在這 sys.exit(app.exec_())
如果需要點(diǎn)擊 A 跳轉(zhuǎn) B 的同時(shí)關(guān)閉,那么給 A 的點(diǎn)擊事件同時(shí)綁定 A 的關(guān)閉事件即可:
class First(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.btn = QPushButton("Button", self) self.btn.move(30, 50) self.setGeometry(300, 300, 500, 500) self.setWindowTitle('Event sender') self.show() self.btn.clicked.connect(self.close) # 加上這句話(huà)即可
到此這篇關(guān)于PyQt5 designer 頁(yè)面點(diǎn)擊按鈕跳轉(zhuǎn)頁(yè)面實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)PyQt5 designer按鈕跳轉(zhuǎn)頁(yè)面內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python神經(jīng)網(wǎng)絡(luò)MobileNetV2模型的復(fù)現(xiàn)詳解
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)MobileNetV2模型的復(fù)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Python網(wǎng)絡(luò)爬蟲(chóng)中的同步與異步示例詳解
這篇文章主要給大家介紹了關(guān)于Python網(wǎng)絡(luò)爬蟲(chóng)中同步與異步的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-02-02python下載文件時(shí)顯示下載進(jìn)度的方法
這篇文章主要介紹了python下載文件時(shí)顯示下載進(jìn)度的方法,涉及Python文件操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04Python常見(jiàn)排序操作示例【字典、列表、指定元素等】
這篇文章主要介紹了Python常見(jiàn)排序操作,結(jié)合實(shí)例形式總結(jié)分析了Python針對(duì)字典、列表及指定元素等常見(jiàn)排序操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-08-0821行Python代碼實(shí)現(xiàn)拼寫(xiě)檢查器
21行python代碼實(shí)現(xiàn)的一個(gè)簡(jiǎn)易但是具備完整功能的拼寫(xiě)檢查器,感興趣的小伙伴們可以參考一下2016-01-01PyTorch 遷移學(xué)習(xí)實(shí)踐(幾分鐘即可訓(xùn)練好自己的模型)
這篇文章主要介紹了PyTorch 遷移學(xué)習(xí)實(shí)踐(幾分鐘即可訓(xùn)練好自己的模型),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03python中使用paramiko模塊并實(shí)現(xiàn)遠(yuǎn)程連接服務(wù)器執(zhí)行上傳下載功能
paramiko是用python語(yǔ)言寫(xiě)的一個(gè)模塊,遵循SSH2協(xié)議,支持以加密和認(rèn)證的方式,進(jìn)行遠(yuǎn)程服務(wù)器的連接。這篇文章主要介紹了python中使用paramiko模塊并實(shí)現(xiàn)遠(yuǎn)程連接服務(wù)器執(zhí)行上傳下載功能,需要的朋友可以參考下2020-02-02Python實(shí)現(xiàn)基于Excel數(shù)據(jù)繪制棋盤(pán)圖
這篇文章主要為大家介紹了如何根據(jù)可視化的需要,利用Python將Excel中的數(shù)據(jù)用棋盤(pán)圖的樣式來(lái)展示,文中的示例代碼簡(jiǎn)潔易懂,需要的可以參考一下2023-07-07