【发布时间】:2015-05-20 22:55:41
【问题描述】:
我有一堆 QAction,其中一些(目前)在两个子菜单和主菜单中。
正如您在下面的代码中所见,操作是在没有父级无的情况下创建的,因为这些操作与具有相同菜单的按钮共享。
那个插槽on_connect 应该创建一个类 Wire 的实例。
唯一阻止我创建wire类实例的是jack_connector,它应该是按下并显示菜单的按钮。其他参数都还可以,暂时只关心这个。
我发现我可以通过self.sender().parent().objectName() 获得我需要的值
但此时 QActions 有父集 None ,所以我需要在运行时将显示菜单的按钮设置为父级。
我已经知道可以使用 .setParent() 方法完成,但我不知道如何在按钮按下事件期间对所有操作执行此操作。
这是最相关的代码:
scene = MyScene()
menu = QMenu()
widget_container = QWidget()
#dictonaries for dragbuttons (used later for connecting them)
jacks_dic = {}
inputs_dic = collections.OrderedDict()
wire_dic = {}
...
@pyqtSlot(str)
def on_connect(self, input):
print 'connected'
jack_connector = self.sender().parent().objectName() #sender's parent of QAction should be the button
wire_dic['wire_1'] = Wire( jack_connector , widget_container.findChild( DragButton, 'btn_' + input ) , None, scene)
#Load Menu options for Jacks dragbuttons
#create sub-menus
submenus_dic = collections.OrderedDict()
submenus_dic['AIF1TX1_submenu'] = QMenu("AIF1TX1 (L) Record to Device")
submenus_dic['AIF1TX2_submenu'] = QMenu("AIF1TX2 (R) Record to Device")
actions_dic = collections.OrderedDict()
for input in inputs_dic:
#Create an Action
actions_dic[ input ] = QtGui.QAction( input, None)
#TODO: Find a way to set parent a QAction after click
#TODO: Research how to connect every action to a slot()
actions_dic[ input ].triggered[()].connect( lambda input=input: on_connect(actions_dic[ input ], input) )
#Condition to add to a submenu
if input[:-2] == 'AIF1TX1' :
submenus_dic['AIF1TX1_submenu'].addAction( actions_dic[ input ] )
if input[:-2] == 'AIF1TX2' :
submenus_dic['AIF1TX2_submenu'].addAction( actions_dic[ input ] )
#Add SubMenus to Main Menu
for submenu in submenus_dic:
menu.addMenu(submenus_dic[ submenu ] )
【问题讨论】:
标签: python qt pyqt pyqt4 pyside