常见的按钮类包括:QPushButton、QToolButton、QRadioButton、QCheckBox、他们都继承自QAbstractButton类;
QAbstractButton提供的状态:
提供的信号:
1、QPushButton
常用方法
例如:
1 #QAbstractButton -QPushButton的使用
2 from PyQt5.QtWidgets import QPushButton,QVBoxLayout,QWidget,QApplication
3 from PyQt5.QtGui import QIcon,QPixmap
4
5 import sys
6
7 class WindowClass(QWidget):
8 def __init__(self,parent=None):
9 super(WindowClass, self).__init__(parent)
10 self.btn_1=QPushButton("Btn_1")
11 self.btn_2=QPushButton("Btn_2")
12 self.btn_3=QPushButton("&DownLoad")#快捷建设置,ALT+大写首字母
13 self.btn_4 = QPushButton("Btn_4")
14
15 self.btn_1.setCheckable(True)#设置已经被点击
16 self.btn_1.toggle()#切换按钮状态
17 self.btn_1.clicked.connect(self.btnState)
18 self.btn_1.clicked.connect(lambda :self.wichBtn(self.btn_1))
19
20 #self.btn_2.setIcon(QIcon('./image/add_16px_1084515_easyicon.net.ico'))#按钮按钮
21 self.btn_2.setIcon(QIcon(QPixmap('./image/baidu.png')))
22 self.btn_2.setEnabled(False)#设置不可用状态
23 self.btn_2.clicked.connect(lambda :self.wichBtn(self.btn_2))
24
25 self.btn_3.setDefault(True)#设置该按钮式默认状态的
26 self.btn_3.clicked.connect(lambda :self.wichBtn(self.btn_3))
27
28 self.btn_4.clicked.connect(lambda :self.wichBtn(self.btn_4))
29
30 self.resize(400,300)
31 layout=QVBoxLayout()
32 layout.addWidget(self.btn_1)
33 layout.addWidget(self.btn_2)
34 layout.addWidget(self.btn_3)
35 layout.addWidget(self.btn_4)
36
37 self.setLayout(layout)
38
39 def btnState(self):
40 if self.btn_1.isChecked():
41 print("Btn_1被单击")
42 else:
43 print("Btn_1未被单击")
44 def wichBtn(self,btn):
45 print("点击的按钮是:" , btn.text())
46
47 if __name__=="__main__":
48 app=QApplication(sys.argv)
49 win=WindowClass()
50 win.show()
51 sys.exit(app.exec_())
2、QRadioButton
它也继承自QAbstracButton 类,提供了一组可供选择的按钮和文本标签,用户可以选择一项,标签用户显示对应的文本信息;
可以切换on或者off,即checked或者unchecked;多个QRadioButton是一个按钮组合,如果多个独占的按钮组合,需要放在QGrouopBox或者QButtonGroup中;
当切换on或者off时,会发送toggled信号,绑定这个信号,在按钮状态发生改变时,触发相应的行为;
常用方法如下:
clicked信号在每次单击按钮时都会发射该信号, 一般只有状态改变触发,则toggled信号更适合这种状态的监控;
例如:
1 #QRadioButton的使用
2 from PyQt5.QtWidgets import QPushButton,QVBoxLayout,QWidget,QApplication,QRadioButton,QHBoxLayout
3 from PyQt5.QtGui import QIcon,QPixmap
4
5 import sys
6
7 class WindowClass(QWidget):
8 def __init__(self,parent=None):
9 super(WindowClass, self).__init__(parent)
10 layout=QHBoxLayout()
11 self.radio_1=QRadioButton("Btn_1")
12 self.radio_2=QRadioButton("Btn_2")
13
14 layout.addWidget(self.radio_1)
15 layout.addWidget(self.radio_2)
16 self.radio_2.setChecked(True)
17 self.radio_2.toggled.connect(self.btnState)
18 self.setLayout(layout)
19
20 def btnState(self):
21 if self.radio_2.isChecked()==True:
22 print("radio_2被选中")
23 else:
24 print("radio_2取消选中")
25
26
27 if __name__=="__main__":
28 app=QApplication(sys.argv)
29 win=WindowClass()
30 win.show()
31 sys.exit(app.exec_())
3、QCheckBox的使用
例如:
1 #QCheckBox的使用
2 from PyQt5.QtWidgets import QPushButton,QVBoxLayout,QWidget,QApplication,QRadioButton,QHBoxLayout,QCheckBox,QGroupBox
3 from PyQt5.QtGui import QIcon,QPixmap
4 from PyQt5.QtCore import Qt
5
6 import sys
7
8 class WindowClass(QWidget):
9 def __init__(self,parent=None):
10 super(WindowClass, self).__init__(parent)
11 layout=QHBoxLayout()
12 self.group=QGroupBox("checkBoxes")
13 self.group.setFlat(True)
14
15 self.checkbox_1=QCheckBox("&checkBox_1")
16 self.checkbox_1.setChecked(True)
17 self.checkbox_1.toggled.connect(self.btnState)
18
19 self.checkbox_2= QCheckBox("&checkBox_2")
20 self.checkbox_2.setChecked(False)
21
22 self.checkbox_3 = QCheckBox("&checkBox_3")
23 self.checkbox_3.setCheckState(Qt.PartiallyChecked)
24
25 layout.addWidget(self.checkbox_1)
26 layout.addWidget(self.checkbox_2)
27 layout.addWidget(self.checkbox_3)
28 self.group.setLayout(layout)
29
30 mainLayout=QVBoxLayout()
31 mainLayout.addWidget(self.group)
32
33 self.setLayout(mainLayout)
34
35 def btnState(self):
36 print("状态:",self.checkbox_1.isChecked(),self.checkbox_1.checkState())
37 if self.checkbox_1.isChecked()==True:
38 print("checkbox_1被选中")
39 else:
40 print("checkbox_2取消选中")
41
42
43 if __name__=="__main__":
44 app=QApplication(sys.argv)
45 win=WindowClass()
46 win.show()
47 sys.exit(app.exec_())