状态栏QStatusBar
状态栏QStatusBar一般放在独立窗口的底部,用于显示程序运行过程中的程序状态信息、提示信息、简要说明信息等,这些信息经过一小段时间后会自动消失。状态栏上也可以放置一些小控件,例如QLabel、QComboBox、QSpinBox等,用于显示永久信息,永久信息不会被实时信息遮挡住。
状态栏 QStatusBar 继承自 QWidget。用QStatusBar 类创建状态栏实例的方法如下,其中parent是状态的父窗口,一般是独立窗口。
from PySide6.QtWidgets import QStatusBar
QStatusBar(parent: Union[PySide6.QtWidgets.QWidget,NoneType]=None)-> None
状态栏QStatusBar官方描述
每个状态指示器都属于以下三类之一:
- 临时Temporary -短暂占据了状态栏的大部分。用于解释工具提示文本或菜单项,例如。
- 正常Normal -占用状态栏的一部分,可能会被临时消息隐藏。例如,用于在文字处理器中显示页面和行号。
- 永久Permanent -永远不会隐藏。用于重要的模式指示,例如,某些应用程序在状态栏中放置了Caps Lock指示器。
QStatusBar可让您显示所有三种类型的指示器。
通常,对状态栏功能的请求与QMainWindow对象有关。QMainWindow提供了一个主应用程序窗口,带有一个菜单栏、工具栏、dock widgets和一个围绕大型中央widget的状态栏。可以使用statusBar() 函数检索状态栏,并使用setStatusBar() 函数替换状态栏。
使用showMessage() 插槽显示临时消息:
def createStatusBar(self):
statusBar().showMessage(tr("Ready"))
要删除临时消息,请使用clearMessage() 插槽,或在调用showMessage() 时设置时间限制。例如:
def print(self):
#if defined(QT_PRINTSUPPORT_LIB) and QT_CONFIG(printdialog)
document = textEdit.document()
printer = QPrinter()
dlg = QPrintDialog(printer, self)
if dlg.exec() != QDialog.Accepted:
return
document.print(printer)
statusBar().showMessage(tr("Ready"), 2000)
#endif
使用currentMessage() 函数检索当前显示的临时消息。QStatusBar类还提供messageChanged() 信号,该信号在临时状态消息更改时发出。
通过创建一个小部件 (QLabel,QProgressBar甚至QToolButton),然后使用addWidget() 或addPermanentWidget() 函数将其添加到状态栏,从而显示正常和永久消息。使用removeWidget() 函数从状态栏中删除此类消息。
statusBar().addWidget(MyReadWriteIndication())
默认情况下,QStatusBar在右下角提供一个QSizeGrip。您可以使用setSizeGripEnabled() 函数禁用它。使用isSizeGripEnabled() 函数确定大小夹的当前状态。
状态栏QStatusBar的常用方法
- showMessage(text:str,timeout: int=0)方法设置状态栏要显示的信息,显示的信息从状态的左侧开始,其中参数timeout的单位是毫秒,设置信息显示的时间,经过timeout 毫秒后信息自动消失,如果timeout=0,则显示的信息一直保留到调用clearMessage()方法或再次调用showMessage()方法;用clearMessage()方法清除显示的信息;用currentMessage()方法获取当前显示的信息。
- addPermanentWidget(QWidget,stretch:int=0)方法或 insertPermanentWidget(index:int,widget:QWidget,stretch:int=0)方法可以把其他控件(如 QLabel)添加到状态栏的右侧,用于显示一些永久的信息,例如软件版本号、公司名称、键盘大小写状态等,这些信息不会被状态栏的信息遮挡住,其中参数stretch用于指定控件的相对缩放系数,index是控件的索引号。
- addtWidget(widget:QWidget,stretch: int=0)方法或insertWidget(index: int,QWidget,stretch:int=0)方法可以把其他控件添加到状态栏的左侧,用于显示正常的信息,这些信息会被状态栏的信息遮挡住。
- removeWidget(QWidget)方法可以把控件从状态栏上移除,但控件并没有被真状态栏真正删除,可以用addWidget()方法和show()方法将控件重新添加到状态栏中。
- setSizeGripEnabled(bool)方法可以设置状态栏的右侧是否有一个小三角形标识。
QStatusBar的常用方法如表所示,主要方法介绍如下:
属性:
-
QStatusBar.sizeGripEnabled: bool
此属性保存状态栏右下角的QSizeGrip是否启用。
默认情况下启用大小夹点。访问功能:
-
isSizeGripEnabled()
-
setSizeGripEnabled(arg__1)
-
QStatusBar的方法及参数类型 | 返回值的类型 | 说 明 |
---|---|---|
[slod]showMessage(rext: str,timeout: int=0) | None | 显示信息,timeout 是显示时间 |
currentMessage() | Str | 获取当前显示的信息 |
[slot]clearMessage() | None | 删除信息 |
aadPermanentWidget(Qwidget,stretch: int=0) | None | 在状态栏的右边添加永久控件 |
addWidget(widget: QWidget,stretch: int=0) | None | 在状态栏的左边添加控件 |
insertPermanentWidget(index: int,widget: QWidget,stretch:int=0) | int | 根据索引值,在右边插入永久控件 |
insertWidget(index: int,QWidget,stretch: int=0) | int | 根据索引值,在左边插入控件 |
removeWidget(widget: QWidget) | None | 从状态栏中移除控件 |
setSizeGripEnabled(bool) | None | 设置在右下角是否有三角形 |
isSizeGripEnabled() | bool | 获取右下角是否有三角形 |
hideOrShow() | None | 确保右边的控件可见 |
状态栏QStatusBar的信号
状态栏QStatusBar 只有1个信号 messageChanged(text: str)
,当显示的信息发生改变时发送该信号。
每当临时状态消息更改时,就会发出此信号。新的临时消息在消息参数中传递,当消息被删除时,该参数为空字符串。
QStatusBar 例子
# -*- coding: UTF-8 -*-
# File date: Hi_2023/2/28 22:59
# File_name: QStatusBar 例子.py
import sys
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
import time
import os
os.chdir(os.path.dirname(__file__))
class StatusDemo(QMainWindow):
def __init__(self,parent=None):
super(StatusDemo,self).__init__(parent)
self.resize(300,200)
bar = self.menuBar()
file = bar.addMenu("File")
new = QAction(QIcon("./images/new.png"),"new",self)
new.setStatusTip('select menu: new')
open_ = QAction(QIcon("./images/open.png"),"open",self)
open_.setStatusTip('select menu: open')
save = QAction(QIcon("./images/save.png"),"save",self)
save.setStatusTip('select menu: save')
file.addActions([new,open_,save])
file.triggered[QAction].connect(self.processTrigger)
self.init_statusBar()
self.timer = QTimer(self)
self.timer.timeout.connect(lambda: self.label.setText(time.strftime("%Y-%m-%d %a %H:%M:%S")))
self.timer.start(1000)
def init_statusBar(self):
self.status_bar = QStatusBar()
self.status_bar2 = QStatusBar()
self.status_bar2.setMinimumWidth(150)
self.label = QLabel('显示永久信息:时间')
self.button = QPushButton('清除时间')
self.status_bar.addWidget(self.status_bar2)
self.status_bar.addWidget(self.label)
self.status_bar.addWidget(self.button)
self.setWindowTitle("QStatusBar 例子")
self.setStatusBar(self.status_bar)
self.button.clicked.connect(lambda: self.status_bar.removeWidget(self.label))
def processTrigger(self,q):
self.status_bar2.showMessage('点击了menu:'+ q.text(),5000)
if __name__ =='__main__':
app = QApplication(sys.argv)
demo = StatusDemo()
demo.show()
sys.exit(app.exec())