GUI學習之七——單選框QRadioButton和QButtonGroup的學習總結


一.單選框QRadioButton的使用

1.類的描述

a.單選框按鈕用於給用戶提供若干選項中的單選操作,當一個被選中時,會自動取消選中的那個。(如果只有一個時可以通過單擊該按鈕改變其狀態;而存在多個按鈕時單擊選中的按鈕無法改變其狀態)

b.單選按鈕左側會有一個圓形的圖標來表示按鈕被選中

c.QRadioButton繼承了QAbstractButton類,具有父類所有的API。

2.創建

創建的方法和PushButton按鈕的創建方式是一樣的

rb_1 = QRadioButton('Yes',window)
rb_1.move(100,200)
rb_2 = QRadioButton('No',window)
rb_2.move(100,220)

3.信號

單選按鈕除了繼承的信號外,最長用的信號為狀態切換的信號

QRadioButton.toggled()

一般在按鈕狀態切換時候會發送信號,並傳送是否被選中的信號。

rb_2.toggled.connect(lambda Checked:print(Checked)) #匿名函數接收了toggled傳遞的參數

還有一點要注意的是這個toggled是狀態改變,而不是按鈕被點擊,區別就是在點擊了按鈕1時按鈕2的狀態也會改變,信號也會被發送。

4.多組互斥的問題

我們在講QAbstractButton類時講過按鈕的互斥這個問題:在一個父控件內按鈕是可以互斥的,但是如果存在多組的互斥怎么辦?我們可以建立多個父控件

from PyQt5.Qt import *
import sys
app=QApplication(sys.argv)
class MyWindow(QWidget):
    pass




window = MyWindow()
window.resize(800,600)

label_1 = MyWindow(window)
label_1.resize(800,300)
# rb = QRadioButton(window_1)
rb_1 = QRadioButton('Yes',label_1)
rb_1.move(100,200)
rb_2 = QRadioButton('No',label_1)
rb_2.move(100,220)


label_2 = QWidget(window)
label_2.resize(800,200)
label_2.move(0,300)
rb_3 = QRadioButton('',label_2)
rb_3.move(50,20)
rb_4 = QRadioButton('',label_2)
rb_4.move(50,60)

window.show()
sys.exit(app.exec_())
兩組單選按鈕

這樣就可以使用多種互斥按鈕了,可是每次添加這種控件比較麻煩,還要處理視覺上是否可見或遮擋其他控件的問題,那么就引出了下面的這個類——QButtonGroup

二.QButtonGroup

1.描述

a.QButtonGroup提供了一個抽象的按鈕容器,可以將按鈕划分為一組。

b.QButtonGroup是繼承自QObject,不具備可視化的效果

c.一般QButtonGroup定義的組存放的都是可以被Checked的按鈕。

2.建立按鈕組,並將按鈕存放在組內

from PyQt5.Qt import *
import sys
app=QApplication(sys.argv)
class MyWindow(QWidget):
    pass

window = MyWindow()
btn_1 = QRadioButton('male',window)
btn_2 = QRadioButton('female',window)
btn_1.move(100,50)
btn_2.move(100,80)
btn_3 = QRadioButton('yes',window)
btn_4 = QRadioButton('no',window)
btn_3.move(200,50)
btn_4.move(200,80)

group_sex = QButtonGroup()  #創建按鈕組
group_sex.addButton(btn_1)  #添加按鈕
group_sex.addButton(btn_2)
創建按鈕組

3.按鈕ID的分配、綁定和獲取

在向按鈕組內添加按鈕時是有個ID的,這個值默認為-1(上個案例上沒寫就是默認值)。這個-1不是說添加的按鈕ID值為-1,而是該值為系統自動分配的,自動分配的值為負數。

group.setId(btn,id=)  #設定ID
group.id(btn)         #獲取按鈕ID,如果按鈕不存在返回-1

 

4.查看按鈕

group.buttons()         #獲取組內所有按鈕對象
group.button()          #按ID獲取按鈕,如果ID不存在返回值為None
group.checkedId()       #獲取選中的按鈕ID,無按鈕被選中返回-1
group.checkedButton()   #獲取選中的按鈕對象

5.移除按鈕

group.removeButton()

注意這個按鈕的移除不是從視覺上刪除按鈕,而是斷開和組內其他按鈕成員的邏輯關系。

6.互斥性設置

我們在QAbstractButton內講了按鈕的互斥性的設置,那是對單個按鈕設置,這里還可以對組里的按鈕統一設置

group.setExclusive(True)  #設置組內按鈕互斥
group.exclusive()         #獲取組內按鈕是否互斥

 7.信號使用

group.buttonClicked()    #組內按鈕被點擊
group.buttonPressed()    #組內按鈕被按下
group.buttonReleased()   #組內按下的按鈕被釋放
group.buttonToggled()    #組內按鈕狀態切換

這里要插播一個重要的知識點:如果一個對象想外界提供的信號名稱一樣,但參數不一樣,可以用下面的格式選擇信號參數

singal_name[type]
singal——信號名稱
type——信號類型

例如group.buttonClicked()可以發送 兩種信號參數——按鈕對象或按鈕ID可以用

group.buttonClicked[int]

來改變信號參數。

group_sex.buttonClicked[int].connect(lambda data:print(data))
group_sex.buttonClicked.connect(lambda data:print(data))

看看打印出來的東西是不是不一樣!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM