4.2.4命令按钮:QPushButton
分为两部分:1. 按钮类控件、2. 命令按钮
1. 按钮类控件
在Qt Designer“窗口部件盒”中,包含按钮类控件如下:
(1)Push Button:命令按钮控件,对应QPushButton类。
(2)Tool Button:工具按钮控件,对应QToolButton类,为命令或选项提供快速访问按钮,通常在QToolBar中使用。
(3)Radio Button:单选按钮控件,对应QRadioButton类。
(4)Check Button:检查按钮控件,对应QCheckButton类。
(5)Command Link Button:命令链接按钮控件,对应QCommandLinkButton类。
(6)Dialog Button Box:对话命令按钮控件,对应QDialogButtonBox类。
2. 命令按钮
为QPushButton设置快捷键,比如文本标题 “&Download”快捷键是“Alt+D”,“&”不会被显示出来,但字母D会显示一条下画线。如果只想显示“&”,那么需要像转义一样使用“&&”。 QPushButton类中的常用方法如下:
setCheckable(逻辑值):设置按钮是否已经被选中。如果为True, 则表示按钮将保持已点击和释放状态
setlcon(参数):设置按钮上的图标。参数:Qtchui.QIcon('图标路径')
setIconSize(参数):设置按钮图标的大小。参数:QtCore.QSize(int width,int height)
setEnabled(逻辑值):设置按钮是否可用。如果为False时,按钮变成不可用状态,点击它不会发射信号
setDefault():设置按钮的默认状态
setShortcut(参数):设置按钮的快捷键,参数:可以设置为键盘中的按键或组合键
setText(文本):设置按钮的显示文本
text():返回按钮的显示文本
isChecked():返回按钮的状态。如果为True时,表示按钮选择状态;为False为释放状态
toggle():在按钮状态之间进行切换
【例4.5】QPushButton命令按钮测试,测试结果如下:
import sys # 导入sys模块,用于访问与Python解释器紧密相关的一些变量和函数
from PyQt6.QtGui import * # 从PyQt6.QtGui模块导入所有内容,这个模块包含GUI相关的图形类
from PyQt6.QtWidgets import * # 从PyQt6.QtW idgets模块导入所有内容,这个模块包含GUI相关的窗口部件类
class MyDialog(QDialog): # 定义一个名为MyDialog的类,它继承自QDialog,表示一个对话框窗口
def __init__(self, parent=None): # 初始化方法,用于设置对话框的初始状态
super(MyDialog, self).__init__(parent) # 调用父类QDialog的初始化方法
self.setWindowTitle("QPushButton测试") # 设置对话框的标题为"QPushButton测试"
self.btn1 = QPushButton("文本按钮") # 创建一个QPushButton对象,并设置其文本为"文本按钮"
self.btn1.setCheckable(True) # 设置按钮为可选中状态
self.btn1.toggle() # 切换按钮的选中状态,如果原来未选中,则选中;如果原来选中,则取消选中
self.btn1.clicked.connect(lambda: self.btnText(self.btn1)) # 当按钮被点击时,连接一个lambda函数到btnText方法
self.btn2 = QPushButton('图片按钮') # 创建另一个QPushButton对象,并设置其文本为"图片按钮"
self.btn2.setIcon(QIcon(QPixmap('E:\PyCode\Pyqt6\ProjectFile02\images\python.ico'))) # 为按钮设置图标,图标图片来自"images/python.ico"
self.btn2.clicked.connect(lambda: self.btnText(self.btn2)) # 当按钮被点击时,连接一个lambda函数到btnText方法
self.btn3 = QPushButton("&Change") # 创建第三个QPushButton对象,并设置其文本为"&Change"(其中"&"表示快捷键)
self.btn3.setDefault(True) # 设置此按钮为默认按钮
self.btn3.clicked.connect(self.btnChange) # 当按钮被点击时,连接btnChange方法
self.btn3.clicked.connect(lambda: self.btnText(self.btn3)) # 同样的,当按钮被点击时,也连接一个lambda函数到btnText方法
vlayout = QVBoxLayout() # 创建一个垂直布局对象
vlayout.addWidget(self.btn1) # 将btn1添加到垂直布局中
vlayout.addWidget(self.btn2) # 将btn2添加到垂直布局中
vlayout.addWidget(self.btn3) # 将btn3添加到垂直布局中
self.setLayout(vlayout) # 将对话框的布局设置为刚刚创建的垂直布局
def btnChange(self): # 定义一个名为btnChange的方法,当btn3被点击时调用
if self.btn1.isChecked(): # 检查btn1是否被选中
print("文本按钮选择") # 如果被选中,打印"文本按钮选择"
else:
print("文本按钮释放") # 如果未被选中,打印"文本按钮释放"
if self.btn2.isEnabled(): # 检查btn2是否可用
self.btn2.setEnabled(False) # 如果可用,则设置为不可用
else:
self.btn2.setEnabled(True) # 如果不可用,则设置为可用
def btnText(self, btn): # 定义一个名为btnText的方法,当按钮被点击时调用,并传入被点击的按钮对象
print("单击" + btn.text() + "!") # 打印"单击"加上按钮的文本+"!"
if __name__ == '__main__': # 当这个脚本被直接运行时,执行以下代码
app = QApplication(sys.argv) # 创建一个QApplication对象,sys.argv是命令行参数列表
d = MyDialog() # 创建一个MyDialog对象
d.show() # 显示对话框窗口
sys.exit(app.exec()) # 进入Qt的事件循环,等待事件(如按钮点击)发生,直到应用退出
这段代码主要实现了以下功能:
- 按钮功能演示:创建了一个自定义对话框,该对话框中包含了三个按钮。
- 文本按钮的切换:第一个按钮是一个可切换状态的文本按钮,当点击时,其状态会切换,并且当第三个按钮被点击时,会检查这个文本按钮的状态并打印相应的信息。
- 图片按钮的启用/禁用:第二个按钮是一个带有图标的图片按钮,当第三个按钮被点击时,这个图片按钮的启用状态会切换。
- 按钮点击事件处理:每个按钮被点击时,都会调用
btnText
方法打印出按钮的文本。
使用的布局和控件如下:
- 布局:
QVBoxLayout
,这是一个垂直布局,用于将按钮垂直堆叠。 - 控件:
QDialog
:这是一个对话框窗口,继承自QWidget
,但专门用于显示简短的信息并请求用户响应。QPushButton
:这是按钮控件,用于响应用户点击事件。
关键语句包括:
-
设置按钮点击事件:
self.btn1.clicked.connect(lambda:self.btnText(self.btn1)) self.btn2.clicked.connect(lambda:self.btnText(self.btn2)) self.btn3.clicked.connect(self.btnChange) self.btn3.clicked.connect(lambda:self.btnText(self.btn3))
这里使用
connect
方法将按钮的clicked
信号与特定的槽函数连接起来。当按钮被点击时,相应的槽函数会被调用。 -
切换按钮状态:
self.btn1.setCheckable(True) self.btn1.toggle()
这里设置了
btn1
为可切换状态的按钮,并初始化为选中状态。 -
设置按钮图标:
self.btn2.setIcon(QIcon(QPixmap("images/python.ico")))
这里设置了
btn2
的图标为images/python.ico
。 -
检查按钮状态并切换图片按钮的启用状态:
if self.btn1.isChecked(): print("文本按钮选择") else: print("文本按钮释放") if self.btn2.isEnabled(): self.btn2.setEnabled(False) else: self.btn2.setEnabled(True)
这段代码在
btnChange
方法中检查btn1
的选中状态,并切换btn2
的启用状态。 -
打印按钮文本:
def btnText(self, btn): print("单击"+btn.text()+"!")
这是一个槽函数,用于打印被点击按钮的文本。
总的来说,这段代码通过按钮的点击事件、状态切换和图标设置,展示了QPushButton
控件的一些基本用法和事件处理。