菜单悬停时QStatusBar消息消失

时间:2014-07-11 10:04:50

标签: python qt qt4 pyqt4

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

由于以下原因,这是有问题的: 我可以通过向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_()

4 个答案:

答案 0 :(得分:3)

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

的方法
self.myMessage = QtGui.QLabel()
self.myMessage.setText("Hello")

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

self.statusBar.addWidget(self.myMessage)

或右侧

self.statusBar.addPermanentWidget(self.myMessage)

答案 1 :(得分:2)

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

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

self.fileMenu.menuAction().setStatusTip("File Menu is hovered")

要防止更改状态栏,您可以在状态栏上安装eventFilter并过滤掉所有QStatusTipEvent

答案 2 :(得分:1)

只需更新Lazywii关于使用QLabel的答案。该代码无法完全正常运行,因此自2016年以来可能进行了一些更改,但是2020年在PyQt5上有效的是:

    self.myMessage = QtWidgets.QLabel()
    self.myMessage.setText("My message not affected by tooltips from hovering")

    self.statusbar.addWidget(self.myMessage)

答案 3 :(得分:0)

要回答关于从状态栏移除边框的部分:self.statusbar().setStyleSheet("QStatusBar::item{ border: 0px solid black };")可以解决问题。 setStyleSheet仅对statusbar对象而非整个应用程序非常重要。