經過上述,已經能創建一個簡陋的界面了。下面就擴展一下,創造多個界面,並實現界面間的參數傳遞。
子界面
界面
參考之前的MyWidget類 我們可以創建一個子界面SubWindow
class SubWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('子窗口')
lb = QLabel('子窗口')
text = QTextEdit()
self.resize(200, 200)
ml1 = QVBoxLayout()
ml1.addWidget(lb)
ml1.addWidget(text)
self.setLayout(ml1)
# 代碼插入崩潰了,只能使用老版的插入了
創建一個子窗口【最近更新了win11所以界面ui和之前不太一樣】 
指令
那麼如何像主窗口一樣顯示呢,其實之前就有所涉及就是主函數中的【window.show() # 顯示窗口】,我們詳細分析一下
class MyWidget(QWidget):
def __init__(self):
super().__init__() # 調用父類的__init__方法,初始化QWidget
self.setWindowTitle('窗口') # 設置窗口標題
self.resize(400, 300) # 設置窗口大小
# x = SubWindow()
self.x = SubWindow()
self.btn1 = QPushButton('打開子窗口')
self.btn2 = QPushButton('隱藏子窗口')
self.btn3 = QPushButton('關閉子窗口')
self.btn1.clicked.connect(self.test)
self.btn2.clicked.connect(self.test)
self.btn3.clicked.connect(self.test)
ml = QVBoxLayout() # 創建主佈局
ml.addWidget(self.btn1)
ml.addWidget(self.btn2)
ml.addWidget(self.btn3)
self.setLayout(ml) # 設置主佈局
def test(self):
if self.sender() == self.btn1:
# x.show()
self.x.show()
elif self.sender() == self.btn2:
self.x.hide()
elif self.sender() == self.btn3:
self.x.close()
class SubWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('子窗口')
lb = QLabel('子窗口')
text = QTextEdit()
self.resize(200, 200)
ml1 = QVBoxLayout()
ml1.addWidget(lb)
ml1.addWidget(text)
self.setLayout(ml1)
這樣我們就得到了一個主窗口附帶三個按鍵 
這裏有一個小tip需要注意一下
# x = SubWindow() self.x = SubWindow()
一定要使用self.的類名稱定義,否則會被視為臨時數據刪除,導致界面顯示只是一閃而過。
界面間傳輸—自定義信號
控件的函數命令其實很大程度上能夠滿足日常使用,但總歸有邏輯複雜的沒辦法直接應用。那麼我們稍微講一下自定義信號,然後結合界面傳輸進行應用。
導入庫
from PySide6.QtCore import Signal
從核心庫中導入信號庫
使用
在類內定義,例如
send_signal = Signal(str)
信號名稱 = Signal(接收的數據類型)
self.send_signal.connect(連接的控件)
當信號被觸發激活,會調用連接的控件
self.send_signal.emit(text)
將text發送給連接的控件
當然這種直接連接進行傳遞的方式並不推薦,因為它在實際應用中並不是那麼好用,如果更改就需要在多個地方進行更改
界面間傳輸—主界面向子界面
我們先創建好兩個class類,分別在主界面放入一個輸入框和兩個按鈕;一個按鈕負責打開子界面,另一個按鈕負責發送輸入框的內容給子界面。子界面放入一個輸入框。
我們先在主界面進行自定義信號定義
send_signal = Signal(str)
然後我設計邏輯,將子信號的輸入框settext內容綁定在信號上,點擊按鈕2發送主界面輸入框的內容
def test(self):
self.x.show()
self.send_signal.connect(self.x.text.setText)
self.btn1.clicked.connect(self.send)
def send(self):
text = self.text1.text()
self.send_signal.emit(text)
下面來看一下界面和應用吧

界面間傳輸—子界面向主界面
其實本質上是一致的,只需要讓子界面知道主界面就可以了,因此和上面主界面和子界面一致,只有在傳入參數時有不同的區別。
定義時:需要將父類傳入給子界面
def __init__(self, parent=None):
super().__init__()
self.parent = parent
使用時:需要傳入父類
self.x = SubWindow(self)
self.x.show()
只有這一點點的差別其他的函數啊,調用啊基本一致,就不再贅述。