Python PyQt5 QTableWidget contextMenuEvent setStyleSheet цвет фона подменю - PullRequest
0 голосов
/ 12 марта 2020

У меня есть контекстное меню в моем PyQt5 QTableWidget.

def contextMenuEvent(self, event):
    """Open context menu for selected items."""

    selected_items = self.selectedItems()
    if selected_items:

        menu = QMenu(self)
        menu.setStyleSheet("""
            QMenu {border: 1px inset grey; background-color: #fff; color: #000; padding: 0;}
            QMenu:selected {background-color: #ddf; color: #000;}"""
        )
        # File submenu
        file_menu = QMenu("File")
        delete_action = file_menu.addAction("Delete")
        menu.addMenu(file_menu)

        # Format sub_menu
        format_menu = QMenu("Format")
        format_split_action = format_menu.addAction("Split address")
        format_title_case_action = format_menu.addAction("Title Case")
        menu.addMenu(format_menu)

        menu.addSeparator()

        # Quick links
        menu.addAction("Split address")
        menu.addAction("Title Case")

        action = menu.exec_(self.mapToGlobal(event.pos()))
        if action:
            if action == format_title_case_action:
                self.format_title_case()
            elif action == format_split_action:
                self.split_address()
            elif action == delete_action:
                self.remove_selected_rows()

Таблица стилей форматирует меню почти так, как я хочу, но не меняет цвет фона подменю (Файл и формат) , который все еще имеет серый фон:

enter image description here

Я предполагаю, что мне нужно добавить еще одну запись в таблицу стилей для стиля подменю. Кто-нибудь знает, что мне нужно добавить?

1 Ответ

1 голос
/ 12 марта 2020

Таблицы стилей наследуются только дочерними элементами виджета, к которому они применяются.
Если добавить меню к другому, оно не станет дочерним для него, и это потому, что одно и то же меню может использоваться в нескольких ситуации (из QMenu.addMenu (QMenu) ):

Это меню не становится владельцем меню.

Решение состоит в том, чтобы установить это Главное меню в качестве родительского для каждого дочернего элемента, к которому вы хотите применить таблицы стилей:

    menu = QMenu(self)
    menu.setStyleSheet("""
        QMenu {border: 1px inset grey; background-color: #fff; color: #000; padding: 0;}
        QMenu:selected {background-color: #ddf; color: #000;}
    """)
    file_menu = QMenu("File", menu)

В качестве альтернативы вы можете сделать то же самое с QMenu.addMenu():

    file_menu = menu.addMenu("File")

Это не ваш случай, но стоит отметить, что если вы используете это дочернее меню где-то еще, главное меню все равно будет его родительским, и поэтому будет иметь ту же таблицу стилей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...