PyQt5 頁面跳轉
首先要知道,使用 Qt designer 和 代碼進行 Qt 開發實現頁面跳轉是不一樣的,這裏我們使用的是 designer 開發,在這裏簡單記錄一下。
PyQt5 實現兩個頁面跳轉
目前場景:
- 用 Qt designer 設計好了兩個頁面:
a_ui.py
、b_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.py
、login.py
、operate.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()