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