возврат в подменю pyQt - PullRequest
       9

возврат в подменю pyQt

1 голос
/ 17 ноября 2011

У меня есть меню, которое имеет такую ​​структуру:

Elements
    A
    B
    C\
        1\
            a
            b
        2\
            a
            b
    D

, где Элементы отображаются на панели меню, все, что имеет \, имеет подменю.

В этом примере у меня есть два a. Я хочу, чтобы можно было различить, на какую a была нажата покупка, и получить такой список, например ['a', '1', 'C', 'Elements'].

Есть ли в Qt функция, с помощью которой я могу просматривать верхние меню, или способ возврата?

Я не хочу писать соединение для каждого QAction в меню, потому что это было бы много лишнего кода и довольно избыточно, я думаю.

Ответы [ 3 ]

1 голос
/ 17 ноября 2011

Используйте сигналы QMenu.triggered , QMenuBar.triggered и QToolBar.actionTriggered .

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

Альтернативным подходом было бы создание подкласса QAction, который позволяет обработчику передаваться в качестве аргумента его конструктору. Затем весь код подключения котельной плиты может быть учтен в методе __init__. Этот подход может быть более гибким, если существует множество действий, которые повторно используются в нескольких различных меню и панелях инструментов.

0 голосов
/ 17 ноября 2011

Ниже я нашел другой способ решения проблемы, но я иду с ответом Эхуморо, потому что он был чище, я думаю.

backtrack = [str(event.text())]
previousWidget = event.associatedWidgets()[0]
while previousWidget.__class__.__name__ != 'QMenuBar':
    backtrack.append(str(previousWidget.title()))
    previousWidget = previousWidget.parent()
print backtrack
0 голосов
/ 17 ноября 2011

QSignalMapper может быть то, что вы ищете.

...