- PyQt 教程
- PyQt - 首页
- PyQt - 简介
- PyQt - 环境搭建
- PyQt - Hello World
- PyQt - 主要类
- PyQt - 使用 Qt Designer
- PyQt - 元对象
- PyQt 信号与槽
- PyQt - 信号和槽
- PyQt - 支持和信号
- PyQt - 未绑定和已绑定信号
- PyQt - 使用 PyQtSignal 创建新的信号
- PyQt - 连接、断开和发射信号
- PyQt - 槽装饰器
- PyQt - 槽连接
- PyQt 布局
- PyQt - 布局管理
- PyQt - QBoxLayout
- PyQt - QGridLayout
- PyQt - QFormLayout
- PyQt - QHBoxLayout
- PyQt - QVBoxLayout
- PyQt - QStackedLayout
- PyQt - QGraphicsGridLayout
- PyQt - QGraphicsAnchorLayout
- PyQt - QGraphicsLayout
- PyQt - QGraphicsLinearLayout
- PyQt 基本控件
- PyQt - 基本控件
- PyQt - QLabel 控件
- PyQt - QLineEdit 控件
- PyQt - QPushButton 控件
- PyQt - QRadioButton 控件
- PyQt - QCheckBox 控件
- PyQt - QComboBox 控件
- PyQt - QSpinBox 控件
- PyQt - QMessageBox
- PyQt - QDialogButtonBox 控件
- PyQt - QFontComboBox 控件
- PyQt - QDoubleSpinBox 控件
- PyQt - QToolBox 控件
- PyQt - QDialog 类
- PyQt - QMessageBox
- PyQt - 多文档界面
- PyQt - 拖放
- PyQt 绘图 API
- PyQt - 绘图 API
- PyQt 数据库
- PyQt - 数据库操作
- PyQt 核心知识
- PyQt - BrushStyle 常量
- PyQt - QClipboard
- PyQt - QPixmap 类
- PyQt 有用资源
- PyQt - 快速指南
- PyQt - 有用资源
- PyQt - 讨论
PyQt - QPushButton 控件
在任何 GUI 设计中,命令按钮是最重要和最常用的控件。带有“保存”、“打开”、“确定”、“是”、“否”和“取消”等标题的按钮对任何计算机用户都很熟悉。在 PyQt API 中,QPushButton 类对象表示一个按钮,单击该按钮可以编程为调用某个函数。
继承关系图
QPushButton 类继承其核心功能自 QAbstractButton 类,后者又继承自 QWidgets 类。命令按钮是矩形的,通常显示描述其操作的文本标签。它还可以使用文本中的&符号指定快捷键,从而启用键盘激活。
示例
button = QPushButton("&Download", self)
在上例中,如果我们按下 Alt+D,则按钮将被激活。
QPushButton 的工作原理
QPushButton 可以显示文本标签和图标。我们可以在初始化期间设置按钮的这些属性,或者稍后使用 setText() 和 setIcon() 等方法修改它们。当按钮被禁用时,文本和图标的外观会调整以指示按钮处于禁用状态。
QPushButton 在通过鼠标、空格键或键盘快捷键激活时会发出 clicked() 信号。此信号连接到执行按钮的相关操作。此外,它还提供 pressed() 和 released() 等信号,用于不太常见的用例。
在对话框中,命令按钮设置为自动默认按钮,即当它们接收键盘焦点时,它们会自动成为默认按钮。当用户在对话框中按下 Enter 或 Return 键时,将激活默认按钮。可以使用 setAutoDefault() 自定义此行为。
QPushButton 的用法
推送按钮可用于通过用户交互触发的操作,例如“应用”、“取消”或“帮助”。按钮具有宽矩形形状和文本标签。对于改变窗口状态的小型方形按钮,工具按钮 (QToolButton) 更为合适。
变体和自定义
QPushButton 提供各种自定义选项,包括切换行为 (setCheckable())、自动重复功能 (setAutoRepeat()) 和控制按钮外观。它支持不同的状态,例如可用或不可用,标准按钮或菜单按钮,打开或关闭(用于切换按钮),默认或普通,自动重复或不自动重复,以及按下或未按下。
QPushButton 类的常用方法
以下是 QPushButton 类的一些最常用的方法:
序号 | 方法及描述 |
---|---|
1 |
setCheckable() 如果设置为 true,则识别按钮的按下和释放状态 |
2 |
toggle() 在可选中状态之间切换 |
3 |
setIcon() 显示由图像文件的像素图形成的图标 |
4 |
setEnabled() 设置为 false 时,按钮将被禁用,因此单击它不会发出信号 |
5 |
isChecked() 返回按钮的布尔状态 |
6 |
setDefault() 将按钮设置为默认按钮 |
7 |
setText() 以编程方式设置按钮的标题 |
8 |
text() 检索按钮的标题 |
示例
四个 QPushButton 对象设置了一些上述属性。该示例以面向对象的形式编写,因为需要将事件源作为参数传递给槽函数。
四个 QPushButton 对象在类中定义为实例变量。第一个按钮 b1 通过以下语句转换为切换按钮:
self.b1.setCheckable(True) self.b1.toggle()
此按钮的 clicked 信号连接到成员方法 btnstate(),该方法通过检查 isChecked() 属性来识别按钮是按下还是释放。
def btnstate(self): if self.b1.isChecked(): print "button pressed" else: print "button released"
第二个按钮 b2 在表面上显示一个图标。setIcon() 方法采用任何图像文件的像素图对象作为参数。
b2.setIcon(QIcon(QPixmap("python.gif")))
按钮 b3 使用 setEnabled() 方法设置为禁用:
b3.setEnabled(False)
PushButton b4 通过 setDefault() 方法设置为默认按钮。其标题的快捷键是通过在标题前添加 & 创建的 (&Default)。结果,通过使用键盘组合 Alt+D,将调用连接的槽方法。
按钮 b1 和 b4 连接到 whichbtn() 槽方法。由于该函数旨在检索被单击按钮的标题,因此应将按钮对象作为参数传递。这是通过使用 lambda 函数实现的。
例如:
b4.clicked.connect(lambda:self.whichbtn(self.b4))
完整的代码如下:
import sys from PyQt6.QtCore import * from PyQt6.QtGui import * from PyQt6.QtWidgets import QDialog,QApplication, QPushButton,QVBoxLayout class Form(QDialog): def __init__(self, parent=None): super(Form, self).__init__(parent) layout = QVBoxLayout() self.b1 = QPushButton("Button1") self.b1.setCheckable(True) self.b1.toggle() self.b1.clicked.connect(lambda:self.whichbtn(self.b1)) self.b1.clicked.connect(self.btnstate) layout.addWidget(self.b1) self.b2 = QPushButton() self.b2.setIcon(QIcon(QPixmap("python.gif"))) self.b2.clicked.connect(lambda:self.whichbtn(self.b2)) layout.addWidget(self.b2) self.setLayout(layout) self.b3 = QPushButton("Disabled") self.b3.setEnabled(False) layout.addWidget(self.b3) self.b4 = QPushButton("&Default") self.b4.setDefault(True) self.b4.clicked.connect(lambda:self.whichbtn(self.b4)) layout.addWidget(self.b4) self.setWindowTitle("Button demo") def btnstate(self): if self.b1.isChecked(): print ("button pressed") else: print ("button released") def whichbtn(self,b): print ("clicked button is "+b.text()) def main(): app = QApplication(sys.argv) ex = Form() ex.show() sys.exit(app.exec()) if __name__ == '__main__': main()
输出
以上代码产生以下输出。
clicked button is Button1 button released clicked button is Button1 button pressed clicked button is &Default
示例:带有菜单的 QPushButton
让我们创建一个带有菜单选项的 QPushButton。
import sys from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QMenu class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): btn = QPushButton('Menu', self) menu = QMenu(self) menu.addAction('Option 1') menu.addAction('Option 2') btn.setMenu(menu) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('Menu QPushButton') self.show() def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()
输出
以上代码产生以下结果: