小言_互联网的博客

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

738人阅读  评论(0)

目录

一、历史文章导航

二、状态栏

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代码如下:


  
  1. self.statusbar = QtWidgets.QStatusBar(MainWindow)
  2. self.statusbar.setObjectName( "statusbar")
  3. MainWindow.setStatusBar( self.statusbar)

        这里顺便讲一个思路,当遇到自己不熟悉的控件时,不妨先在Qt Designer设计器中把控件拖进去,然后用PyUIC转换成.py文件,再在代码中观察这个控件是怎么被创建出来的,用了哪几行代码。

3. 向状态栏中添加控件

        PyQt5中支持向状态栏中添加标准控件,比如常用的Label、ComboBox、CheckBox、ProgressBar等,这时需要使用到QStatusBar对象的addWidget()方法。

        下面以Label控件为例,代码如下:


  
  1. # 创建1个Label控件
  2. self.label = QtWidgets. QLabel()
  3. # 设置Label要显示的文本为“hello world”
  4. self.label = setText( 'hello world')
  5. # 将Label控件添加到状态栏中
  6. self.statusbar. addWidget( self.label)

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

        在状态栏中显示临时信息,需要使用QStatusBar对象的showMessage()方法。该方法有2个参数:参数1是要显示的临时信息内容,参数2是要显示的时长,以毫秒为单位,若参数2设置为0,则表示一直显示。

        示例代码如下:


  
  1. # 一直显示
  2. self.statusbar.showMessage( 'hello world', 0)
  3. # 显示 3
  4. self.statusBar.showMessage( 'hello world', 3000)

5. 补充说明

        默认情况下,状态栏中的临时信息和添加的控件不能同时显示,否则会出现覆盖重叠的情况。

        错误示例代码如下:


  
  1. # 创建1个Label控件
  2. self.lable = QtWidgets. QLabel()
  3. # 设置Label要显示的文本为“hello world”
  4. self.lable. setText( 'hello world')
  5. # 将Label控件添加到状态栏中
  6. self.statusBar. addWidget( self.lable)
  7. # 在状态栏中显示临时信息“你好世界”,显示时长设为一直显示
  8. self.statusBar. showMessage( '你好世界', 0)

        运行代码后,如下图所示:

        要解决该问题,可以使用addPermanentWidget()方法向状态栏中添加控件。

        示例代码如下:


  
  1. # 创建1个Label控件
  2. self.lable = QtWidgets. QLabel()
  3. # 设置Label要显示的文本为“hello world”
  4. self.lable. setText( 'hello world')
  5. # 使用addPermanentWidget()方法向状态栏中添加Label控件
  6. self.statusBar. addPermanentWidget( self.lable)
  7. # 在状态栏中显示临时信息“你好世界”,显示时长设为一直显示
  8. self.statusBar. showMessage( '你好世界', 0)

        运行结果如下图:

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

1. 具体实现

        在Qt Designer设计器中新建一个MainWindow窗口,删除默认的菜单栏,保留状态栏。然后调整窗口的大小,并保存为.ui文件。打开编译器PyCharm,使用PyUIC将.ui文件转换成.py文件。再在PyCharm中新建一个名为main的.py文件。

        通过UI与逻辑代码分离的方式,我们将业务逻辑代码写在main.py文件中。在该文件中,我们使用QTimer计时器实时获取当前的日期和时间,并使用QStatusBar对象中的showMessage()方法显示在状态栏上。业务逻辑代码如下:


  
  1. # 添加 1个 状态栏
  2. self.statusbar = QtWidgets.QStatusBar( self)
  3. self.statusbar.setObjectName( 'statusbar')
  4. self.setStatusBar( self.statusbar)
  5. # 创建 1个 QTimer计时器对象
  6. timer = QtCore.QTimer( self)
  7. # 发射timeout信号,与自定义槽函数关联
  8. timer.timeout.connect( self.showtime)
  9. # 启动计时器
  10. timer. start()
  11. # 自定义槽函数,用来在状态栏中显示当前日期时间
  12. def showtime( self):
  13. # 获取当前日期时间
  14. datetime = QtCore.QDateTime.currentDateTime()
  15. # 格式化日期时间
  16. text = datetime.toString( 'yyyy-MM-dd HH:mm:ss')
  17. # 在状态栏中显示日期时间
  18. self.statusbar.showMessage(text)
  19. self.retranslateUi( self)
  20. QtCore.QMetaObject.connectSlotsByName( self)

        运行结果如下图所示:

        如果你想把中间的分隔符号换成年月日时分秒,只需要把格式化日期时间这行代码修改一下即可:


  
  1. # 格式化日期时间(修改前)
  2. text = datetime.toString( 'yyyy-MM-dd HH:mm:ss')
  3. # 格式化日期时间(修改后)
  4. 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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场