隐藏QWidgetAction只是将它变灰

时间:2018-02-14 20:59:35

标签: python qt pyqt pyqt5 qwidgetaction

我正在尝试使用一些QWidgetAction构建菜单。 其中一些可以隐藏(使用setVisible()),具体取决于程序的当前状态。 当我隐藏QWidgetAction时,它并不是真正隐藏的,但似乎只是被禁用,并且其他操作都被覆盖了。

这是一个显示问题的小测试脚本:

from PyQt5 import QtGui, QtWidgets
import sys

widgetActions = []

def buttonClicked():
    widgetActions[0].setVisible(not widgetActions[0].isVisible())

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = QtWidgets.QMainWindow()
    w.resize(250, 150)
    w.move(300, 300)
    w.setWindowTitle('QWidgetAction bug')

    menuBar = QtWidgets.QMenuBar(w)
    menu = menuBar.addMenu('Test')

    for i in range(10):
        widget = QtWidgets.QLabel('XXXXXXXXXXX' if not i else '------------')
        widgetAction = QtWidgets.QWidgetAction(menuBar)
        widgetAction.setDefaultWidget(widget)
        menu.addAction(widgetAction)
        widgetActions.append(widgetAction)

    button = QtWidgets.QPushButton(QtGui.QIcon(), 'Hide/show first action', w)
    button.move(20, 50)
    button.resize(200, 40)
    button.clicked.connect(buttonClicked)
    w.show()
    sys.exit(app.exec())

请参阅下面的结果以及第一个QWidgetAction如何在另一个操作下保持可见状态。 我做错了什么,或者我只是遇到Qt错误? 有关信息,我在Linux上使用Qt-5.9.4。

Action visible First action hidden

1 个答案:

答案 0 :(得分:1)

如果要隐藏QWidgetAction,则必须隐藏相关的小部件:

def buttonClicked():
    widgetActions[0].setVisible(not widgetActions[0].isVisible())
    widgetActions[0].defaultWidget().setVisible(widgetActions[0].isVisible())