pyQt子菜单回溯

pyQt子菜单回溯,qt,pyqt,pyqt4,Qt,Pyqt,Pyqt4,我有一个菜单,其结构如下: Elements A B C\ 1\ a b 2\ a b D 如果菜单栏上显示元素,则带有\的任何内容都有一个子菜单 在这个例子中,我有两个a。我希望能够区分单击了哪个a,得到这样的列表,例如['a','1','C','Elements'] Qt是否有一个可以查找顶部菜单的功能,或者有一种回溯的方式 我不想

我有一个菜单,其结构如下:

Elements
    A
    B
    C\
        1\
            a
            b
        2\
            a
            b
    D
如果菜单栏上显示元素,则带有
\
的任何内容都有一个子菜单

在这个例子中,我有两个
a
。我希望能够区分单击了哪个
a
,得到这样的列表,例如['a','1','C','Elements']

Qt是否有一个可以查找顶部菜单的功能,或者有一种回溯的方式


我不想为菜单中的每个QAction都编写一个连接,因为这会有很多额外的代码,而且我认为是多余的。

QSignalMapper可能就是您要找的。

QSignalMapper可能就是您要找的。

利用、和信号

这些信号都传递一个对已触发动作的引用,从而避免了将每个动作连接到单个插槽的需要

另一种方法是创建
QAction
的子类,允许将处理程序作为参数传递给其构造函数。然后,可以将所有锅炉板连接代码分解为
\uuuu init\uuuu
方法。如果在多个不同的菜单和工具栏中重复使用大量操作,则此方法会更加灵活。

利用、和信号

这些信号都传递一个对已触发动作的引用,从而避免了将每个动作连接到单个插槽的需要


另一种方法是创建
QAction
的子类,允许将处理程序作为参数传递给其构造函数。然后,可以将所有锅炉板连接代码分解为
\uuuu init\uuuu
方法。如果在多个不同的菜单和工具栏中重复使用大量操作,这种方法会更灵活。

我找到了另一种解决问题的方法,如下所示,但我同意Ekhumaro的答案,因为我认为他的方法更干净

backtrack = [str(event.text())]
previousWidget = event.associatedWidgets()[0]
while previousWidget.__class__.__name__ != 'QMenuBar':
    backtrack.append(str(previousWidget.title()))
    previousWidget = previousWidget.parent()
print backtrack

我在下面找到了解决问题的另一种方法,但我同意Ekhumaro的答案,因为我认为他的答案更干净

backtrack = [str(event.text())]
previousWidget = event.associatedWidgets()[0]
while previousWidget.__class__.__name__ != 'QMenuBar':
    backtrack.append(str(previousWidget.title()))
    previousWidget = previousWidget.parent()
print backtrack

信号映射器用于使用自定义标识符重新发送信号,因此所有信号都可以由单个插槽处理。这意味着信号映射器需要连接到每个单独动作的
触发的
信号,这似乎不是提问者想要的。信号映射器用于使用自定义标识符重新发射信号,以便所有信号都可以通过单个插槽处理。这意味着信号映射器需要连接到每个动作的
触发的
信号,这似乎不是提问者想要的。