八、pyqt5按鈕類控件——QPushButton、QRadioButton、QCheckBox


pyqt5中常用的按鈕類控件有QPushButton、QRadioButton、QCheckBox、QToolButton等。這些按鈕類的基類都是QAbstracButton類。所以這些類有部分方法是相同的。

通用的方法有

方法 描述
isDown() 判斷按鈕是否按下
isChecked() 返回布爾值,判斷按鈕是否標記,該方法與setChecAble()聯合使用
isEnabled() 設置按鈕是否禁用。禁用時按鈕為灰色,參數為布爾值。注意這個單詞的寫法,網上有些教程錯誤的少寫了一個d
isCheckAble() 設置按鈕是否可標記,參數為布爾值
setAutoRepeat() 參數為True時,該按鈕可以長時間被按鈕,連續執行槽函數

一、QpushButton

 1 import sys,os
 2 from PyQt5.QtWidgets import QWidget,QPushButton,QApplication,QVBoxLayout,QHBoxLayout
 3 from PyQt5.QtGui import QIcon,QPixmap
 4 
 5 path = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
 6 
 7 class MyWindow(QWidget):
 8 
 9     def __init__(self):
10         super().__init__()
11         self.initUI()
12 
13     def initUI(self):
14         self.setWindowTitle('PushButton示例')
15         self.setWindowIcon(QIcon(r'%s\4.圖標素材\chuan.ico' % path))
16         self.setGeometry(600,300,450,300)
17 
18         self.btn1 = QPushButton('按鍵一')
19         self.btn1.setCheckable(True) #默認為False。這是為True時,按鈕會保持按下狀態
20         self.btn1.clicked.connect(lambda:self.btnstate(self.btn1))
21 
22         self.btn2 = QPushButton('按鍵二')
23         self.btn2.setIcon(QIcon(QPixmap(r'%s\4.圖標素材\python.jpg' % path)))  #設置按鈕的圖標
24         self.btn2.clicked.connect(lambda:self.btnstate(self.btn2))
25 
26         self.btn3 = QPushButton('Disabled')
27         self.btn3.clicked.connect(lambda:self.btnsetdisabled(self.btn2))
28         self.btn3.isEnabled()
29         self.btn3.clicked.connect(lambda:self.btnstate(self.btn3))
30 
31         self.btn4 = QPushButton('按鍵四')
32         self.btn4.setCheckable(True)
33         self.btn4.clicked.connect(lambda:self.btnstate(self.btn4))
34 
35         vbx = QVBoxLayout()
36         vbx.addWidget(self.btn1)
37         vbx.addWidget(self.btn2)
38         vbx.addWidget(self.btn3)
39         vbx.addWidget(self.btn4)
40 
41         hbx = QHBoxLayout()
42         hbx.addStretch(1)
43         hbx.addLayout(vbx)
44         hbx.addStretch(1)
45         self.setLayout(hbx)
46 
47     def btnstate(self,btn):
48         if btn.isChecked():
49             print(btn.text()+'被按下')
50         else:
51             print(btn.text()+'沒有按下')
52 
53     def btnsetdisabled(self,btn):
54         if btn.isEnabled():
55             btn.setEnabled(False)
56         else:
57             btn.setEnabled(True)
58 
59 
60 if __name__ == '__main__':
61     app = QApplication(sys.argv)
62     win = MyWindow()
63     win.show()
64     sys.exit(app.exec_())
QPushButton示例

效果圖如下:

具體效果不再詳述。

二、QRadIoButton

QRadIoButton是一中單選按鈕,只有checked和unchecked兩個狀態,信號也是再切換單選按鈕(開/關)時發射的。單選常用於“多選一”的場景,也就是說它默認是獨占的。對於繼承同一個弗雷QWidget的多個單選按鈕,他們屬於同一個按鈕組合,用戶最多只能選擇其中一個。如果在同一個父組件下要用到多個獨占的按鈕組合,則需要將他們放在QGroupBox或QButtonBox中。而在實際中,一般只有狀態改變時才會響應信號,所以常用於狀態監控。

 1 import sys,os
 2 from PyQt5.QtWidgets import QWidget,QRadioButton,QApplication,QVBoxLayout,QHBoxLayout,QGroupBox,QLabel,QLineEdit
 3 from PyQt5.QtGui import QIcon,QPixmap
 4 
 5 path = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
 6 
 7 class MyWindow(QWidget):
 8 
 9     def __init__(self):
10         super().__init__()
11         self.initUI()
12 
13     def initUI(self):
14         self.setWindowTitle('QRadioButton示例')
15         self.setWindowIcon(QIcon(r'%s\4.圖標素材\chuan.ico' % path))
16         self.setGeometry(600,300,400,150)
17 
18         rbtn1 = QRadioButton('',self)
19         rbtn1.move(20,20)
20         rbtn1.toggled.connect(lambda:self.getsex(rbtn1))
21         rbtn2 = QRadioButton('',self)
22         rbtn2.move(20,50)
23         rbtn2.toggled.connect(lambda: self.getsex(rbtn2))
24 
25         lbl = QLabel('您的性別是:',self)
26         lbl.move(150,20)
27         self.lineEdit = QLineEdit(self)
28         self.lineEdit.move(150,50)
29 
30     def getsex(self,rbtn):
31         sender = self.sender()
32         self.lineEdit.setText(sender.text())
33 
34 
35 if __name__ == '__main__':
36     app = QApplication(sys.argv)
37     win = MyWindow()
38     win.show()
39     sys.exit(app.exec_())
QRadioButton示例

效果圖如下:

self.sender()返回的是信號發射到對象,text()則返回文本信息

三、QCheckBox

QCheckBox即帶有標簽的復選框,它同樣具有兩種狀態的控件:開和關。復選框通常用於表示應用程序可以啟用或禁用的功能,和單選框不同之處在於可以“多選”

 1 import sys,os
 2 from PyQt5.QtWidgets import QWidget,QCheckBox,QApplication,QGridLayout,QLabel,QLineEdit
 3 from PyQt5.QtGui import QIcon
 4 
 5 path = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
 6 Items=[]
 7 
 8 class MyWindow(QWidget):
 9 
10     def __init__(self):
11         super().__init__()
12         self.initUI()
13 
14     def initUI(self):
15         self.setWindowTitle('QCheckBox示例')
16         self.setWindowIcon(QIcon(r'%s\4.圖標素材\chuan.ico' % path))
17         self.setGeometry(600,300,350,300)
18 
19         cb1 = QCheckBox('挖掘機')
20         cb2 = QCheckBox('平地機')
21         cb3 = QCheckBox('裝載機')
22         cb4 = QCheckBox('振動碾')
23         lb1 = QLabel('選擇是:')
24         self.lineEdit = QLineEdit()
25 
26         grid = QGridLayout()
27         grid.addWidget(cb1,1,1,1,1)
28         grid.addWidget(cb2,1,2,1,1)
29         grid.addWidget(cb3,2,1,1,1)
30         grid.addWidget(cb4,2,2,1,1)
31         grid.addWidget(lb1,3,1,1,1)
32         grid.addWidget(self.lineEdit,3,2,1,1)
33         self.setLayout(grid)
34 
35         cb1.stateChanged.connect(lambda:self.chooseItem(cb1))
36         cb2.stateChanged.connect(lambda: self.chooseItem(cb2))
37         cb3.stateChanged.connect(lambda: self.chooseItem(cb3))
38         cb4.stateChanged.connect(lambda: self.chooseItem(cb4))
39 
40     def chooseItem(self,cb):
41         if cb.isChecked():
42             if cb.text() not in Items:
43                Items.append(cb.text())
44             shop_cart = ','.join(Items)
45             self.lineEdit.setText(shop_cart)
46         else:
47             if cb.text() in Items:
48                Items.remove(cb.text())
49             shop_cart = ','.join(Items)
50             self.lineEdit.setText(shop_cart)
51 
52 if __name__ == '__main__':
53     app = QApplication(sys.argv)
54     win = MyWindow()
55     win.show()
56     sys.exit(app.exec_())
QCheckBox示例

效果圖如下:

 


免責聲明!

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



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