QStatusBar 消息在菜单悬停时消失

Big*_*r00 5 python qt qt4 pyqt4

我有一个非常基本的QMainWindow应用程序,其中包含 amenubar和 a statusbar。当我将鼠标悬停在菜单上时,状态消息消失。更准确地说,状态消息被清除。我不知道是什么导致了这种行为,但它导致了我希望成为微不足道的行为的非常困难的解决方法。

这是有问题的,原因如下:我可以通过向 中添加一个QLabel小部件来使消息永久化QStatusBar,但随后我得到了尴尬的边框。我不要边界。我知道如何删除边框的唯一方法是通过QStatusBar.setStyleSheet(). 我正在为我的配色方案使用调色板,而不是样式表,因此修改样式表会弄乱其他颜色。statusBar QLabel当我通过样式表进行修改时,我也无法恢复原始颜色。我不是最擅长使用样式表的。

有没有办法防止菜单交互清除状态消息?如果没有,有没有办法在添加 QLabel 小部件时从 StatusBar 中删除边框,同时保留我的调色板(可能不是通过样式表)?

#!/usr/bin/env python
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class win(QMainWindow):
    def __init__(self,parent=None):
        super(win,self).__init__(parent)
        self.menubar = QMenuBar(self)
        self.fileMenu  = QMenu("File")
        self.exitAction = QAction("Exit",self)
        self.fileMenu.addAction(self.exitAction)
        self.menubar.addMenu(self.fileMenu)   
        self.statusBar().showMessage("Hello")
        self.connect(self.exitAction,SIGNAL("triggered()"), self.close)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    GUI = win()
    GUI.show()
    app.exec_()
Run Code Online (Sandbox Code Playgroud)

Laz*_*wii 6

我遇到了同样的问题,我找到了另一种创建新 QLabel 的方法

self.myMessage = QtGui.QLabel()
self.myMessage.setText("Hello")
Run Code Online (Sandbox Code Playgroud)

并将其作为小部件添加到左侧的状态栏

self.statusBar.addWidget(self.myMessage)
Run Code Online (Sandbox Code Playgroud)

或在右边

self.statusBar.addPermanentWidget(self.myMessage)
Run Code Online (Sandbox Code Playgroud)


ale*_*sdm 4

基本上,您将鼠标悬停在其上的每个小部件都会将状态栏文本设置为其statusTip属性,即使该属性是空字符串也是如此。

对于QMenu,文本存储在menuAction操作状态提示中,因此,您可以使用文本而不只是清除状态栏,如下所示:

self.fileMenu.menuAction().setStatusTip("File Menu is hovered")
Run Code Online (Sandbox Code Playgroud)

为了防止任何更改状态栏的行为,您可以eventFilter在状态栏上安装 并过滤掉所有QStatusTipEvent.