8、pyqt5按钮类控件——QPushButton、QRadioButton、QCheckBox

pyqt5中经常使用的按钮类控件有QPushButton、QRadioButton、QCheckBox、QToolButton等。这些按钮类的基类都是QAbstracButton类。因此这些类有部分方法是相同的。html

通用的方法有python

方法 描述
isDown() 判断按钮是否按下
isChecked() 返回布尔值,判断按钮是否标记,该方法与setChecAble()联合使用
isEnabled() 设置按钮是否禁用。禁用时按钮为灰色,参数为布尔值。注意这个单词的写法,网上有些教程错误的少写了一个d
isCheckAble() 设置按钮是否可标记,参数为布尔值
setAutoRepeat() 参数为True时,该按钮能够长时间被按钮,连续执行槽函数

1、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示例

效果图以下:app

具体效果再也不详述。ide

2、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示例

效果图以下:post

self.sender()返回的是信号发射到对象,text()则返回文本信息ui

3、QCheckBox

QCheckBox即带有标签的复选框,它一样具备两种状态的控件:开和关。复选框一般用于表示应用程序能够启用或禁用的功能,和单选框不一样之处在于能够“多选”spa

 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示例

效果图以下:code

 

转载于:https://www.cnblogs.com/chuanxiaopang/p/10547908.htmlhtm