基于PyQt5的UI界面開發——多界面切換

介紹

最初,因為課設的緣故,我只是想做一個通過按鍵進行切面切換而已,但是我看網上資料里面僅是語焉不詳,讓我困惑的很,但后面我通過摸索才發現這件事實在是太簡單了,因此我想要記錄下來。

本博客將介紹如何使用PyQt5庫創建一個具有多界面切換功能的應用程序。通過詳細的代碼示例,我們將展示如何設計一個包含兩個主要界面的應用,用戶可以通過菜單欄的選項在這兩個界面之間自由切換。代碼示例中,我們使用了QStackedWidget來實現界面的切換。此外,我們還將分享如何連接菜單項與界面切換功能的技巧。無論是初學者還是有一定經驗的開發者,都能通過本博客快速掌握PyQt5中多界面切換的實現方法,為自己的應用程序增添更多交互性和靈活性。

UI的設計

創建不需要選擇其他,就只用選擇主窗口,即下面圖所示

在左邊的控件中的Containers中選擇Stacked Widget。拉到主窗口中,拉托到合適的大小。

由于目前的不是很明顯,所以你可以暫時先修改一下它的屬性。將frameShape修改為Box。

?現在就明顯許多了,接下來我們隨便的添加一些控件。

預覽效果如下所示:

界面1

?界面2

可以通過右上角的兩個三角形進行切換,沒關系,只是這里的預覽有,通過代碼就沒有了。接下來我準備使用菜單欄來進行示例,如下所示:

這里我們將菜單欄部分的“界面1”命名為action_1,“界面2”命名為action_2。

菜單欄控制界面切換

下面為我設計的簡單ui轉換的代碼,Switch.py。

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'Switch.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(798, 553)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)self.stackedWidget.setGeometry(QtCore.QRect(50, 70, 721, 401))self.stackedWidget.setFrameShape(QtWidgets.QFrame.Box)self.stackedWidget.setObjectName("stackedWidget")self.page = QtWidgets.QWidget()self.page.setObjectName("page")self.checkBox1 = QtWidgets.QCheckBox(self.page)self.checkBox1.setGeometry(QtCore.QRect(430, 150, 75, 16))font = QtGui.QFont()font.setFamily("Times New Roman")font.setPointSize(10)font.setBold(True)font.setWeight(75)self.checkBox1.setFont(font)self.checkBox1.setObjectName("checkBox1")self.pushButton1 = QtWidgets.QPushButton(self.page)self.pushButton1.setGeometry(QtCore.QRect(260, 150, 93, 28))self.pushButton1.setObjectName("pushButton1")self.stackedWidget.addWidget(self.page)self.page_2 = QtWidgets.QWidget()self.page_2.setObjectName("page_2")self.pushButton2 = QtWidgets.QPushButton(self.page_2)self.pushButton2.setGeometry(QtCore.QRect(300, 140, 93, 28))self.pushButton2.setObjectName("pushButton2")self.checkBox2 = QtWidgets.QCheckBox(self.page_2)self.checkBox2.setGeometry(QtCore.QRect(320, 230, 75, 16))font = QtGui.QFont()font.setFamily("Times New Roman")font.setPointSize(10)font.setBold(True)font.setWeight(75)self.checkBox2.setFont(font)self.checkBox2.setObjectName("checkBox2")self.stackedWidget.addWidget(self.page_2)self.label = QtWidgets.QLabel(self.centralwidget)self.label.setGeometry(QtCore.QRect(330, 10, 141, 41))font = QtGui.QFont()font.setFamily("宋體")font.setPointSize(12)self.label.setFont(font)self.label.setObjectName("label")MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 798, 26))self.menubar.setObjectName("menubar")self.menu = QtWidgets.QMenu(self.menubar)self.menu.setObjectName("menu")MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.action_1 = QtWidgets.QAction(MainWindow)self.action_1.setObjectName("action_1")self.action_2 = QtWidgets.QAction(MainWindow)self.action_2.setObjectName("action_2")self.menu.addAction(self.action_1)self.menu.addAction(self.action_2)self.menubar.addAction(self.menu.menuAction())self.retranslateUi(MainWindow)self.stackedWidget.setCurrentIndex(0)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.checkBox1.setText(_translate("MainWindow", "test1"))self.pushButton1.setText(_translate("MainWindow", "界面1"))self.pushButton2.setText(_translate("MainWindow", "界面2"))self.checkBox2.setText(_translate("MainWindow", "test2"))self.label.setText(_translate("MainWindow", "多界面切換測試"))self.menu.setTitle(_translate("MainWindow", "選擇"))self.action_1.setText(_translate("MainWindow", "界面1"))self.action_2.setText(_translate("MainWindow", "界面2"))

下面是實現通過菜單欄進行切換的核心代碼,此處僅作一個示例。?

from PyQt5 import QtWidgetsfrom Switch import Ui_MainWindowclass SwichWindow(QtWidgets.QMainWindow, Ui_MainWindow):def __init__(self):super().__init__()self.setupUi(self)self.action_1.triggered.connect(self.showinterface_1)self.action_2.triggered.connect(self.showinterface_2)def showinterface_1(self):self.stackedWidget.setCurrentIndex(0)def showinterface_2(self):self.stackedWidget.setCurrentIndex(1)if __name__ == "__main__":import sysapp = QtWidgets.QApplication(sys.argv)window = SwichWindow()window.show()sys.exit(app.exec_())

其實,這里應該是可以直接通過槽信號連接的,但我實在是有段時間沒有接觸了,況且使用代碼也比較容易。?

演示效果

如果覺得這個框有點礙眼,可以將其調回無框的狀態。?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64135.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64135.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64135.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

操作002:HelloWorld

文章目錄 操作002:HelloWorld一、目標二、具體操作1、創建Java工程①消息發送端(生產者)②消息接收端(消費者)③添加依賴 2、發送消息①Java代碼②查看效果 3、接收消息①Java代碼②控制臺打印③查看后臺管理界面 操作…

機器視覺檢測相機基礎知識 | 顏色 | 光源 | 鏡頭 | 分辨率 / 精度 / 公差

注:本文為 “keyence 視覺沙龍中機器視覺檢測基礎知識” 文章合輯。 機器視覺檢測基礎知識(一)顏色篇 視覺檢測硬件構成的基本部分包括:處理器、相機、鏡頭、光源。 其中,和光源相關的最重要的兩個參數就是光源顏色和…

【每日學點鴻蒙知識】壓力測試、Web組件攔截器、nfc開關狀態、定位能力、rn支持的三方庫

1、HarmonyOS的wukong 支持運行python腳本進行壓力或者常規測試嗎? Python腳本調用hdc命令,執行hdc shell wukong XXXwukong只支持穩定性壓測,普通測試建議使用arkxtest測試框架 2、Web組件頁面內跳轉時自定義WebHeader問題? 如…

GDPU Vue前端框架開發 期末賽道出勇士篇(更新ing)

記住,年底陪你跨年的不會僅是方便面跟你的閨蜜,還有孑的筆記。 選擇題 1.下列選項用于設置Vue.js頁面視圖的元素是()。 A. Template B. script C. style D. title 2.下列選項中能夠定義Vuejs根實例對象的元素是(&…

Flutter開發HarmonyOS 鴻蒙App的好處、能力以及把Flutter項目打包成鴻蒙應用

Flutter開發HarmonyOS的好處: Flutter是谷歌公司開發的一款開源、免費的UI框架,可以讓我們快速的在Android和iOS上構建高質量App。它最大的特點就是跨平臺、以及高性能。 目前 Flutter 已經支持 iOS、Android、Web、Windows、macOS、Linux 的跨平臺開發…

Effective C++ 條款 17:以獨立語句將 `newed` 對象置入智能指針

文章目錄 條款 17:以獨立語句將 newed 對象置入智能指針核心思想示例代碼錯誤用法分析推薦設計總結 條款 17:以獨立語句將 newed 對象置入智能指針 核心思想 問題背景 如果在將 newed 對象傳遞給智能指針時,包含了復雜的表達式,一…

【體驗官招募】SoFlu - JavaAI 開發助手:開啟智能開發新時代

你是否有過這樣的經歷?在深夜的辦公室里,面對緊急的 Java 項目,看著厚厚的需求文檔,你是否感到無從下手? 當你嘗試理解客戶那些復雜又模糊的需求時,是否會因為要和產品經理反復溝通確認每一個細節而感到厭…

【Compose multiplatform教程07】多平臺常用組件和重要組件目錄

一、基礎交互與顯示組件 Text 查看示例 功能說明:用于在界面上顯示文本內容,支持設置字體、大小、顏色、樣式(如加粗、斜體、下劃線)等屬性,滿足不同的文本展示需求,可傳達各種信息給用戶。示例場景&#…

自學記錄HarmonyOS Next DRM API 13:構建安全的數字內容保護系統

在完成了HarmonyOS Camera API的開發之后,我開始關注更復雜的系統級功能。在瀏覽HarmonyOS Next文檔時,我發現了一個非常有趣的領域:數字版權管理(DRM)。最新的DRM API 13提供了強大的工具,用于保護數字內容…

【HENU】河南大學計院2024 操作系統 簡答題復習

和光同塵_我的個人主頁 一直游到海水變藍。 單項選擇 15x2 30 判斷 10x1 10 簡答 3x10 30 綜合 3x10 30 簡答題 簡述操作系統的四個基本特征。 并發性 共享性 虛擬性 異步性 并發性是最重要特性,其它三種特性以此為前提。 并發 并發(Concurrence)&#…

基于Android的校園導航系統

基于Android的校園導航系統是一種專為校園環境設計的移動應用程序,旨在幫助學生、教職工及訪客快速、準確地找到校園內的目的地。以下是對基于Android的校園導航系統的詳細介紹: 一、系統概述 基于Android的校園導航系統通常包括客戶端(移動…

GEE錯誤——PCA系數變換的時候出現的錯誤

目錄 錯誤提示1 錯誤提示2 原始的教程鏈接: 錯誤代碼 修正后的代碼 結果 錯誤提示1 這個是因為原始GEE教程中給的讓我們填入需要進行計算的波段名稱,而且是以list的形式傳入。 錯誤提示2 這里我們雖然傳入了正確的波段名稱,但是發現要…

C#代碼實現把中文錄音文件(.mp3 .wav)轉為文本文字內容

我們有一個中文錄音文件.mp3格式或者是.wav格式,如果我們想要提取錄音文件中的文字內容,我們可以采用以下方法,不需要使用Azure Speech API 密鑰注冊通過離線的方式實現。 1.首先我們先在NuGet中下載兩個包 NAudio 2.2.1、Whisper.net 1.7.3…

【py腳本+logstash+es實現自動化檢測工具】

概述 有時候,我們會遇到需要查看服務器的網絡連接或者內存或者其他指標是否有超時,但是每次需要登錄到服務器查看會很不方便,所以我們可以設置一個自動腳本化工具自動幫助我們查看,下面我做了一個demo在windows上面。 一、py腳本 import s…

計算機操作系統與安全復習筆記

1 緒論 操作系統目標: 方便性; 有效性; 可擴充性; 開放性. 作用: 用戶與計算機硬件系統之間的接口; 計算機資源的管理者; 實現了對計算機資源的抽象; 計算機工作流程的組織者. 多道程序設計: 內存中同時存放若干個作業, 使其共享系統資源且同時運行; 單處理機環境下宏觀上并行…

qt5.12.11+msvc編譯器編譯qoci驅動

1.之前編譯過minGW編譯器編譯qoci驅動,很順利就完成了,文章地址:minGW編譯qoci驅動詳解,今天按照之前的步驟使用msvc編譯器進行編譯,直接就報錯了: 查了些資料,發現兩個編譯器在編譯時,pro文件中引用的庫不一樣,下面是msvc編譯器引用的庫,其中編譯引用的庫我這里安裝…

Java爬蟲實戰:深度解析VIP商品詳情獲取技術

在數字化時代,數據的價值不言而喻。對于電商平臺而言,掌握VIP商品的詳細信息是提升服務質量、優化用戶體驗的關鍵。然而,這些信息往往被復雜的網頁結構和反爬蟲策略所保護。本文將帶你深入了解如何使用Java編寫爬蟲,以安全、高效地…

校史館云展廳適合遠程教學嗎?

隨著信息技術的飛速發展,遠程教學已經成為教育領域的一個重要趨勢。 校史館作為學校文化傳承的重要場所,承載著豐富的歷史信息和教育資源。 那么,將校史館搬到云端,構建云展廳,是否適合遠程教學呢? 下面…

一些elasticsearch重要概念與配置參數

ES 是在 lucene 的基礎上進行研發的,隱藏了 lucene 的復雜性,提供簡單易用的 RESTful Api接口。ES 的分片相當于 lucene 的索引。 Node 節點的幾種部署實例 實例一: 只用于數據存儲和數據查詢,降低其資源消耗率 node.master: false node.da…

交換機與路由器的區別

交換機和路由器是網絡中的兩種關鍵設備,它們各自承擔不同的功能,主要區別體現在以下幾個方面: 一、工作層次與功能 交換機: 工作層次:交換機主要工作在OSI模型的第二層,即數據鏈路層。 功能:交…