Python QButtonGroup類詳細(xì)介紹及常用方法
QButtonGroup 是 PyQt5 中用于管理多個(gè)按鈕邏輯分組的類,常用于實(shí)現(xiàn)單選或多選功能。它允許將多個(gè)按鈕(如 QRadioButton、QCheckBox 或 QPushButton)歸為一組,統(tǒng)一處理選中狀態(tài)、信號(hào)和 ID 分配。以下是詳細(xì)介紹及常用方法:
一、核心功能
- ?互斥選擇:確保同一時(shí)間只有一個(gè)按鈕被選中(默認(rèn)啟用,適用于單選場(chǎng)景)。
- ?統(tǒng)一信號(hào)管理:通過組級(jí)信號(hào)處理所有按鈕的點(diǎn)擊、切換等事件。
- ?ID 綁定:為每個(gè)按鈕分配唯一 ID,便于快速識(shí)別。
- ?動(dòng)態(tài)增刪按鈕:支持運(yùn)行時(shí)添加或移除按鈕。
二、常用方法
?1. 創(chuàng)建與按鈕操作
| 方法 | 說明 | 示例 |
|---|---|---|
QButtonGroup(parent: QObject) | 構(gòu)造函數(shù) | group = QButtonGroup() |
addButton(button: QAbstractButton, id: int = -1) | 添加按鈕并可選分配 ID | group.addButton(radio_btn, 1) |
removeButton(button: QAbstractButton) | 從組中移除按鈕 | group.removeButton(btn) |
?2. 互斥性與選中狀態(tài)
| 方法 | 說明 | 示例 |
|---|---|---|
setExclusive(enable: bool) | 設(shè)置是否互斥(默認(rèn) True) | group.setExclusive(False)(允許多選) |
exclusive() -> bool | 檢查當(dāng)前是否互斥 | if group.exclusive(): ... |
checkedButton() -> QAbstractButton | 返回當(dāng)前選中的按鈕(互斥模式下有效) | selected = group.checkedButton() |
checkedId() -> int | 返回選中按鈕的 ID(未設(shè)置 ID 時(shí)返回 -1) | id = group.checkedId() |
?3. ID 管理
| 方法 | 說明 | 示例 |
|---|---|---|
setId(button: QAbstractButton, id: int) | 為按鈕設(shè)置 ID | group.setId(btn, 1001) |
id(button: QAbstractButton) -> int | 獲取按鈕的 ID | btn_id = group.id(btn) |
button(id: int) -> QAbstractButton | 根據(jù) ID 查找按鈕 | btn = group.button(1001) |
?4. 其他操作
| 方法 | 說明 | 示例 |
|---|---|---|
buttons() -> List[QAbstractButton] | 獲取組內(nèi)所有按鈕列表 | all_btns = group.buttons() |
?三、信號(hào)
| 信號(hào) | 說明 | 使用場(chǎng)景 |
|---|---|---|
buttonClicked(button: QAbstractButton) | 按鈕被點(diǎn)擊時(shí)觸發(fā) | 通用點(diǎn)擊事件 |
buttonClicked(int) | 傳遞按鈕 ID 的點(diǎn)擊信號(hào) | 根據(jù) ID 處理邏輯 |
buttonToggled(button: QAbstractButton, checked: bool) | 按鈕切換狀態(tài)時(shí)觸發(fā) | 監(jiān)聽復(fù)選框勾選狀態(tài) |
?四、代碼示例
1. 單選按鈕組(互斥)?
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QRadioButton, QButtonGroup, QLabel
class RadioDemo(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout(self)
# 創(chuàng)建單選按鈕
self.radio1 = QRadioButton("選項(xiàng)1")
self.radio2 = QRadioButton("選項(xiàng)2")
self.radio3 = QRadioButton("選項(xiàng)3")
# 創(chuàng)建按鈕組并添加按鈕
self.group = QButtonGroup(self)
self.group.addButton(self.radio1, 1) # 分配 ID
self.group.addButton(self.radio2, 2)
self.group.addButton(self.radio3, 3)
# 監(jiān)聽點(diǎn)擊事件(帶 ID)
self.group.buttonClicked[int].connect(self.on_radio_clicked)
# 添加控件到布局
layout.addWidget(self.radio1)
layout.addWidget(self.radio2)
layout.addWidget(self.radio3)
self.label = QLabel("當(dāng)前選中:無")
layout.addWidget(self.label)
def on_radio_clicked(self, btn_id):
self.label.setText(f"當(dāng)前選中:選項(xiàng){btn_id}")
app = QApplication([])
window = RadioDemo()
window.show()
app.exec_()?2. 多選按鈕組(非互斥)?
class CheckboxDemo(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout(self)
# 創(chuàng)建復(fù)選框
self.check1 = QCheckBox("蘋果")
self.check2 = QCheckBox("香蕉")
self.check3 = QCheckBox("橙子")
# 創(chuàng)建非互斥按鈕組
self.group = QButtonGroup(self)
self.group.setExclusive(False) # 關(guān)閉互斥
self.group.addButton(self.check1, 1)
self.group.addButton(self.check2, 2)
self.group.addButton(self.check3, 3)
# 監(jiān)聽切換事件
self.group.buttonToggled.connect(self.on_check_toggled)
layout.addWidget(self.check1)
layout.addWidget(self.check2)
layout.addWidget(self.check3)
self.label = QLabel("已選:無")
layout.addWidget(self.label)
def on_check_toggled(self, btn, checked):
selected = [btn.text() for btn in self.group.buttons() if btn.isChecked()]
self.label.setText(f"已選:{', '.join(selected)}")?五、注意事項(xiàng)
- ?互斥性與按鈕類型:
QRadioButton默認(rèn)互斥,但若未加入QButtonGroup,同級(jí)按鈕可能無法正確互斥。QCheckBox需手動(dòng)設(shè)置setExclusive(False)以允許多選。
- ?ID 管理:
- 若未顯式分配 ID,
id(button)返回自動(dòng)生成的唯一負(fù)數(shù) ID。
- 若未顯式分配 ID,
- ?內(nèi)存管理:
QButtonGroup不會(huì)自動(dòng)刪除子按鈕,需手動(dòng)管理或設(shè)置父對(duì)象。
- ?動(dòng)態(tài)按鈕操作:
- 動(dòng)態(tài)增刪按鈕時(shí),需注意信號(hào)連接的更新。
?六、與布局的區(qū)別
| ?QButtonGroup | ?布局類(如 QVBoxLayout)? |
|---|---|
| 邏輯分組,處理按鈕狀態(tài)和信號(hào) | 物理布局,控制界面位置和排列 |
| 不影響界面顯示 | 直接影響控件在窗口中的位置 |
通過 QButtonGroup,可以輕松管理按鈕的選中邏輯和事件處理,特別適用于表單、設(shè)置選項(xiàng)等需要分組控制的場(chǎng)景!
到此這篇關(guān)于Python QButtonGroup類詳細(xì)介紹及常用方法的文章就介紹到這了,更多相關(guān)Python QButtonGroup類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python如何檢測(cè)項(xiàng)目哪些依賴庫沒有使用
這篇文章主要為大家詳細(xì)介紹了五個(gè)Python檢測(cè)項(xiàng)目中哪些依賴庫沒有使用的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04
使用Scrapy爬取動(dòng)態(tài)數(shù)據(jù)
今天小編就為大家分享一篇關(guān)于使用Scrapy爬取動(dòng)態(tài)數(shù)據(jù)的文章,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-10-10
使用Python標(biāo)準(zhǔn)庫中的wave模塊繪制樂譜的簡(jiǎn)單教程
這篇文章主要介紹了使用Python標(biāo)準(zhǔn)庫中的wave模塊繪制樂譜,涉及到了numpy模塊和坐標(biāo)的可視化運(yùn)用,用到了需要的朋友可以參考下2015-03-03
使用Python和scikit-learn創(chuàng)建混淆矩陣的示例詳解
這篇文章主要介紹了使用Python和scikit-learn創(chuàng)建混淆矩陣的示例詳解,該示例包括生成數(shù)據(jù)集、為數(shù)據(jù)集選擇合適的機(jī)器學(xué)習(xí)模型、構(gòu)建、配置和訓(xùn)練它,最后解釋結(jié)果,即混淆矩陣,需要的朋友可以參考下2022-06-06
分析總結(jié)Python數(shù)據(jù)化運(yùn)營KMeans聚類
本文主要以 Python 使用 Keans 進(jìn)行聚類分析的簡(jiǎn)單舉例應(yīng)用介紹聚類分析,它是探索性數(shù)據(jù)挖掘的主要任務(wù),也是統(tǒng)計(jì)數(shù)據(jù)分析的常用技術(shù),用于許多領(lǐng)域2021-08-08
Python Flask框架開發(fā)之運(yùn)用SocketIO實(shí)現(xiàn)WebSSH方法詳解
Socket.IO本是一個(gè)面向?qū)崟r(shí)web應(yīng)用的JavaScript庫,現(xiàn)在已成為擁有眾多語言支持的Web即時(shí)通訊應(yīng)用的框架。這篇文章主要介紹了Python 運(yùn)用SocketIO實(shí)現(xiàn)WebSSH方法2022-10-10
使用Python和Pillow實(shí)現(xiàn)圖片馬賽克功能
在這篇博客中,我們將探討如何使用Python創(chuàng)建一個(gè)簡(jiǎn)單而有趣的桌面應(yīng)用程序,我們的目標(biāo)是構(gòu)建一個(gè)應(yīng)用,允許用戶選擇一張照片,然后在照片的右下角添加馬賽克效果,感興趣的小伙伴跟著小編一起來看看吧2024-08-08
django rest framework 實(shí)現(xiàn)用戶登錄認(rèn)證詳解
這篇文章主要介紹了django rest framework 實(shí)現(xiàn)用戶登錄認(rèn)證詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07

