前面已經能夠通過組合構建一個基礎的能交互的ui了,接下來就是豐富界面了,一些常用控件走起~
下拉框
界面
首先導入對應庫
from PySide6.QtWidgets import QComboBox, QVBoxLayout
cb = QComboBox() # 創建下拉框 cb.addItems(['a','b','c','d']) # 添加選項 self.setWindowTitle('下拉框') # 設置窗口標題 ml = QVBoxLayout() # 創建主佈局 ml.addWidget(cb) # 將下拉框添加到主佈局中 self.setLayout(ml) # 設置主佈局

界面屬性和基礎空間一樣,可以通過QT Designer找屬性設置
那麼頁面ui完成,下面就是交互了
信號
常用的有以下兩種
cb.currentTextChanged.connect(self.test)
cb.currentIndexChanged.connect(self.test)
表示選項變化時,發出信號,觸發test函數
不過這兩個也是有一些細微差別的,返回的內容是有所不同的
我們用test函數測試一下
def test(self,x): print('當前選項:', x)
選擇框
界面
from PySide6.QtWidgets import QCheckBox, QVBoxLayout
QCheckBox就是這個選擇框的庫啦
界面ui類似於上面的下拉框,不過由於是選擇框的形式,只有是否兩種狀態,所以只能填入一個元素
cb = QCheckBox('測試一下') # 創建選擇框 self.setWindowTitle('選擇框') # 設置窗口標題 ml = QVBoxLayout() # 創建主佈局 ml.addWidget(cb) # 將選擇框添加到主佈局中 self.setLayout(ml) # 設置主佈局
創建選擇框,添加得到佈局中顯示

信號
cb.stateChanged.connect(self.test)
狀態改變就觸發對應函數響應,返回值是一個整數
測試了一下這個選擇框有結果,選擇返回結果為2,不選擇返回結果為0【也許還有半選的選項】 
cb.stateChanged.connect(lambda :print(cb.isChecked()))
也可以使用cb.isChecked()檢測是否被選中,返回值為True和False,選中為True 
單選框
界面
導入庫
from PySide6.QtWidgets import QRadioButton, QButtonGroup, QVBoxLayout,
lb1 = QLabel('表頭1') # 添加選項標題 # 創建選項按鈕 btn1 = QRadioButton('選項1') btn2 = QRadioButton('選項2') btn3 = QRadioButton('選項3') ml = QVBoxLayout() # 創建主佈局 # 添加到主佈局中 ml.addWidget(lb1) ml.addWidget(btn1) ml.addWidget(btn2) ml.addWidget(btn3) self.setLayout(ml) # 設置主佈局
由於是單選框那麼就出現非此即彼的關係如下圖,我只能在三個選項中選擇一個 
但只是如同上圖一樣一個表頭三個選項那還好,如果兩個表頭,三個表頭,我需要在多個問題中選擇答案,那麼這個非此即彼的關係就會讓我們的選項總是隻存在一個。關於這個邏輯問題就需要QButtonGroup來解決了,把特定的按鈕進行組合,在這個組合內存在非此即彼的關係,與組合外無關。
self.group1 = QButtonGroup(self) # 創建單選框組 lb1 = QLabel('表頭1') # 添加選項標題 # 創建選項按鈕 btn1 = QRadioButton('選項1') btn2 = QRadioButton('選項2') btn3 = QRadioButton('選項3') # 添加選項到單選框組中 self.group1.addButton(btn1) self.group1.addButton(btn2) self.group1.addButton(btn3) # 創建佈局 h1 = QVBoxLayout() # 創建佈局 # 添加到佈局中 h1.addWidget(lb1) h1.addWidget(btn1) h1.addWidget(btn2) h1.addWidget(btn3) ml = QVBoxLayout() # 創建主佈局 ml.addLayout(h1) # 佈局添加到主佈局中 self.setLayout(ml) # 設置主佈局
通過self.組合名 = QButtonGroup(self)創建按鈕組合,self.組合名.addButton(按鈕名)把按鈕添加到組合內,實現組合內的邏輯關係
雖然界面是一致的,但多個表頭的邏輯關係已經發生了區分
checkedButton 函數查看按鈕是否被選中,有時候也是有用的
信號
由於上述已經將對應按鈕進行了分組,那麼我們可以直接對組進行信號處理
self.group1.buttonClicked.connect(self.test)
def test(self,x): print(x.text())
文本框
文本框一般有兩種形式一種是富文本框(QTextEdit),類似於ppt那種文本框可以插入圖片,表格啊甚至HTML格式;另一種是純文本框(QPlainTextEdit),只應用於純文本。兩者各有優劣,前者文本框內容表現更豐富,但相對的佔用的資源就多;後者純文本,對於大量文本處理響應更快
界面
導入庫
from PySide6.QtWidgets import QTextEdit, QPlainTextEdit
已經介紹了一個是富文本框,一個是純文本框
下面就是設置和屬性部分了,作為對比兩個文本框同時顯示,上面為富文本框,下面為純文本框
text1 = QTextEdit() # 創建文本框 text1.setHtml('<h1>標題</h1><b>加粗</b><i>斜體</i><u>下劃線</u>') #text1.setMarkdown('# 標題\n**加粗** *斜體* _下劃線_') #text1.setText('測試一下') #text1.setPlainText('測試一下') text2 = QPlainTextEdit() # 創建文本框 text2.setPlainText('<h1>標題</h1><b>加粗</b><i>斜體</i><u>下劃線</u>') ml = QVBoxLayout() # 創建主佈局 ml.addWidget(text1) # 添加到主佈局中 ml.addWidget(text2) self.setLayout(ml) # 設置主佈局

通過對比就可以發現兩者的區別,同樣的在屬性上富文本框的屬性會更多一些,超鏈接啊,圖片啊等等,可以在文檔中查到
.appendPlainText('xx') 在文本框結尾添加文本 ‘xx’
信號
常用的就一個textChanged 文本變化時觸發響應,無返回值
滑條
界面
導入庫
from PySide6.QtWidgets import QSlider from PySide6.QtCore import Qt #枚舉類需要使用
下面就是設置參數和屬性了
sd = QSlider(Qt.Orientation.Horizontal) # 創建水平滑條 sd.setTickPosition(QSlider.TickPosition.TicksRight) # 設置滑條刻度位置 sd.setTickInterval(10) # 設置滑條刻度間隔 sd.setMinimum(0) # 設置滑條的最小值 sd.setMaximum(100) # 設置滑條的最大值 # sd.setRange(0, 100) # 設置滑條的範圍 sd.setSingleStep(5) # 設置滑條的單步值 sd.setValue(50) # 設置滑條的初始值
設置完成後添加到佈局內顯示

QSlider 如果不設置那麼結果為垂直滑條
信號
sd.valueChanged.connect(self.test) # 連接滑條的valueChanged信號到槽函數
數值發生改變時候,對應函數響應
def test(self): widget = self.sender() # 獲取發送信號的對象 print(f'滑條的值已改變:{widget.value()}')
注意返回值是對應的刻度數值
