Qt—按鈕

1.QAbractButton

QAbractButton是按鈕控件的基類,承載了按鈕的大部分功能,但是不能進行實例化,必須由其他按鈕來繼承,以實現不同的表現形式
以下是QAbractButton提供的常見狀態與信號
在這裏插入圖片描述

2.QPushButton

QPushButton是命令按鈕的一種,形狀一般爲長方形(可以顯示文本標題或圖標)通過單擊該按鈕可以實現一些命令,或者響應一些事件(”確認“,”申請“,”是“,”否“等等)。通常情況下,我們通過文本來描述執行的動作,也可通過快捷鍵實現對應按鈕的命令
常見方法
在這裏插入圖片描述
若想爲按鈕設計快捷鍵,比如名字爲’&Ok’的按鈕,他的快捷鍵就是’Alt+O’。其規則是:以實現Alt+O爲例,按鈕的名字中必須要有字母O(一般是按鈕的首字母),而且在字母O前面加上&,在按鈕顯示過程中&不會顯示出來,但在字母O下面會出現一個下劃線

實例

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Form(QDialog):
    def __init__(self,parent=None):
        super(Form,self).__init__(parent)
        layout = QVBoxLayout()

        self.btn1 = QPushButton("Button1")
        self.btn1.setCheckable(True)#設置按鈕是否已經被選中,設置爲True,按鈕保持點擊後釋放狀態
        self.btn1.toggle()#由於前面已釋放,故切換狀態在此選中
        self.btn1.clicked.connect(lambda:self.whichbtn(self.btn1))#通過lambda方法來傳遞額外的參數
        self.btn1.clicked.connect(self.btnstate)
        layout.addWidget(self.btn1)

        self.btn2 = QPushButton("imageButton")
        self.btn2.setIcon(QIcon(QPixmap("./cartoon1.ico")))#注意添加圖片的格式
        self.btn2.clicked.connect(lambda: self.whichbtn(self.btn2))
        layout.addWidget(self.btn2)

        self.btn3=QPushButton("Disabled")
        self.btn3.setEnabled(False)#按鈕設爲不可用
        layout.addWidget(self.btn3)

        self.btn4 = QPushButton("&Ok")#設置快捷方式
        self.btn4.setDefault(True)
        self.btn4.clicked.connect(lambda: self.whichbtn(self.btn4))
        layout.addWidget(self.btn4)

        self.setWindowTitle("ButtonDemo")
        self.setLayout(layout)

    def btnstate(self):
        if self.btn1.isCheckable():
            print("Pressed")
        else:
            print("Released")
    def whichbtn(self,btn):
        print(btn.text()+"is clicked")

if __name__=='__main__':
    app=QApplication(sys.argv)
    BtnDemo = Form()
    BtnDemo.show()
    sys.exit(app.exec_())

在這裏插入圖片描述

3.QRadioButton

QRadioBtton提供了一組可供選擇的按鈕和文本標籤,用戶可以選擇其中的一個選項,標籤用於顯示對應的文本信息,單選鈕是一種開關按鈕,有on/off兩種狀態,可爲用戶提供多選一的選擇,在單選鈕組裏一次只能選擇一個,如需選擇多個需要使用QGroupBox或QButtonGroup
當講單選鈕切換到on/off是,就會發送一個toggled信號,綁定該信號,當按鈕狀態發生改變,就會觸發相應的行爲(toggled信號是在切換狀態發射,clicked信號是在每次點擊單選鈕發射,實際使用中,一般只有狀態改變纔有必要響應,故toggled信號更適合狀態監控)。
常用方法
在這裏插入圖片描述
實例

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class RadioDemo(QWidget):
    def __init__(self,parent=None):
        super(RadioDemo,self).__init__(parent)
        layout = QVBoxLayout()#豎直排列

        self.btn1 = QRadioButton("Button1")
        self.btn1.setChecked(True)#設置爲默認選中狀態
        self.btn1.toggled.connect(lambda:self.btnstate(self.btn1))#檢測按鈕狀態是否被切換 通過lambda方法來傳遞額外的參數
        layout.addWidget(self.btn1)

        self.btn2 = QRadioButton("imageButton")
        self.btn2.setIcon(QIcon(QPixmap("./cartoon1.ico")))#注意添加圖片的格式
        self.btn1.toggled.connect(lambda: self.btnstate(self.btn2))
        layout.addWidget(self.btn2)

        self.setLayout(layout)
        self.setWindowTitle("RadioDemo")

    def btnstate(self,btn):#檢查按鈕狀態
        if btn.text()=='Button1':
            if btn.isChecked()==True:
                print(btn.text()+ " is selected")
            else:
                print(btn.text()+" is deselected")

        if btn.text() == 'imageButton':
            if btn.isChecked()==True:
                print(btn.text()+ " is selected")
            else:
                print(btn.text()+" is deselected")

if __name__=='__main__':
    app=QApplication(sys.argv)
    BtnDemo = RadioDemo()
    BtnDemo.show()
    sys.exit(app.exec_())

在這裏插入圖片描述

4.QCheckBox

QCheckBox是一組帶文本標籤的複選框,用戶可以選則多個選項,視覺上也可以通過QButtonGroup將多複選框組合在一起,與單選框的區別是爲用戶提供多對多的選擇。
只要複選框被選中或者取消選中,都會發射一個stateChanged信號。如果想在複選框狀態改變是觸發相應的行爲,可連接這個信號,使用isChecked()來查詢複選框是否被選中。
特別的,除了選中與被選中狀態,QCheckBox還提供了第三種狀態(半選中)表明沒有變化,可以通過setTristate()使之生效,並用CheckState()來查詢當前的切換狀態
常見方法與狀態
在這裏插入圖片描述
實例

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
class CheckBoxDemo(QWidget):
    def __init__(self,parent=None):
        super(CheckBoxDemo,self).__init__(parent)

        #建立一個QGroupBox組,方便複選框加入
        groupBox=QGroupBox("CheckBoxes")
        groupBox.setFlat(True)

        layout = QHBoxLayout()#水平排列

        self.CheckBox1 = QCheckBox("&CheckBox1")
        self.CheckBox1.setChecked(True)#設置爲默認選中狀態
        self.CheckBox1.stateChanged.connect(lambda:self.btnstate(self.CheckBox1))#檢測QCheCheckBo是否改變 通過lambda方法來傳遞額外的參數
        layout.addWidget(self.CheckBox1)

        self.CheckBox2 = QCheckBox("imageButton")
        self.CheckBox2.setIcon(QIcon(QPixmap("./cartoon1.ico")))#注意添加圖片的格式
        self.CheckBox2.toggled.connect(lambda: self.btnstate(self.CheckBox2))
        layout.addWidget(self.CheckBox2)

        self.CheckBox3 = QCheckBox("CheckBox3")
        self.CheckBox3.setTristate(True)#開啓三態模式,即添加半選中
        self.CheckBox3.setCheckState(Qt.PartiallyChecked)
        self.CheckBox3.stateChanged.connect(lambda:self.btnstate(self.CheckBox3))
        layout.addWidget(self.CheckBox3)

        groupBox.setLayout(layout)
        mainLayout=QVBoxLayout()
        mainLayout.addWidget(groupBox)

        self.setLayout(mainLayout)
        self.setWindowTitle("CheckBoxDemo")

    def btnstate(self,btn):#檢查按鈕狀態
        chk1Status = self.CheckBox1.text()+", isChecked="+str(self.CheckBox1.isChecked())+ ',checkState='+str( self.CheckBox1.checkState())+"\n"#檢測複選框是否被選中
        #Checked 通過布爾判斷(true & false)而CheckState 通過枚舉判斷 checkstate有三個枚舉屬性Unchecked、Checked、Indeterminate
        chk2Status = self.CheckBox2.text() + ", isChecked=" + str(self.CheckBox2.isChecked())+ ',checkState=' + str(self.CheckBox2.checkState()) + "\n"
        chk3Status = self.CheckBox3.text() + ", isChecked=" + str(self.CheckBox3.isChecked())+ ',checkState=' + str(self.CheckBox3.checkState()) + "\n"

        print(chk1Status+chk2Status+chk3Status)

if __name__=='__main__':
    app=QApplication(sys.argv)
    BtnDemo = CheckBoxDemo()
    BtnDemo.show()
    sys.exit(app.exec_())

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章