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覆盖,所以在设计项目是需注意这一点。
以前-好记性不如烂笔头
现在-好记性不如烂键盘