按钮的基类是QAbstractButton,提供了按钮的通用性功能。QAbstractButton类为抽象类,不能实例化,必须由其他的按钮类继承QAbstractButton类来实现不同的功能和不同的表现形式。
状态 | 含义 |
---|---|
isDown() | 提示按钮是否被按下 |
isChecked() | 提示按钮是否已经标记 |
isEnabled() | 提示按钮是否可以被用户点击 |
isCheckAble() | 提示按钮是否为可标记的 |
setAutoRepeat() | 设置按钮是否在用户长按时可以自动重复执行 |
信号 | 含义 |
---|---|
Pressed | 当鼠标指针在按钮上并按下左键时触发该信号 |
Released | 当鼠标左键被释放时触发该信号 |
Clicked | 当鼠标左键被按下然后释放时,或者快捷键被释放时触发该信号 |
Toggled | 当按钮的标记状态发生改变时触发该信号 |
QPushButton类继承自QAbstractButton类,其形状是长方形,文本标题或图标可以显示在长方形上。它也是一种命令按钮,可以单击该按钮执行一些命令,或者响应一些事件。
方法 | 描述 |
---|---|
setCheckable() | 设置按钮是否已经被选中,如果设置为True,则表示按钮将保持已点击和释放状态 |
toggle() | 在按钮状态之间进行转换 |
setIcon() | 设置按钮上的图标 |
setEnabled() | 设置按钮是否可以使用,当设置为False时,按钮变成不可用状态,点击它不会发射信号 |
isChecked() | 返回按钮的状态,返回值为True或False |
setDefault() | 设置按钮的默认状态 |
setText() | 设置按钮的显示文本 |
text() | 返回按钮的显示文本 |
通过按钮名字能为QPushButton设置快捷键,比如名字为“
&Download
”的按钮,它的快捷键是“Alt+D”。其规则是:想要实现快捷键为“Alt+D”,那么按钮的名字里就要有字母D,并且在字母D前面加上“&”。这个字母一般是按钮名称的首字母,而且在按钮显示时,“&”不会被显示出来,但字母D会显示一条下划线。
QPushButton按钮的使用:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Win(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(200, 200, 400, 400)
self.setWindowTitle('QPushButton的使用')
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)
self.btn2 = QPushButton('image')
self.btn2.setIcon(QIcon(QPixmap('head1.jpg')))
self.btn2.clicked.connect(lambda :self.whichbtn(self.btn2))
self.btn3 = QPushButton('Disabled')
self.btn3.setEnabled(False)
self.btn4 = QPushButton('&Download')
self.btn4.setDefault(True)
self.btn4.clicked.connect(lambda :self.whichbtn(self.btn4))
layout = QVBoxLayout()
layout.addWidget(self.btn1)
layout.addWidget(self.btn2)
layout.addWidget(self.btn3)
layout.addWidget(self.btn4)
self.setLayout(layout)
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)
form = Win()
form.show()
sys.exit(app.exec_())
QRadioButton类继承自QAbstractButton类,它提供了一组可供选择的按钮和文本标签,用户可以选择其中一个选项,标签用于显示对应的文本信息。单选按钮是一种开关按钮,可以切换为on或者off,即
checked
或unchecked
。当将单选按钮切换到on或者off时,就会发送toggled信号,绑定这个信号,在按钮状态发生改变时,触发相应的行为。
方法 | 描述 |
---|---|
setCheckable() | 设置按钮是否已经被选中,如果设置为True,则表示单选按钮将保持已点击和释放状态 |
isChecked() | 返回单选按钮的状态,返回值为True或False |
setText() | 设置单选按钮的显示文本 |
text() | 返回单选按钮的显示文本 |
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Win(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(200, 200, 400, 400)
self.setWindowTitle('QRadioButton的使用')
self.btn1 = QRadioButton('Button1')
self.btn1.setCheckable(True)
self.btn1.toggle()
self.btn1.toggled.connect(lambda :self.btnstate(self.btn1))
self.btn2 = QRadioButton('Button2')
self.btn2.toggled.connect(lambda: self.btnstate(self.btn2))
layout = QHBoxLayout()
layout.addWidget(self.btn1)
layout.addWidget(self.btn2)
self.setLayout(layout)
def btnstate(self,btn):
if btn.text() == 'Button1':
if btn.isChecked():
print(btn.text()+'is selected')
else:
print(btn.text() + 'is deselected')
if btn.text() == 'Button2':
if btn.isChecked():
print(btn.text() + 'is selected')
else:
print(btn.text() + 'is deselected')
if __name__ == "__main__":
app = QApplication(sys.argv)
form = Win()
form.show()
sys.exit(app.exec_())
QCheckBox类继承自QAbstractButton类,它提供了一组带文本标签的复选框,用户可以选择多个选项。
方法 | 描述 |
---|---|
setChecked() | 设置复选框的状态,设置为True时表示选中复选框,设置为False时表示取消选中复选框 |
isChecked() | 检查复选框是否被选中 |
setText() | 设置复选框的显示文本 |
text() | 返回复选框的显示文本 |
名称(值) | 含义 |
---|---|
Qt.Checked(2) | 组件没有被选中(默认值) |
Qt.PartiallyChecked(1) | 组件被半选中 |
Qt.Unchecked(0) | 组件被选中 |
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Win(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(200, 200, 400, 400)
self.setWindowTitle('QCheckBox的使用')
groupbox = QGroupBox('CheckBoxes')
groupbox.setFlat(True)
self.cb1 = QCheckBox('CheckBox1')
self.cb1.setChecked(True)
self.cb1.stateChanged.connect(lambda :self.btnstate(self.cb1))
self.cb2 = QCheckBox('CheckBox2')
self.cb2.toggled.connect(lambda: self.btnstate(self.cb2))
self.cb3 = QCheckBox('CheckBox3')
self.cb3.setTristate(True)
self.cb3.setCheckState(Qt.PartiallyChecked)
self.cb3.stateChanged.connect(lambda :self.btnstate(self.cb3))
layout = QHBoxLayout()
layout.addWidget(self.cb1)
layout.addWidget(self.cb2)
layout.addWidget(self.cb3)
groupbox.setLayout(layout)
mainLayout = QVBoxLayout()
mainLayout.addWidget(groupbox)
self.setLayout(mainLayout)
def btnstate(self,btn):
cb1Status = self.cb1.text() + ",isChecked=" + str(self.cb1.isChecked()) + ",checkState=" + str(self.cb1.checkState()) + "\n"
cb2Status = self.cb2.text() + ",isChecked=" + str(self.cb2.isChecked()) + ",checkState=" + str(self.cb2.checkState()) + "\n"
cb3Status = self.cb3.text() + ",isChecked=" + str(self.cb3.isChecked()) + ",checkState=" + str(self.cb3.checkState()) + "\n"
print(cb1Status+cb2Status+cb3Status)
if __name__ == "__main__":
app = QApplication(sys.argv)
form = Win()
form.show()
sys.exit(app.exec_())