日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Python Qt GUI设计:QPushButton、QRadioButton和QCheckBox按钮类(基础篇—12)

發布時間:2023/11/27 生活经验 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python Qt GUI设计:QPushButton、QRadioButton和QCheckBox按钮类(基础篇—12) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1、QPushButton按鈕類

2、QRadioButton按鈕類

3、QCheckBox按鈕類


在GUI設計中,按鈕都是最重要的和常用的觸發動作請求的方式,用來與用戶進行交互操作。在PyQt中根據不同的使用場景將按鈕劃分為不同的表現形式。

按鈕的基類是QAbstractButton,提供了按鈕的通用性功能。但是它不能實例化,必須由其他的按鈕類繼承QAbstractButton類,來實現不同的功能、不同的表現形式。

常見的按鈕類包括:QPushButton、QRadioButton和QCheckBox等。這些按鈕類均繼承自QAbstractButton類,根據各自的使用場景通過圖形展現出來。

QAbstractButton提供的狀態如下表所示:

QAbstractButton提供的信號如下表所示:?

1、QPushButton按鈕類

QPushButton類繼承自QAbstractButton類,其形狀是長方形,文本標題或圖標可以顯示在長方形上。

QPushButton類是一種命令按鈕,可以單擊該按鈕執行一些命令,或者響應一些事件,常見的有:“確認"、"申請"、"取消"、"關閉"、"是"、"否"等按鈕。

QPushButton類中的常用方法如下表所示:

來看看QPushButton按鈕類的示例,效果如下所示:

在這個例子中,創建了btn1、btn2、btn3和btn4四個按鈕,這四個QPushButton對象被定義為類的實例變量。每個按鈕都將clicked信號發送給指定的槽函數,以響應按鈕點擊事件。

  • 第1個按鈕btn1,通過toggle()函數來切換按鈕狀態。當點擊這個按鈕時,將clicked信號發送給槽函數btnstate(),通過btn.isChecked來獲得按鈕是否被點擊或釋放的狀態。還可以通過lambda的方式來傳遞額外的參數btn1,將clicked信號發送給槽函數whichbtn()。
  • 第2個按鈕btn2,上面顯示一個圖標。使用setlcon()方法接收一個QPixmap對象的圖像文件作為輸入參數。
  • 第3個按鈕btn3,使用setEnabled()方法來禁用bnt3按鈕。
  • 第4個按鈕btn4,使用setDefault()方法來設置按鈕的默認狀態。快捷鍵是“&+文本”(&Download),通過“Alt+D”快捷鍵來調用槽函數。

實現代碼如下所示:

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)self.btn1.toggle()self.btn1.clicked.connect(lambda:self.whichbtn(self.btn1) )self.btn1.clicked.connect(self.btnstate)layout.addWidget(self.btn1)self.btn2 = QPushButton('image')self.btn2.setIcon(QIcon(QPixmap("./python.png")))self.btn2.clicked.connect(lambda:self.whichbtn(self.btn2) )layout.addWidget(self.btn2)self.setLayout(layout) self.btn3 = QPushButton("Disabled")self.btn3.setEnabled(False)layout.addWidget(self.btn3)self.btn4= QPushButton("&Download")self.btn4.setDefault(True)self.btn4.clicked.connect(lambda:self.whichbtn(self.btn4))layout.addWidget(self.btn4)self.setWindowTitle("Button demo")def btnstate(self):if self.btn1.isChecked():print("button pressed" ) else:print("button released" ) def whichbtn(self,btn):print("clicked button is " + btn.text() ) if __name__ == '__main__':app = QApplication(sys.argv)btnDemo = Form()btnDemo.show()sys.exit(app.exec_())

2、QRadioButton按鈕類

QRadioButton類提供了一組可供選擇的按鈕和文本標簽,用戶可以選擇其中一個選項,標簽用于顯示對應的文本信息。單選鈕是一種開關按鈕,可以切換為on或者off,即checked或者unchecked,主要是為用戶提供"多選一"的選擇。

QRadioButton是單選鈕控件默認是獨占的(Exclusive)。對于繼承自同一個父類Widget的多個單選鈕,它們屬于同一個按鈕組合,在單選鈕組里,一次只能選擇一個單選鈕。如果需要多個獨占的按鈕組合,則需要將它們放在QGroupBox或QButtonGroup中。

QRadioButton類中的常用方法如下表所示:

在QRadioButton中,toggled信號是在切換單選鈕狀態(開、關)時發射的,而clicked信號則在每次點擊單選鈕時都會發射。在實際中,一般只有狀態改變時才有必要去響應,因此toggled信號更適合用于狀態監控。

來看看QRadioButton按鈕類的示例,效果如下所示:

在這個例子中,兩個互斥的單選鈕被放置在窗口中。

第1個單選鈕btn1,被設置成默認選中狀態。

self.btn1.setChecked(True)

當選擇兩個按鈕相互切換時,按鈕的狀態發生改變,將觸發toggle信號,并與槽函數btnstate()連接。使用lambda的方式允許將源信號傳遞給槽函數,將按鈕作為參數。

self.btn1.toggled.connect(lambda:self.btnstate(self.btn1))
self.btn2.toggled.connect(lambda:self.btnstate(self.btn2))

當發射toggled信號后,使用btnstate()函數來檢查按鈕的狀態。

實現代碼如下所示:

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 = QHBoxLayout()self.btn1 = QRadioButton("Button1")self.btn1.setChecked(True)self.btn1.toggled.connect(lambda:self.btnstate(self.btn1))layout.addWidget(self.btn1)self.btn2 = QRadioButton("Button2")self.btn2.toggled.connect(lambda:self.btnstate(self.btn2))layout.addWidget(self.btn2)self.setLayout(layout)self.setWindowTitle("RadioButton demo")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()=="Button2":if btn.isChecked()== True :print( btn.text() + " is selected" )else:print( btn.text() + " is deselected" )if __name__ == '__main__':app = QApplication(sys.argv)radioDemo = Radiodemo()radioDemo.show()sys.exit(app.exec_())

3、QCheckBox按鈕類

QCheckBox類提供了一組帶文本標簽的復選框,用戶可以選擇多個選項。和QPushButton一樣,復選框可以顯示文本或者圖標,其中文本可以通過構造函數或者setText()來設置;圖標可以通過setlcon()來設置。在視覺上,QButtonGroup可以把許多復選框組織在一起。

QCheckBox(復選框)和QRadioButton(單選鈕)都是選項按鈕,因為它們都可以在開(選中)或者關(未選中)之間切換。它們的區別是對用戶選擇的限制:單選鈕提供了“多選一"的選擇;而復選框提供的是“多選多"的選擇。

QCheckBox通常被應用在需要用戶選擇一個或多個可用的選項的場景中。

只要復選框被選中或者取消選中,都會發射一個stateChanged 信號。如果想在復選框狀態改變時觸發相應的行為,請連接這個信號,可以使用isChecked()來查詢復選框是否被選中。

除了常用的選中和未選中兩種狀態,QCheckBox還提供了第三種狀態(半選中)來表明“沒有變化"。當需要為用戶提供一個選中或者未選中復選框的選擇時,這種狀態是很有用的。如果需要第三種狀態,則可以通過setTristate()來使它生效,并使用checkState()來查詢當前的切換狀態。

QCheckBox類中的常用方法如下表所示:

三態復選框有三種狀態,如下表所示:

來看看QCheckBox按鈕類的示例,效果如下所示:

在這個例子中,將三個復選框添加到一個水平布局管理器中,并添加到一個QGroupBox組中。

將三個復選框的stateChanged信號都連接到槽函數stateChanged()。使用lambda的方式傳遞對象給槽函數。當QCheckBox狀態改變時發射stateChanged信號,當信號發生改變時觸發自定義的槽函數btnstate()。

對上面三個復選框的控件說明,如下表所示:

實例化checkBox1和checkBox2兩個對象,并將checkBox1的狀態設置為選中,為checkBox1設置快捷鍵,使用“&"符號,如“&Checkbox 1",則通過“Alt+C"快捷鍵可以選中checkBox1復選框。

實例化一個QCheckBox類對象checkBox3,然后使用setTristate()開啟三態模式。

實現代碼如下所示:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qtclass CheckBoxDemo(QWidget):def __init__(self, parent=None):super(CheckBoxDemo , self).__init__(parent)groupBox = QGroupBox("Checkboxes")groupBox.setFlat( False )layout = QHBoxLayout()self.checkBox1= QCheckBox("&Checkbox1")self.checkBox1.setChecked(True)self.checkBox1.stateChanged.connect( lambda:self.btnstate(self.checkBox1) )layout.addWidget(self.checkBox1)self.checkBox2 = QCheckBox("Checkbox2")self.checkBox2.toggled.connect( lambda:self.btnstate(self.checkBox2) )layout.addWidget(self.checkBox2)self.checkBox3 = QCheckBox("tristateBox")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("checkbox demo")def btnstate(self,btn ):chk1Status = self.checkBox1.text()+", isChecked="+  str( self.checkBox1.isChecked() ) + ', chekState=' + str(self.checkBox1.checkState())   +"\n"		 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)checkboxDemo = CheckBoxDemo()checkboxDemo.show()sys.exit(app.exec_())

總結

以上是生活随笔為你收集整理的Python Qt GUI设计:QPushButton、QRadioButton和QCheckBox按钮类(基础篇—12)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。