PyQt5 designer 頁面點擊按鈕跳轉(zhuǎn)頁面實現(xiàn)
使用 designer 進行開發(fā)
首先要知道,使用 Qt designer 和 代碼進行 Qt 開發(fā)實現(xiàn)頁面跳轉(zhuǎn)是不一樣的,這里我們使用的是 designer 開發(fā),在這里簡單記錄一下。
PyQt5 實現(xiàn)兩個頁面跳轉(zhuǎn)
目前場景:
- 用 Qt designer 設(shè)計好了兩個頁面:
a_ui.py
、b_ui.py
a_ui.py
中有個按鈕的 id 為goButton
我們實現(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 實現(xiàn)多個頁面跳轉(zhuǎn)
PyQt5 實現(xiàn)多個頁面跳轉(zhuǎn),我們可以借助一個 Controller
控制器來實現(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è)計好了三個頁面:
hello.py
、login.py
、operate.py
hello.py
中有一個 Id 為loginBuuton
的按鈕,用于跳轉(zhuǎn)到login.py
窗口hello.py
中還有一個 Id 為operateButton
的按鈕,用于跳轉(zhuǎn)到operate.py
窗口
實現(xiàn)效果
注:由于我們的 界面 與 邏輯 是分離的,所以界面只需滿足上面的使用情境中的要求即可。
運行程序啟動一個 hello.py
的歡迎界面:
點擊 票務(wù)管理,實際上是點擊了 loginButton
按鈕,跳轉(zhuǎn)到了 login.py
登錄界面:
如果歡迎界面中點擊的是 票務(wù)查詢,實際上是點擊了 operateButton
,會跳轉(zhuǎn)到 operate.py
界面:
代碼編寫
首先導入需要的模塊:系統(tǒng)模塊 和 利用designer設(shè)計的頁面
import sys from PyQt5 import QtCore, QtWidgets, QtCore # 導入 Qt designer 設(shè)計的頁面 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)的窗口類,我們這里簡單的實現(xiàn) 一個頁面往其他頁面的跳轉(zhuǎn);
實現(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()
啟動整個項目:
def main(): app = QtWidgets.QApplication(sys.argv) controller = Controller() # 控制器實例 controller.show_hello() # 默認展示的是 hello 頁面 sys.exit(app.exec_()) if __name__ == '__main__': main()
補充:使用 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 頁面需要進行頁面跳轉(zhuǎn)只需要封裝一個以下函數(shù)即可:
# 關(guān)閉當前界面, 打開主界面 def toMainWindow(self): self.ui1 = MainWindow() self.ui1.show() self.close()
不使用 designer 的頁面跳轉(zhuǎn)
這個更簡單了,只需要在 main 方法里將 A 頁面的點擊事件與 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) # 重點在這 sys.exit(app.exec_())
如果需要點擊 A 跳轉(zhuǎn) B 的同時關(guān)閉,那么給 A 的點擊事件同時綁定 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 頁面點擊按鈕跳轉(zhuǎn)頁面實現(xiàn)的文章就介紹到這了,更多相關(guān)PyQt5 designer按鈕跳轉(zhuǎn)頁面內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python PYQT界面點擊按鈕隨機變色功能
- python編程PyQt5創(chuàng)建按鈕及觸發(fā)點擊事件示例解析
- python GUI庫圖形界面開發(fā)之PyQt5切換按鈕控件QPushButton詳細使用方法與實例
- python GUI庫圖形界面開發(fā)之PyQt5單選按鈕控件QRadioButton詳細使用方法與實例
- python之PyQt按鈕右鍵菜單功能的實現(xiàn)代碼
- PyQt5基本控件使用詳解:單選按鈕、復選框、下拉框
- pyqt5使用按鈕進行界面的跳轉(zhuǎn)方法
- python之pyqt5通過按鈕改變Label的背景顏色方法
- PyQt彈出式對話框的常用方法及標準按鈕類型
- Pyqt5中6種按鈕的具體使用
相關(guān)文章
cv2.getStructuringElement()函數(shù)及開、閉、腐蝕、膨脹原理講解
getStructuringElement()函數(shù)可用于構(gòu)造一個特定大小和形狀的結(jié)構(gòu)元素,用于圖像形態(tài)學處理,這篇文章主要介紹了cv2.getStructuringElement()函數(shù)及開、閉、腐蝕、膨脹原理講解的相關(guān)資料,需要的朋友可以參考下2022-12-12python中itertools模塊zip_longest函數(shù)詳解
itertools模塊包含創(chuàng)建高效迭代器的函數(shù),這些函數(shù)的返回值不是list,而是iterator(可迭代對象),可以用各種方式對數(shù)據(jù)執(zhí)行循環(huán)操作,今天我們來詳細探討下zip_longest函數(shù)2018-06-06Python使用pylab庫實現(xiàn)畫線功能的方法詳解
這篇文章主要介紹了Python使用pylab庫實現(xiàn)畫線功能的方法,結(jié)合具體實例分析了Python使用pylab庫的相關(guān)函數(shù)實現(xiàn)畫線功能的操作技巧,并附帶說明了相關(guān)函數(shù)與參數(shù)功能,需要的朋友可以參考下2017-06-06將TensorFlow的模型網(wǎng)絡(luò)導出為單個文件的方法
本篇文章主要介紹了將TensorFlow的網(wǎng)絡(luò)導出為單個文件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04python實現(xiàn)識別手寫數(shù)字 python圖像識別算法
這篇文章主要為大家詳細介紹了python實現(xiàn)識別手寫數(shù)字,python圖像識別算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01Django之第三方平臺QQ授權(quán)登錄的實現(xiàn)
本文主要介紹了Django之第三方平臺QQ授權(quán)登錄的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-05-05