目录
一、历史文章导航
🔞 控件自适应窗口 ↪ 点击此处跳转
🔞 PyQt5中显示web页面 ↪ 点击此处跳转
🔞 PyQt5中显示表格数据 - MySQL ↪ 点击此处跳转
🔞 PyQt5中ListWidget控件实现页面切换 ↪ 点击此处跳转
🔞 在PyCharm中配置PyQt5环境 ↪ 点击此处跳转
🔞 PyQt5:UI与逻辑代码分离 ↪ 点击此处跳转
🔞 Qt Designer中控件tab键如何调整切换顺序?伙伴关系 ↪ 点击此处跳转
🔞 PyQt5实战:英文字母大小写转换工具 ↪ 点击此处跳转
🔞 PyQt5:多窗口跳转 ↪ 点击此处跳转
🔞 PyQt5实战:1个按钮控制控件的显示和隐藏 ↪ 点击此处跳转
🔞 PyQt5:动态添加控件、动态删除控件示例 ↪ 点击此处跳转
二、状态栏
1. 状态栏类:QStatusBar
在讲解实例之前,我先对状态栏进行简单的介绍。
QStatusBar类表示状态栏,它是一个放置在窗口底部的水平条。QStatusBar类的常用方法如下表:
方法 |
说明 |
addWidget() |
向状态栏中添加控件 |
addPermanentWidget() |
添加永久性控件,不会被临时消息掩盖,位于状态栏最右端 |
removeWidget() |
移除状态栏中的控件 |
showMessage() |
在状态栏中显示一条临时信息 |
clearMessage() |
删除正在显示的临时信息 |
2. 删除和添加状态栏
在PyQt5中,使用Qt Designer设计器创建一个MainWindow窗口时,窗口中默认有2个控件:一个是菜单栏,另一个就是状态栏。如下图所示:
由于一个窗口中只能有一个状态栏,所以首先要删除原有的状态栏。删除状态栏的方式很简单,把光标移动到窗口中的任意位置,然后右键菜单中单击“移除状态栏”即可。还有一种方式就是直接在右侧的对象查看器中选中状态栏,然后右键菜单中单击“移除”即可。如下图所示:
同理,添加状态栏也很简单,只需把光标移动到窗口中右键菜单单击“创建状态栏”即可。对应的Python代码如下:
-
self.statusbar
= QtWidgets.QStatusBar(MainWindow)
-
self.statusbar.setObjectName(
"statusbar")
-
MainWindow.setStatusBar(
self.statusbar)
这里顺便讲一个思路,当遇到自己不熟悉的控件时,不妨先在Qt Designer设计器中把控件拖进去,然后用PyUIC转换成.py文件,再在代码中观察这个控件是怎么被创建出来的,用了哪几行代码。
3. 向状态栏中添加控件
PyQt5中支持向状态栏中添加标准控件,比如常用的Label、ComboBox、CheckBox、ProgressBar等,这时需要使用到QStatusBar对象的addWidget()方法。
下面以Label控件为例,代码如下:
-
# 创建1个Label控件
-
self.label = QtWidgets.
QLabel()
-
-
# 设置Label要显示的文本为“hello world”
-
self.label =
setText(
'hello world')
-
-
# 将Label控件添加到状态栏中
-
self.statusbar.
addWidget(
self.label)
4. 在状态栏中显示和删除临时信息
在状态栏中显示临时信息,需要使用QStatusBar对象的showMessage()方法。该方法有2个参数:参数1是要显示的临时信息内容,参数2是要显示的时长,以毫秒为单位,若参数2设置为0,则表示一直显示。
示例代码如下:
-
# 一直显示
-
self.statusbar.showMessage(
'hello world',
0)
-
-
# 显示
3秒
-
self.statusBar.showMessage(
'hello world',
3000)
5. 补充说明
默认情况下,状态栏中的临时信息和添加的控件不能同时显示,否则会出现覆盖重叠的情况。
错误示例代码如下:
-
# 创建1个Label控件
-
self.lable = QtWidgets.
QLabel()
-
-
# 设置Label要显示的文本为“hello world”
-
self.lable.
setText(
'hello world')
-
-
# 将Label控件添加到状态栏中
-
self.statusBar.
addWidget(
self.lable)
-
-
# 在状态栏中显示临时信息“你好世界”,显示时长设为一直显示
-
self.statusBar.
showMessage(
'你好世界',
0)
运行代码后,如下图所示:
要解决该问题,可以使用addPermanentWidget()方法向状态栏中添加控件。
示例代码如下:
-
# 创建1个Label控件
-
self.lable = QtWidgets.
QLabel()
-
-
# 设置Label要显示的文本为“hello world”
-
self.lable.
setText(
'hello world')
-
-
# 使用addPermanentWidget()方法向状态栏中添加Label控件
-
self.statusBar.
addPermanentWidget(
self.lable)
-
-
# 在状态栏中显示临时信息“你好世界”,显示时长设为一直显示
-
self.statusBar.
showMessage(
'你好世界',
0)
运行结果如下图:
三、实例:在状态栏中实时显示当前时间
1. 具体实现
在Qt Designer设计器中新建一个MainWindow窗口,删除默认的菜单栏,保留状态栏。然后调整窗口的大小,并保存为.ui文件。打开编译器PyCharm,使用PyUIC将.ui文件转换成.py文件。再在PyCharm中新建一个名为main的.py文件。
通过UI与逻辑代码分离的方式,我们将业务逻辑代码写在main.py文件中。在该文件中,我们使用QTimer计时器实时获取当前的日期和时间,并使用QStatusBar对象中的showMessage()方法显示在状态栏上。业务逻辑代码如下:
-
# 添加
1个 状态栏
-
self.statusbar
= QtWidgets.QStatusBar(
self)
-
self.statusbar.setObjectName(
'statusbar')
-
self.setStatusBar(
self.statusbar)
-
-
# 创建
1个 QTimer计时器对象
-
timer
= QtCore.QTimer(
self)
-
-
# 发射timeout信号,与自定义槽函数关联
-
timer.timeout.connect(
self.showtime)
-
-
# 启动计时器
-
timer.
start()
-
-
# 自定义槽函数,用来在状态栏中显示当前日期时间
-
def showtime(
self):
-
-
# 获取当前日期时间
-
datetime
= QtCore.QDateTime.currentDateTime()
-
-
# 格式化日期时间
-
text
= datetime.toString(
'yyyy-MM-dd HH:mm:ss')
-
-
# 在状态栏中显示日期时间
-
self.statusbar.showMessage(text)
-
-
self.retranslateUi(
self)
-
QtCore.QMetaObject.connectSlotsByName(
self)
运行结果如下图所示:
如果你想把中间的分隔符号换成年月日时分秒,只需要把格式化日期时间这行代码修改一下即可:
-
# 格式化日期时间(修改前)
-
text
= datetime.toString(
'yyyy-MM-dd HH:mm:ss')
-
-
# 格式化日期时间(修改后)
-
text
= datetime.toString(
'yyyy年MM月dd日 HH时mm分ss秒')
替换后运行结果如下:
2. QTimer类
在上面的实例代码中,我们用到了QTimer类。该类是一个计时器类,它最常用的2个方法是start()和stop()。其中,start()方法用来启动计时器,参数以秒为单位,默认是1秒。stop()方法则是用来停止计时器。
另外,QTimer类还提供一个timeout信号,在执行定时操作时发射该信号。
这里对QTimer类简单介绍一下,后面我会写一篇专门介绍QTimer类的文章。
3. 结语
最后,非常感谢你能在茫茫文海中点开我的文章,如果对你有所帮助,我会倍感欣慰。也期待读者大大们的点赞、收藏、关注和评论,正因为有你们的支持,我才会有坚持下去的勇气!再次感谢你们!
转载:https://blog.csdn.net/weixin_53989417/article/details/128926984