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