PyQt5 在状态栏添加控件 QStatusBar

看别人的GUi界面的状态栏都有许多控件,感觉很Nice,网上找了些,感觉还是自己写一个号点。

上代码:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QTimer

class StatusDemo(QMainWindow):
    label_used_time_text = 0
    def __init__(self,parent=None):
        super(StatusDemo, self).__init__(parent)
        self.test_time = QTimer()
        self.test_time.timeout.connect(self.time_convert)
        self.test_time.start(1000)

        #实例化菜单栏
        bar=self.menuBar()
        #添加父菜单
        file=bar.addMenu('File')
        #添加子菜单
        file.addAction('show')
        #当菜单对象被点击时,触发绑定的自定义的槽函数
        file.triggered[QAction].connect(self.processTrigger)

        #设置当行文本输入框为中间控件
        self.setCentralWidget(QTextEdit())

        #实例化状态栏
        self.statusBar=QStatusBar()
        self.statusBar_1 = QLabel('{:<40}'.format('一号坑'))
        self.statusBar_2 = QLabel('{:^40}'.format('二号坑'))
        self.statusBar_3 = QLabel('{:>40}'.format('三号坑'))
        self.statusBar_4 = QLabel('{:<40}'.format('四号坑'))

        self.statusBar.addWidget(self.statusBar_1, 1)
        self.statusBar.addWidget(self.statusBar_2, 1)
        self.statusBar.addWidget(self.statusBar_3, 1)
        self.statusBar.addWidget(self.statusBar_4, 1)
        self.setWindowTitle('QStatusBar例子')

        #设置状态栏,类似布局设置
        self.setStatusBar(self.statusBar)

    def time_convert(self):
        self.label_used_time_text += 1
        hour = int(self.label_used_time_text // 3600)
        minute = int((self.label_used_time_text % 3600) // 60)
        second = int(self.label_used_time_text % 60)
        fmt = '四号坑:{:0>2d}:{:0>2d}:{:0>2d}'.format(hour,minute,second)
        self.statusBar_4.setText(fmt)

    def processTrigger(self,q):
        if (q.text()=='show'):
            #设置状态栏的显示文本以及显示时间
            self.statusBar.showMessage(q.text()+'菜单选项被点击了',5000)


if __name__ == '__main__':
    app=QApplication(sys.argv)
    demo=StatusDemo()
    demo.show()
    sys.exit(app.exec_())

这里借用了别人的部分代码。 感兴趣的可以去看看

分析:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QTimer

class StatusDemo(QMainWindow):
    label_used_time_text = 0
    def __init__(self,parent=None):
        super(StatusDemo, self).__init__(parent)

常规

        self.test_time = QTimer()
        self.test_time.timeout.connect(self.time_convert)
        self.test_time.start(1000)

添加一个计时器

        #实例化菜单栏
        bar=self.menuBar()
        #添加父菜单
        file=bar.addMenu('File')
        #添加子菜单
        file.addAction('show')
        #当菜单对象被点击时,触发绑定的自定义的槽函数
        file.triggered[QAction].connect(self.processTrigger)

        #设置当行文本输入框为中间控件
        self.setCentralWidget(QTextEdit())

这是他人代码,意为添加一个具有一个子菜单的菜单栏父菜单,并关联点击槽函数processTrigger

        self.statusBar_1 = QLabel('{:<40}'.format('一号坑'))
        self.statusBar_2 = QLabel('{:^40}'.format('二号坑'))
        self.statusBar_3 = QLabel('{:>40}'.format('三号坑'))
        self.statusBar_4 = QLabel('{:<40}'.format('四号坑'))

        self.statusBar.addWidget(self.statusBar_1, 1)
        self.statusBar.addWidget(self.statusBar_2, 1)
        self.statusBar.addWidget(self.statusBar_3, 1)
        self.statusBar.addWidget(self.statusBar_4, 1)

此处添加了4个QLabel文本控键,并添加了文本。使用字符串的format指定对齐方式。

statusBar的addWidget函数

addWidget(widget[,stretch=0])

参数类型:

widget - PySide2.QtWidgets.QWidget

stretch - int

将给定的窗口小部件添加到此状态栏中,如果该窗口小部件不是此QStatusBar对象的子级,则将其重新父级化。当状态栏增大和缩小时,stretch参数用于为给定的小部件计算合适的大小。默认拉伸因子为0,即为窗口小部件提供最小的空间。窗口小部件位于第一个永久窗口小部件的最左侧(请参见addPermanentWidget()),并且可能会被临时消息遮盖。

stretch参数会为部件计算合适的大小,主窗口在拉申或缩小时不跟着改变。

        self.statusBar.addWidget(self.statusBar_1)
        self.statusBar.addWidget(self.statusBar_2)
        self.statusBar.addWidget(self.statusBar_3)
        self.statusBar.addWidget(self.statusBar_4)

        self.statusBar.addWidget(self.statusBar_1, 1)
        self.statusBar.addWidget(self.statusBar_2,1)
        self.statusBar.addWidget(self.statusBar_3,1)
        self.statusBar.addWidget(self.statusBar_4,1)

结果:

 

 需要注意的是控键会被statusBar.showMessage以及statusTip覆盖,所以在设计项目是需注意这一点。

以前-好记性不如烂笔头 现在-好记性不如烂键盘
原文地址:https://www.cnblogs.com/gexbooks/p/14865840.html