Скрытие 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? Для информации я использую Qt-5.9.4 в Linux.
1 ответ
Решение
Если вы хотите скрыть QWidgetAction
Вы должны скрыть связанный виджет:
def buttonClicked():
widgetActions[0].setVisible(not widgetActions[0].isVisible())
widgetActions[0].defaultWidget().setVisible(widgetActions[0].isVisible())