22-窗口、窗口控件、对话框以及相关功能类-状态栏QStatusBar

状态栏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() 函数确定大小夹的当前状态。

../../_images/fusion-statusbar-sizegrip.png

状态栏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())

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值