PyQt5 designer 頁面點(diǎn)擊按鈕跳轉(zhuǎn)頁面實(shí)現(xiàn)
使用 designer 進(jìn)行開發(fā)
首先要知道,使用 Qt designer 和 代碼進(jìn)行 Qt 開發(fā)實(shí)現(xiàn)頁面跳轉(zhuǎn)是不一樣的,這里我們使用的是 designer 開發(fā),在這里簡單記錄一下。
PyQt5 實(shí)現(xiàn)兩個頁面跳轉(zhuǎn)
目前場景:
- 用 Qt designer 設(shè)計(jì)好了兩個頁面:
a_ui.py
、b_ui.py
a_ui.py
中有個按鈕的 id 為goButton
我們實(shí)現(xiàn)兩個頁面之間的跳轉(zhuǎn):
from a_ui import Ui_MainWindow as A_Ui # a界面的庫 from b_ui import Ui_MainWindow as B_Ui # b界面的庫 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)多個頁面跳轉(zhuǎn)
PyQt5 實(shí)現(xiàn)多個頁面跳轉(zhuǎn),我們可以借助一個 Controller
控制器來實(shí)現(xiàn),大體思路如下:
# 利用一個控制器來控制頁面的跳轉(zhuǎn) class Controller: def __init__(self): pass def show_A(self): # 創(chuàng)建 A 窗口對象并顯示 # 關(guān)閉其余窗口對象 def show_B(self): # 創(chuàng)建 B 窗口對象并顯示 # 關(guān)閉其余窗口對象 def show_C(self): # 創(chuàng)建 C 窗口對象并顯示 # 關(guān)閉其余窗口對象
來看一個使用情景:
- 用 Qt designer 設(shè)計(jì)好了三個頁面:
hello.py
、login.py
、operate.py
hello.py
中有一個 Id 為loginBuuton
的按鈕,用于跳轉(zhuǎn)到login.py
窗口hello.py
中還有一個 Id 為operateButton
的按鈕,用于跳轉(zhuǎn)到operate.py
窗口
實(shí)現(xiàn)效果
注:由于我們的 界面 與 邏輯 是分離的,所以界面只需滿足上面的使用情境中的要求即可。
運(yùn)行程序啟動一個 hello.py
的歡迎界面:
點(diǎn)擊 票務(wù)管理,實(shí)際上是點(diǎn)擊了 loginButton
按鈕,跳轉(zhuǎn)到了 login.py
登錄界面:
如果歡迎界面中點(diǎn)擊的是 票務(wù)查詢,實(shí)際上是點(diǎn)擊了 operateButton
,會跳轉(zhuǎn)到 operate.py
界面:
代碼編寫
首先導(dǎo)入需要的模塊:系統(tǒng)模塊 和 利用designer設(shè)計(jì)的頁面
import sys from PyQt5 import QtCore, QtWidgets, QtCore # 導(dǎo)入 Qt designer 設(shè)計(jì)的頁面 from hello import Ui_MainWindow as Hello_Ui from login import Ui_MainWindow as Login_Ui from operate import Ui_MainWindow as Operate_Ui
然后寫頁面對應(yīng)的窗口類,我們這里簡單的實(shí)現(xiàn) 一個頁面往其他頁面的跳轉(zhuǎn);
實(shí)現(xiàn)跳轉(zhuǎn)的邏輯主要都在 HelloWindow
類中,其他窗口類僅僅做了初始化:
# 主窗口 class HelloWindow(QtWidgets.QMainWindow, Hello_Ui): switch_window1 = QtCore.pyqtSignal() # 跳轉(zhuǎn)信號 switch_window2 = QtCore.pyqtSignal() # 跳轉(zhuǎn)信號 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)
控制器用來控制頁面的跳轉(zhuǎn):
# 利用一個控制器來控制頁面的跳轉(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)閉原頁面 def show_login(self): self.login = LoginWindow() self.hello.close() self.login.show() # 跳轉(zhuǎn)到 operate 窗口, 注意關(guān)閉原頁面 def show_operate(self): self.operate = OperateWindow() self.hello.close() self.operate.show()
啟動整個項(xiàng)目:
def main(): app = QtWidgets.QApplication(sys.argv) controller = Controller() # 控制器實(shí)例 controller.show_hello() # 默認(rèn)展示的是 hello 頁面 sys.exit(app.exec_()) if __name__ == '__main__': main()
補(bǔ)充:使用 designer 開發(fā),頁面跳轉(zhuǎn)函數(shù)
假設(shè)寫好了一個 A 頁面:
class MainWindow(QMainWindow, Ui_MainWindow): # 多重繼承QMainWindow和Ui_MainWindow def __init__(self): super(MainWindow, self).__init__() # 先調(diào)用父類QMainWindow的初始化方法 self.setupUi(self) # 再調(diào)用setupUi方法
在 B 頁面引入了 A 頁面:
from main import MainWindow
在 A 頁面需要進(jìn)行頁面跳轉(zhuǎn)只需要封裝一個以下函數(shù)即可:
# 關(guān)閉當(dāng)前界面, 打開主界面 def toMainWindow(self): self.ui1 = MainWindow() self.ui1.show() self.close()
不使用 designer 的頁面跳轉(zhuǎn)
這個更簡單了,只需要在 main 方法里將 A 頁面的點(diǎn)擊事件與 B 頁面的展示綁定即可:
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 的同時關(guān)閉,那么給 A 的點(diǎn)擊事件同時綁定 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) # 加上這句話即可
到此這篇關(guān)于PyQt5 designer 頁面點(diǎn)擊按鈕跳轉(zhuǎn)頁面實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)PyQt5 designer按鈕跳轉(zhuǎn)頁面內(nèi)容請搜索腳本之家以前的文章或繼續(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ò)爬蟲中的同步與異步示例詳解
這篇文章主要給大家介紹了關(guān)于Python網(wǎng)絡(luò)爬蟲中同步與異步的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-02-02PyTorch 遷移學(xué)習(xí)實(shí)踐(幾分鐘即可訓(xùn)練好自己的模型)
這篇文章主要介紹了PyTorch 遷移學(xué)習(xí)實(shí)踐(幾分鐘即可訓(xùn)練好自己的模型),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03python中使用paramiko模塊并實(shí)現(xiàn)遠(yuǎn)程連接服務(wù)器執(zhí)行上傳下載功能
paramiko是用python語言寫的一個模塊,遵循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ù)繪制棋盤圖
這篇文章主要為大家介紹了如何根據(jù)可視化的需要,利用Python將Excel中的數(shù)據(jù)用棋盤圖的樣式來展示,文中的示例代碼簡潔易懂,需要的可以參考一下2023-07-07