PyQt5:在状态栏中实时显示当前时间

目录

一、历史文章导航

二、状态栏

1. 状态栏类:QStatusBar

2. 删除和添加状态栏

3. 向状态栏中添加控件

4. 在状态栏中显示和删除临时信息

5. 补充说明

三、实例:在状态栏中实时显示当前时间

1. 具体实现

2. QTimer类

3. 结语


一、历史文章导航

🔞 控件自适应窗口 ↪ 点击此处跳转
🔞 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. 结语

        最后,非常感谢你能在茫茫文海中点开我的文章,如果对你有所帮助,我会倍感欣慰。也期待读者大大们的点赞、收藏、关注和评论,正因为有你们的支持,我才会有坚持下去的勇气!再次感谢你们!

 

  • 12
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
PyQt5可以使用多线程来实现在状态栏显示系统时间的功能。以下是一个示例代码: ```python import sys import threading from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel class MainWindow(QMainWindow): def __init__(self): super().__init__() self.statusBar().showMessage("") self.thread = threading.Thread(target=self.update_time) self.thread.daemon = True self.thread.start() self.show() def update_time(self): while True: # 获取当前系统时间 current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 更新状态栏显示内容 self.statusBar().showMessage("当前时间: " + current_time) time.sleep(1) if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() sys.exit(app.exec_()) ``` 在这个示例,我们创建了一个继承自QMainWindow的窗口类MainWindow。在初始化函数,我们首先调用了父类的初始化函数,并创建了一个空的状态栏。然后,我们创建了一个新的线程,并通过调用`start()`方法来启动线程。这里我们使用了`threading`模块来创建线程,可以根据自己的需求选择其他方法。 在`update_time`函数,我们使用一个循环来不断更新状态栏显示内容。首先,我们通过`datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")`获取当前系统时间,并将其格式化为字符串。然后,我们调用`self.statusBar().showMessage()`方法来更新状态栏显示内容。最后,我们使用`time.sleep(1)`函数使线程休眠1秒钟,以便每秒更新一次状态栏时间显示。 在`if __name__ == "__main__":`语句,我们创建了一个QApplication实例,并将其赋值给`app`变量。然后,我们创建了MainWindow实例,并最后调用`app.exec_()`来启动应用程序的主事件循环。 通过运行这段代码,我们可以在应用程序的状态栏上看到当前的系统时间,并且这个显示是以多线程的方式进行更新的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵呜角角

如果对你有所帮助,哪怕1毛钱~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值