【PyQt5】designer 頁面點擊按鈕跳轉頁面

首先要知道,使用 Qt designer 和 代碼進行 Qt 開發實現頁面跳轉是不一樣的,這裏我們使用的是 designer 開發,在這裏簡單記錄一下。

PyQt5 實現兩個頁面跳轉

目前場景:

  • 用 Qt designer 設計好了兩個頁面:a_ui.pyb_ui.py
  • a_ui.py 中有個按鈕的 id 爲 goButton

我們實現兩個頁面之間的跳轉:

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 實現多個頁面跳轉

PyQt5 實現多個頁面跳轉,我們可以藉助一個 Controller 控制器來實現,大體思路如下:

# 利用一個控制器來控制頁面的跳轉
class Controller:
    def __init__(self):
        pass
    def show_A(self):
    	# 創建 A 窗口對象並顯示
    	# 關閉其餘窗口對象
    def show_B(self):
    	# 創建 B 窗口對象並顯示
    	# 關閉其餘窗口對象
    def show_C(self):
    	# 創建 C 窗口對象並顯示
    	# 關閉其餘窗口對象

來看一個使用情景:

  • 用 Qt designer 設計好了三個頁面:hello.pylogin.pyoperate.py
  • hello.py 中有一個 Id 爲 loginBuuton 的按鈕,用於跳轉到 login.py 窗口
  • hello.py 中還有一個 Id 爲 operateButton 的按鈕,用於跳轉到 operate.py 窗口

實現效果

注:由於我們的 界面邏輯 是分離的,所以界面只需滿足上面的使用情境中的要求即可。

運行程序啓動一個 hello.py 的歡迎界面:
在這裏插入圖片描述
點擊 票務管理,實際上是點擊了 loginButton 按鈕,跳轉到了 login.py 登錄界面:
在這裏插入圖片描述
如果歡迎界面中點擊的是 票務查詢,實際上是點擊了 operateButton,會跳轉到 operate.py 界面:
在這裏插入圖片描述

代碼編寫

首先導入需要的模塊:系統模塊利用designer設計的頁面

import sys
from PyQt5 import QtCore, QtWidgets, QtCore

# 導入 Qt designer 設計的頁面
from hello import Ui_MainWindow as Hello_Ui 
from login import Ui_MainWindow as Login_Ui
from operate import Ui_MainWindow as Operate_Ui

然後寫頁面對應的窗口類,我們這裏簡單的實現 一個頁面往其他頁面的跳轉
實現跳轉的邏輯主要都在 HelloWindow 類中,其他窗口類僅僅做了初始化:

# 主窗口
class HelloWindow(QtWidgets.QMainWindow, Hello_Ui):
    switch_window1 = QtCore.pyqtSignal() # 跳轉信號
    switch_window2 = QtCore.pyqtSignal() # 跳轉信號
    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)

控制器用來控制頁面的跳轉:

# 利用一個控制器來控制頁面的跳轉
class Controller:
    def __init__(self):
        pass
    # 跳轉到 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()
    # 跳轉到 login 窗口, 注意關閉原頁面
    def show_login(self):
        self.login = LoginWindow()
        self.hello.close()
        self.login.show()
    # 跳轉到 operate 窗口, 注意關閉原頁面
    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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章