Pyqt - установка цвета фона отдельных объектов QMenu/QAction
Мне нужно сделать QMenu, который содержит QMenus / QActions, произвольно вложенные в него, и каждому подменю / действию должны быть назначены цвета
PyQt позволяет легко создавать меню внутри меню, но проблема в том, что в QMenu нет таблиц стилей или палитры, у меня возникают проблемы с окраской отдельных элементов QMenu по-разному.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# IMPORT STANDARD LIBRARIES
import textwrap
import sys
# IMPORT THIRD-PARTY LIBRARIES
from PySide2 import QtWidgets
class Window(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent=parent)
self.setLayout(QtWidgets.QVBoxLayout())
self.resize(700, 500)
def mousePressEvent(self, event):
'''Whenever the user clicks an item in the list, show its dependencies.'''
super(Window, self).mousePressEvent(event)
menu = QtWidgets.QMenu(self)
submenu1 = menu.addMenu('Test')
submenu3 = submenu1.addMenu('sub menu with no style')
submenu1.addMenu('Inner menu with no items or style')
inner_menu2 = submenu1.addMenu('Inner menu with style')
inner_menu2.setProperty('test', 'in')
another_inner_part1 = inner_menu2.addAction('inner inner part with style')
another_inner_part1.setProperty('test', 'out')
another_inner_part2 = inner_menu2.addAction('inner inner part with other style')
another_inner_part2.setProperty('test', 'other')
submenu3.setProperty('test', 'out')
submenu4 = submenu1.addMenu('Sub')
submenu4.setProperty('test', 'out')
submenu1.setProperty('test', 'out')
submenu2 = menu.addMenu('Test2')
submenu2.setProperty('test', 'in')
position = event.pos()
menu.exec_(self.mapToGlobal(position))
def main():
'''The main execution of the current script.'''
app = QtWidgets.QApplication([])
window = Window()
window.setStyleSheet(textwrap.dedent(
'''
QWidget[test=out] {
background-color: red;
}
QWidget[test=in] {
background-color: green;
}
QWidget[test=out] {
background-color: yellow;
}
'''
))
window.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Вот что я получил:
Я надеялся, что это произойдет (но это не сработало).
QWidgetAction обычно является лучшим маршрутом для раскрашивания элементов в QMenu, но, насколько я знаю, вы не можете вкладывать подменю в QWidgetAction, не разбираясь с проблемой. Но я пойду по этому пути, если нет лучшего пути.
Если кто-нибудь знает простое решение, пожалуйста, поделитесь.