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覆蓋,所以在設計項目是需注意這一點。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM