本文共 5892 字,大约阅读时间需要 19 分钟。
按钮的基类是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 sysfrom 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 sysfrom 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 sysfrom 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_())
运行效果如下:
转载地址:http://jvozi.baihongyu.com/