按钮类控件主要用来执行一些操作命令,通常搭配使用信号与槽来达到设计者的目标,比如我们可以使用self.pushButton.clicked.connect(MainWindow)来实现关闭窗口的功能,是PyQt5中必不可少的一类控件之一。
鉴于上一篇文章缺少对代码的分析,因此在本文开头会添加PyQt5中常见代码解析。
self.centralwidget = QtWidgets.QWidget(MainWindow) # 创建一个QWidget对象作为窗口的中央部件
self.centralwidget.setObjectName("centralwidget") # 设置中央部件名称
self.pushButton = QtWidgets.QPushButton(self.centralwidget) # 创建一个QPushButton对象并将其放在self.centralwidget对象上
self.pushButton.setGeometry(QtCore.QRect(160, 170, 141, 41)) # 设置按钮坐标及大小
self.pushButton.setObjectName("pushButton") # 设置按钮对象名称
self.pushButton.setText("关闭窗口") # 设置按钮文本
self.pushButton.setEnabled(True) # 设置按钮是否可用
MainWindow.setCentralWidget(self.centralwidget) # 将之前创建的中央部件设置给主窗口
self.menubar = QtWidgets.QMenuBar(MainWindow) # 创建一个菜单栏
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22)) # 设置菜单栏的大小及坐标
self.menubar.setObjectName("menubar") # 设置菜单栏的对象名称
MainWindow.setMenuBar(self.menubar) # 将菜单栏设置到主窗口上
self.statusbar = QtWidgets.QStatusBar(MainWindow) # 创建一个状态栏
self.statusbar.setObjectName("statusbar") # 设置状态栏的对象名称
MainWindow.setStatusBar(self.statusbar) # 将状态栏设置到主窗口上
self.retranslateUi(MainWindow) # 通常用于界面文本的国际化或本地化相关操作
self.pushButton.clicked.connect(MainWindow.close) # 当按钮被点击时,连接到关闭主窗口的操作
QtCore.QMetaObject.connectSlotsByName(MainWindow) # 用于一些基于名称的信号与槽的自动连接机制
按钮类控件
主要包含PushButton(按钮),ToolButton(工具按钮),RadioButton(单选按钮),CheckBox(复选框),CommandLinkButton(命令链接按钮),本文主要介绍前四种按钮的使用方法(最后一个会挪到后期讲解)
1.PushButton
该控件是PyQt5中最常用的控件之一,被称为按钮控件;看起来像是被按下然后释放。它允许用户通过单击来执行操作,PushButton控件可以显示文本、图像等(使用信号与槽实现)。对用于QPushButton类。
方法 | 说明 |
---|---|
setText() | 设置按钮文本 |
text() | 获取按钮显示的文本 |
setIcon() | 为按钮设置图标,Qtcore.QIcon('图标路径') |
setIconSize() | 设置图标大小,Qtcore.Qsize(int width, int height) |
setEnable() | 设置按钮是否可用,false为不可用状态 |
setshortCut() | 设置按钮的快捷键,如<ALT+0> |
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(160, 170, 141, 41))
self.pushButton.setObjectName("pushButton")
self.pushButton.setText("关闭窗口")
self.pushButton.setEnabled(True)
self.pushButton.clicked.connect(MainWindow.close)
通过点击关闭窗口,则实现关闭MainWindow的功能;setEnabled()参数设置为False时,结果同下
可以明显看出按钮颜色变灰,此时无法使用pushButton按钮。
结合上一篇文章所写的文本类控件,我们可以尝试着写一个登录窗口。
功能为:点击登录时弹出用户名+密码,点击退出则退出MainWindow。
self.pushButton.clicked.connect(self.login)
self.pushButton_2.clicked.connect(MainWindow.close)
def login(self):
from PyQt5.QtWidgets import QMessageBox
QMessageBox.information(MainWindow, "登录成功", "用户名:" + self.lineEdit.text() + "密码:" + self.lineEdit_2.text(), QMessageBox.Ok)
结果如下所示
2.ToolButton
工具按钮,对应QToolButton类。本质还是一个按钮,只是在按钮中提供了默认文本“...”和可选的箭头类型。当需要使用该控件时再做介绍,自此不再赘述(手动狗头)
3.RadioButton
为单选按钮(多选一),对应于QRadioButton类,选中其中一个按钮时,其余按钮不能被选中。
方法 | 说明 |
---|---|
setText() | 为按钮设置文本 |
text() | 获取按钮文本 |
setChecked() | 设置按钮是否为选中状态,True/False |
isChecked() | 返回单选按钮的状态,True为选中状态,反之则反 |
常用信号 | |
clicked | 在每次单击按钮时都会发射 |
toggled | 在按钮状态改变时才会发射(常用)也就是每切换一次就发射一次 |
在上面制作登录框的demo中,我们尝试着使用RadioButton来添加选择管理员或者普通用户选项。
如下图所示:
self.radioButton = QtWidgets.QRadioButton(self.centralwidget)
self.radioButton.setGeometry(QtCore.QRect(160, 300, 80, 30))
self.radioButton.setText("管理员")
self.radioButton_2 = QtWidgets.QRadioButton(self.centralwidget)
self.radioButton_2.setGeometry(QtCore.QRect(260, 300, 100, 30))
self.radioButton_2.setText("普通用户")
self.radioButton.clicked.connect(self.info)
def info(self):
from PyQt5.QtWidgets import QMessageBox
if self.radioButton.isChecked():
QMessageBox.information(MainWindow, "提示", "您选择的是:" + self.radioButton.text(), QMessageBox.Ok)
elif self.radioButton_2.isChecked():
QMessageBox.information(MainWindow, "提示", "您选择的是:" + self.radioButton_2.text(), QMessageBox.Ok)
j即可实现以下功能:
4.CheckedBox
复选框控件,可以选择多个选项or条件,对应于QCheckBox类。与radioButton相比,它可以选择多个选项。
内置参数如下所示
方法 | 说明 |
---|---|
QT.Checked() | 选中 |
Qt.PartiallyChecked() | 半选中 |
QT.Unchecked | 未选中 |
信号 | |
stateChanged | 复选框的信号发生改变时发射(譬如显示复选框文本内容) |
利用该控件,我们可以尝试做一个选课界面,选中任意课程后点击设置,会弹出窗口显示选择了哪几门课程。模板如下所示
self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox.setGeometry(QtCore.QRect(140, 230, 150, 50))
self.checkBox.setObjectName("checkBox")
self.checkBox_2 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_2.setGeometry(QtCore.QRect(300, 230, 100, 50))
self.checkBox_2.setObjectName("checkBox_2")
self.checkBox_3 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_3.setGeometry(QtCore.QRect(140, 260, 100, 50))
self.checkBox_3.setObjectName("checkBox_3")
self.checkBox_4 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_4.setGeometry(QtCore.QRect(300, 260, 100, 50))
self.checkBox_5 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_5.setGeometry(QtCore.QRect(140, 290, 100, 50))
self.checkBox_5.setObjectName("checkBox_5")
self.pushButton.clicked.connect(self.getvlaue)
def getvlaue(self):
oper = ""
if self.checkBox.isChecked():
oper += self.checkBox.text()
if self.checkBox_2.isChecked():
oper += '\n' + self.checkBox_2.text()
if self.checkBox_3.isChecked():
oper += '\n' + self.checkBox_3.text()
if self.checkBox_4.isChecked():
oper += '\n' + self.checkBox_4.text()
if self.checkBox_5.isChecked():
oper += '\n' + self.checkBox_5.text()
from PyQt5.QtWidgets import QMessageBox
QMessageBox.information(MainWindow, "提示", "您选择的课程如下" + '\n' + oper, QMessageBox.Ok)
实现功能如下:选择数学、物理两门课后点击设置,则弹出窗口显示创建成功。
本节内容已完结,如果有小伙伴希望了解选择列表类控件的使用请关注博主。
欢迎大佬在评论区批评指正。