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覆盖,所以在设计项目是需注意这一点。

    以前-好记性不如烂笔头 现在-好记性不如烂键盘
  • 相关阅读:
    【LeetCode】Validate Binary Search Tree
    【LeetCode】Search in Rotated Sorted Array II(转)
    【LeetCode】Search in Rotated Sorted Array
    【LeetCode】Set Matrix Zeroes
    【LeetCode】Sqrt(x) (转载)
    【LeetCode】Integer to Roman
    贪心算法
    【LeetCode】Best Time to Buy and Sell Stock III
    【LeetCode】Best Time to Buy and Sell Stock II
    CentOS 6 上安装 pip、setuptools
  • 原文地址:https://www.cnblogs.com/gexbooks/p/14865840.html
Copyright © 2011-2022 走看看