zoukankan      html  css  js  c++  java
  • 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覆盖,所以在设计项目是需注意这一点。

    以前-好记性不如烂笔头 现在-好记性不如烂键盘
  • 相关阅读:
    PS封装ES流
    win7无法删除文件夹,提示“找不到该项目”
    声明
    ZR#1005
    ZR#1004
    ZR#1009
    ZR#1008
    ZR#1015
    ZR#1012
    ZR#985
  • 原文地址:https://www.cnblogs.com/gexbooks/p/14865840.html
Copyright © 2011-2022 走看看