.一、QPushButton的介绍(官翻)
普通按压按钮或命令按钮是图形用户界面中最常用的部件。(点击)按钮来命令计算机执行某些操作,或回答一个问题。典型的按钮有OK、Apply、Cancel、Close、Yes、No和Help。
命令按钮是矩形的,通常显示描述其操作的文本标签。快捷键可以通过在首选字符前面加上&符号来指定。例如:
button = QPushButton("Download", self)
在本例中,快捷键为Alt+D。详细信息请参阅QShortcut文档(要显示实际的&符号,请使用' && ')。
按钮显示一个文本标签,以及一个可选的小图标。这些属性可以在构造函数中设置,稍后使用setText()和setIcon()修改。如果按钮被禁用,文本和图标的外观将根据GUI样式进行操作,使按钮外观看起来是“禁用”样式(上一节已经说明)。
当按钮被鼠标、空格键或快捷键激活时,它就会发出被点击()的信号。连接到这个信号来执行按钮的动作。按钮也提供不太常用的信号,例如pressed()和release()。
命令按钮在对话框中是默认的自动默认按钮,也就是说,当它们接收到键盘输入焦点时,它们会自动成为默认的push按钮。默认按钮是一个按压类按钮,当用户在对话框中按下Enter或Return键时,它会被激活。你可以用setAutoDefault()来改变这一点。请注意,自动默认按钮保留了一些额外的空间,这是绘制默认按钮指示器所必需的。如果你不希望按钮周围有空格,可以调用setAutoDefault (false)。
在过去的十年中,button组件已经发展到可以适应很多变化。微软风格指南现在显示了大约10种不同的Windows按钮状态,如果考虑到所有功能的组合,文字表明还有几十种更多的按钮状态。
最重要的模式或状态是:
- 可用与否(灰色显示,禁用)。
- 标准按钮,切换按钮或菜单按钮。
- 打开或关闭(仅用于切换按钮)。
- 默认或正常。对话框中的默认按钮通常可以使用Enter或Return键“点击”。
- 是否自动重复。
- 是否按下。
一般规则是,当用户单击应用程序或对话框窗口时,应用程序或对话框窗口执行某个操作(例如应用、取消、关闭和帮助),以及当部件应该是一个带有文本标签的宽矩形时,使用按压按钮。通常用于改变窗口状态而不是执行操作的小正方形按钮(例如QFileDialog右上角的按钮)不是命令按钮,而是工具按钮。Qt为这些按钮提供了一个特殊的类(QToolButton)。
如果你需要切换行为(参见setCheckable()),或者需要一个按钮,当向下按下时,会自动重复激活信号(参见setAutoRepeat()),那么命令按钮可能不是你想要的。当有疑问时,使用工具按钮。
命令按钮的一种变体是菜单按钮。它们提供的不是一个命令,而是多个命令,因为当点击它们时,它们会弹出一个选项菜单。使用方法setMenu()将弹出式菜单和push按钮关联起来。
其他类型的按钮是选项按钮(参见QRadioButton)和复选框(参见QCheckBox)。
在Qt中,QAbstractButton基类提供了大多数模式和其他API,而QPushButton提供了GUI逻辑。有关API的更多信息,请参阅QAbstractButton。
上文所说的按压按钮和命令按钮是QPushButton的两种使用方式,一种是QPushButton()只有点击的功能,被点击后执行操作(具体操作看槽函数中的内容编制),另一种是QPushButton()作为命令按钮,即点击它的时候不会直接执行操作,而是弹出一个菜单,通过菜单中的Action去完成相应的操作。我们将在接下来的学习解释它们的区别。
二、QPushButton的常用方法
1.QPushButoon对象的创建
API函数 | 参数说明 | 返回值 | 功能作用 |
QPushButton() | None | None | 创建一个无父控件的按钮(独立窗口) |
QPushButton(icon,text,parent) | icon:QIcon/QPixmap text:str,parent:QWidget | None | 创建一个有图标,有提示文本和父控件的按钮 |
QPushButton(parent) | ,parent:QWidget | None | 创建一个有父控件的按钮 |
QPushButton(text,parent) | text:str,parent:QWidget | None | 创建一个有提示文本和父控件的按钮 |
2.QPushButton的其他常用方法
API函数 | 参数说明 | 返回值 | 功能作用 |
setEnable(self,arg_1) | arg_1:bool | None | 设置按钮是否启用 |
isEnable(self) | None | bool | 获取按钮是否启用 |
setDefault(self, arg__1) | arg_1:bool | None | 设置按钮是否为默认按钮 |
isDefault(self) | None | bool | 获取按钮是否为默认按钮 |
setAutoDefault(self, arg__1) | arg_1:bool | None | 设置按钮是否为自动默认按钮 |
autoDefault(self) | None | bool | 获取按钮是否为自动默认按钮 |
setFlat(self, arg__1) | arg_1:bool | None | 设置按钮是否为扁平化 |
isFlat(self) | None | bool | 获取按钮是否为扁平化 |
setMenu(self, menu) | menu:QMenu | None | 设置菜单 |
showMenu(self) | None | None | 弹出菜单 |
menu(self) | None | None | 获取菜单 |
QPushButton的常用方法大部分继承自QAbstractButton,包括上面列出的方法中如setDefault( )、setAutoDefault( )。这里说一下什么是默认按钮。
可以看到,比如这种对话框类型(字体对话框,颜色、打印对话框等),OK,Canel,Exit,Open等按钮都属于QPushButton,设置默认按钮后外观上有一个蓝色标识框,当点击Enter键时会自动触发点击事件。这是用内置对话框做例子,如果我们自己创建一个QWidget作为顶窗口,其子控件为多个QPushButton,当我们设置其中一个为默认按钮时,也会有标识框。但是,这个有标识框的按钮并不具有焦点,点击Enter是没有作用的,需要我们手动setFocus(True)。
setFlat()方法,是将按钮的外观由凸起效果改为平面。
setMenu()即是将普通按钮变为命令按钮,这两个方法的作用是为普通按钮增加一个弹出菜单QMenu,showMenu()方法则通常是通过clicked信号连接到的内置函数,用于菜单的弹出控制。而关于QMenu我们将在菜单的章节具体学习。这里提供一个例子,用于命令按钮与普通按钮的区别。
example:
# -*- codeing:utf-8 -*-
from PySide6.QtWidgets import QWidget,QApplication,QPushButton,QMenu
from PySide6.QtGui import QAction
import sys
class testWindow(QWidget):
def __init__(self):
super(testWindow, self).__init__()
self.resize(500,500)
self.setWindowTitle("默认按钮测试")
self.btn1 = QPushButton("普通按压按钮", self)
self.btn1.move(100, 100)
self.btn2 = QPushButton("扁平命令按钮", self)
self.btn2.move(100, 200)
self.btn2.setDefault(True)
menu = QMenu(self.btn2)
menu.addActions([QAction("复制",self),QAction("粘贴",self),QAction("剪切",self)])
self.btn2.setMenu(menu)
self.btn2.clicked.connect(lambda :self.btn2.showMenu())
self.btn3 = QPushButton("扁平按钮", self)
self.btn3.move(100, 300)
self.btn3.setFlat(True)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = testWindow()
win.show()
sys.exit(app.exec())
运行结果:
三、命令链接按钮QCommondLinkButton
QCommandLinkButton按钮是QPushButton的子类,所以QPushButton的所有方法其都可以使用。其在QPushButton的基础上默认增加了箭头图标(当然图标通过setIcon()可以更换)。它设计的目的是为导航栏设置上下翻页的按钮。所以,通常他是“上一步”和“下一步”两个按钮成对使用的, 点击它链接到槽函数从而跳转到下一个界面。
另外,它也增加了可以设置描述性文本的函数setDescription()。
QCommandLinkButton按钮比较简单,不做例子,这里只列出其相关方法:
API函数 | 参数说明 | 返回值 | 功能作用 |
QCommandLinkButto(self,parent) | parent:QWidget | None | 创建命令链接按钮 |
QCommandLinkButto(self,text,description,parent) | text:str,description:str parent:QWidget | None | 创建命令链接按钮 |
QCommandLinkButto(self,text, parent) | text:str parent:QWidget | None | 创建命令链接按钮 |
setDescription(self, description) | description:str | None | 给命令链接按钮设置描述性文本 |
description(self) | None | str | 获取命令链接按钮的描述性文本 |
四、QPushButton的信号
QPushButton没有自有信号,全部继承自QAbstractButton