【问题标题】:PySide6 setStatusTip() shows QAction namePySide6 setStatusTip() 显示 QAction 名称
【发布时间】:2021-11-09 18:42:11
【问题描述】:

我正在学习 PySide6,我偶然发现了一件奇怪的事情。 创建 QAction 并设置状态提示时,QAction 的名称显示为状态提示,而不是实际的状态提示。

我在这里错过了什么?

这是我的简短示例代码:

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Test App")
        label = QLabel("Hello!")
        label.setAlignment(Qt.AlignCenter)
        self.setCentralWidget(label)

        toolbar = QToolBar("My main toolbar")
        self.addToolBar(toolbar)

        button_action = QAction("Test", self)
        button_action.setShortcut('Ctrl+T')
        button_action.setStatusTip('Test application')
        button_action.triggered.connect(self.onMyToolBarButtonClick)
        toolbar.addAction(button_action)

    def onMyToolBarButtonClick(self, s):
        print("click", s)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec()

这是奇怪的结果:

谢谢!

【问题讨论】:

  • 嗯,我不明白,您所说的“显示为状态提示而不是实际状态提示”是什么意思?您在图像中显示的是 tool 提示,而不是 status 提示
  • 明白了,谢谢你的提示 :)
  • 把它写成答案,这样我们就可以关闭它了

标签: python pyqt pyside6


【解决方案1】:

图像中显示的是工具提示,默认情况下,工具栏会将操作的text() 显示为工具提示,除非使用setToolTip() 明确设置工具提示。

状态提示显示在状态栏中(QStatusBar)。

在 QMainWindow 上,可以使用 statusBar() 访问状态栏(如果不存在,这是新空主窗口的默认设置,则创建并返回一个新窗口)。
只需在__init__() 的任意位置添加以下内容,您就会看到"Test application" 字符串在悬停操作时实际显示在那里:

        self.statusBar()

状态栏也可以安装在任何 QWidget 或继承的子类上,并可用于捕获从其自身或其子类接收到的任何状态事件:

class MainWindow(QWidget): # note: a basic QWidget
    def __init__(self):
        super().__init__()
        layout = QVBoxLayout(self)
        button = QPushButton('Test')
        layout.addWidget(button)
        button.setStatusTip('Test application')
        self.statusBar = QStatusBar()
        layout.addWidget(self.statusBar)

    def event(self, event):
        if event.type() == event.Type.StatusTip:
            self.statusBar.showMessage(event.tip())
            # returning True means that the event has been 
            # successfully handled and will not be propagated to 
            # the possible parent(s)
            return True
        return super().event(event)

以上是 QMainWindow 在后台实际执行的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-25
    • 2022-07-11
    • 2020-08-28
    • 2021-04-06
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多