Python學習筆記——PySide6設計GUI應用之UI與邏輯分離

1、打開PySide6的UI設計工具pyside6-designer,設計一個主窗口,保存文件名為testwindow.ui

2、使用PySide6的RCC工具把testwindow.ui文件轉換為testwindow_rc.py文件,此文件中有一個類Ui_MainWindow(包含各種控件對象)

一、通過類繼承實現:

# 導入標準庫sys
import sys
# 導入PySide6庫中的兩個類:QApplication, QMainWindow
from PySide6.QtWidgets import QApplication, QMainWindow
# 導入使用PySide6-Rcc工具轉換的UI設計窗口Ui_MainWindow類
from testwindow_rc import Ui_MainWindow# 應用程序
class TestMainWindow(QMainWindow, Ui_MainWindow):def __init__(self):super(TestMainWindow, self).__init__()self.setupUi(self)if  __name__ == '__main__':app = QApplication(sys.argv)win = TestMainWindow()win.show()sys.exit(app.exec())

class TestMainWindow(QMainWindow, Ui_MainWindow): 定義了一個新的類TestMainWindow,它繼承自 QMainWindow(PySide6.QtWidget中的QtMainWindow類) 和 Ui_MainWindow。

在這種多重繼承的情況下,QMainWindow 是 PySide6中提供的一個主窗口類,它包含了很多創建和管理主窗口的功能。而 Ui_MainWindow 是由 PySide6 Designer 生成的一個界面類,它包含了在設計器中設計的窗口界面及其上的所有元素和布局。

TestMainWindow 類通過繼承這兩個類,同時獲得 QMainWindow 的窗口管理功能和 Ui_MainWindow 的界面元素。

調用執行self.setupUi(self) :其實是調用Ui_MainWindow中的setupUi()方法,傳入實參self是TestMainWindow類的實例對象,從而實現設計的窗口界面及其上元素(控件)的初始化完成布局。

通過上面的分離,以后修改Ui文件進行界面元素添加和修改屬性等,然后轉化Ui文件,將不影響邏輯代碼。

另外,定義和設計方法來控制窗口及其上控件的行為,響應用戶的操作等。要在TestMainWindow類的 __init__(self) 及其它方法中完成,這樣不會因為修改ui文件及轉化而被覆蓋。

super(TestMainWindow, self).__init__(),是 Python 中用于調用父類構造方法的一種寫法。在這里,TestMainWindow 是子類,而 self 是子類的實例。super() 函數是用來臨時改變當前類的父類,并返回一個父類的實例。因此,super(TestMainWindow, self) 返回的就是 TestMainWindow 的父類的一個實例,然后調用其 __init__() 方法,即初始化方法。

這樣做的目的是在子類的 __init__() 方法中,首先執行父類的 __init__() 方法,以便能夠繼承父類的屬性和方法。這是一種常見的在面向對象編程中實現繼承的方式。

在 Python 3 中,可以直接在子類中使用 super().__init__(),Python 會自動解析當前類和 self,不需要顯式地傳入。

二、關聯界面類來實現

# 導入標準庫sys
import sys
# 導入PySide6庫中的兩個類:QApplication, QMainWindow
from PySide6.QtWidgets import QApplication, QMainWindow
# 導入使用PySide6-Rcc工具轉換的UI設計窗口Ui_MainWindow類
from testwindow_rc import Ui_MainWindow# 創建的類繼承PySide6的主窗口類QMainWindow
class TestMainWindow(QMainWindow):def __init__(self):# 執行父類QMainWindow的構造函數,從而讓子類TestMainWindow的實例對象# 具有父類的功能和屬性super().__init__()# 創建Ui界面類實例,并賦值給TestMainWindow的實例對象屬性uiself.ui = Ui_MainWindow()# 調用TestMainWindow的實例對象屬性ui的setupUi()方法# 傳入實參self是TestMainWindow的實例對象,從而實現Ui界面元素的創建self.ui.setupUi(self)if  __name__ == '__main__':app = QApplication(sys.argv)win = TestMainWindow()win.show()sys.exit(app.exec())

三、直接載入Ui文件

import sys
from PySide6.QtCore import QFile
from PySide6.QtUiTools import QUiLoader
# 導入PySide6庫中的兩個類:QApplication
from PySide6.QtWidgets import QApplication
class TestMainWindow:def __init__(self):super(TestMainWindow, self).__init__()# 從ui文件中加載UI定義qfile = QFile("testwindow.ui")qfile.open(QFile.ReadOnly)qfile.close()# 從UI定義中動態創建一個相應的窗口對象self.ui = QUiLoader().load(qfile)if not self.ui:print(QUiLoader().errorString())sys.exit(-1)if  __name__ == '__main__':app = QApplication(sys.argv)win = TestMainWindow()win.ui.show()sys.exit(app.exec())

筆者建議使用第一種方法,通過繼承方式。

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

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

相關文章

設計模式淺析(八) ·外觀模式

設計模式淺析(八) 外觀模式 日常叨逼叨 java設計模式淺析,如果覺得對你有幫助,記得一鍵三連,謝謝各位觀眾老爺😁😁 外觀模式 概念 外觀模式(Facade Pattern)是一種設計模式,它為…

深度學習發展里程碑事件2006-2024

2006-2024年,深度學習發展經歷眾多的里程碑事件,一次次地刺激著人們的神經,帶來巨大的興奮。電影還在繼續,好戲在后面,期待…… 2006年 深度信念網絡(DBNs):Geoffrey Hinton與他的學…

備戰藍橋杯 Day10(背包dp)

01背包問題 1267:【例9.11】01背包問題 【題目描述】 一個旅行者有一個最多能裝 M� 公斤的背包,現在有 n� 件物品,它們的重量分別是W1,W2,...,Wn�1,�2&#…

藍橋杯刷題--python-10(2023填空題3)

0工作時長 - 藍橋云課 (lanqiao.cn) import datetime time_str_list=[] while(True):tmp=input()if not tmp: breaktime_str_list.append(tmp)# time_list=[datetime.datetime.strptime(t,"%Y-%m-%d %H:%M:%S")for t in time_str_list] time_list.sort() sum=0 for i…

【代碼隨想錄算法訓練營Day25】● 216.組合總和III ● 17.電話號碼的字母組合

文章目錄 Day 25 第七章 回溯算法part02216.組合總和III自己的思路(?通過) 17.電話號碼的字母組合思路代碼 Day 25 第七章 回溯算法part02 今日內容: ● 216.組合總和III● 17.電話號碼的字母組合 216.組合總和III 如果把 組合問題理解了…

計算機組成原理(9)----硬布線控制器

控制單元CU若想發出對應的控制信號,則需要以下信息:指令操作碼,目前的機器周期,節拍信號,機器狀態條件,根據這些信息,CU就能確定在這個節拍下應該發出哪些"微命令",也就是…

SQL注入:使用預編譯防御SQL注入時產生的問題

目錄 前言 模擬預編譯 真正的預編譯 預編譯中存在的SQL注入 寬字節 沒有進行參數綁定 無法預編譯的位置 前言 相信學習過SQL注入的小伙伴都知道防御SQL注入最好的方法,就是使用預編譯也就是PDO是可以非常好的防御SQL注入的,但是如果錯誤的設置了…

計算機設計大賽 深度學習動物識別 - 卷積神經網絡 機器視覺 圖像識別

文章目錄 0 前言1 背景2 算法原理2.1 動物識別方法概況2.2 常用的網絡模型2.2.1 B-CNN2.2.2 SSD 3 SSD動物目標檢測流程4 實現效果5 部分相關代碼5.1 數據預處理5.2 構建卷積神經網絡5.3 tensorflow計算圖可視化5.4 網絡模型訓練5.5 對貓狗圖像進行2分類 6 最后 0 前言 &#…

從零學算法238

238.給你一個整數數組 nums,返回 數組 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。 題目數據 保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內。 請 不要使用除法,且在 O(n) 時間復…

Python自動化UI測試之Selenium基礎實操

1. Selenium簡介 Selenium 是一個用于 Web 應用程序測試的工具。最初是為網站自動化測試而開發的,可以直接運行在瀏覽器上,支持的瀏覽器包括 IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Googl…

SVN忽略已提交的文件(ignore,移出版本控制)

本文適用于已安裝TortoiseSVN客戶端的同學。 1、右鍵點擊要忽略的文件夾或文件,鼠標移到“TortoiseSVN”,找到“Unversion and add to ignore list”,選擇文件夾,彈出提示框確認忽略。 2、設置完忽略文件后,還需要做…

多維時序 | Matlab實現GRU-MATT門控循環單元融合多頭注意力多變量時間序列預測模型

多維時序 | Matlab實現GRU-MATT門控循環單元融合多頭注意力多變量時間序列預測模型 目錄 多維時序 | Matlab實現GRU-MATT門控循環單元融合多頭注意力多變量時間序列預測模型預測效果基本介紹程序設計參考資料 預測效果 基本介紹 1.多維時序 | Matlab實現GRU-MATT門控循環單元融…

【Maven】介紹、下載及安裝、集成IDEA

目錄 一、什么是Maven Maven的作用 Maven模型 Maven倉庫 二、下載及安裝 三、IDEA集成Maven 1、POM配置詳解 2、配置Maven環境 局部配置 全局設置 四、創建Maven項目 五、Maven坐標詳解 六、導入Maven項目 方式1:使用Maven面板,快速導入項目 …

React Native框架開發介紹,以及其優點

大家好,我是咕嚕鐵蛋,在今天的文章中,我通過科技手段和大家一起探討一下React Native框架的開發介紹以及其優點。我深知選擇合適的開發工具對于項目的成功至關重要。而React Native作為一款流行的跨平臺移動應用開發框架,其獨特之…

Linux并發與競爭的基本概念

一. 簡介 Linux是一個多任務操作系統,肯定會存在多個任務共同操作同一段內存或者設備的情況, 多個任務甚至中斷都能訪問的資源叫做共享資源,在驅動開發中要注意對共享資源的保護,也就是要處理對共享資源的并發訪問。比如&#xf…

【服務器數據恢復】FreeNAS+ESXi虛擬機數據恢復案例

服務器數據恢復環境: 一臺服務器通過FreeNAS(本案例使用的是UFS2文件系統)實現iSCSI存儲,整個UFS2文件系統作為一個文件掛載到ESXi虛擬化系統(安裝在另外2臺服務器上)上。該虛擬化系統一共有5臺虛擬機&…

2024水科技大會暨技術裝備成果展覽會——高品質供水和飲用水水源安全保障論壇

供水與飲水安全直接關系到人民群眾的生活與健康,切實做好城市供水與飲水安全保障工作,是把以人為本真正落到實處的一項緊迫任務。近年來,中央和地方加大了城鄉供水與飲水安全保障工作的力度,對標最優質供水城市建設要求&#xff0…

[Angular 基礎] - service 服務

[Angular 基礎] - service 服務 之前的筆記就列舉三個好了……沒想到 Angular 東西這么多(ー ー;)……全加感覺越來越湊字數了 [Angular 基礎] - 視圖封裝 & 局部引用 & 父子組件中內容傳遞 [Angular 基礎] - 生命周期函數 [Angular 基礎] - 自…

請簡述你對SpringMVC的理解

SpringMVC是一種基于Java語言開發,實現了WebMVC設計模式,請求驅動類型 的輕量級Web框架。 采用了MVC架構模式的思想,通過把Model,View,Controller分離,將Web層進 行職責解耦,從而把復雜的Web應…

idea打開項目白屏

解決方法: 右鍵“最大化” idea打開項目白板解決方案_idea打開白屏-CSDN博客 IDEA 2022 CPU占用100%的問題及解決方法_java_腳本之家