你会看到在下面的图片,我想让用户可以点击劳拉(这是一个QMenu)和它的火灾和事件。就像一个正常的行动。在
我根据下面看到的层次结构动态地创建子菜单。不过,我希望所有的子菜单都可以点击,除了'孩子'。在
奇怪的是“悬停”事件触发而不是触发器事件?为什么会这样?在
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Imports
# ------------------------------------------------------------------------------
import sys
from PySide import QtGui, QtCore
# Main Widget
# ------------------------------------------------------------------------------
class ExampleWidget(QtGui.QWidget):
def __init__(self,):
super(ExampleWidget, self).__init__()
self.initUI()
def initUI(self):
# formatting
self.setWindowTitle("Example")
# context menu
self.main_menu = QtGui.QMenu()
self.sub_menu = QtGui.QMenu("Kids")
self.main_menu.addMenu(self.sub_menu)
tree = [
{
"parent" : "Chris",
"children" : [
{
"parent" : "Doug",
"children" : []
},
{
"parent" : "Michelle",
"children" : [
{
"parent" : "Susan",
"children" : []
}
]
}
]
},
{
"parent" : "Laura",
"children" : [
{
"parent" : "Michael",
"children" : []
}
]
}
]
self.build_sub_menu( self.sub_menu, tree )
# widgets
self.factionsList = QtGui.QListWidget()
# signal
self.factionsList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.factionsList.customContextMenuRequested.connect(self.on_context_menu_factions)
# layout
self.mainLayout = QtGui.QGridLayout(self)
self.mainLayout.addWidget(self.factionsList, 1, 0)
self.show()
def add_menu_item(self, menu, branch):
parent = branch["parent"]
sub_menu = QtGui.QMenu(parent)
item = menu.addMenu(sub_menu)
item.triggered.connect(self.menu_action)
item.hovered.connect(self.menu_action)
print item
for c in branch["children"]:
self.add_menu_item( sub_menu, c)
def build_sub_menu(self, menu, tree):
for branch in tree:
self.add_menu_item(menu, branch)
def menu_action(self):
print "Event"
print self.sender().text()
def on_context_menu_factions(self, pos):
self.main_menu.exec_( QtGui.QCursor.pos() )
# Main
# ------------------------------------------------------------------------------
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
ex = ExampleWidget()
res = app.exec_()
sys.exit(res)
QMenu
文档描述了triggered
信号:我想这是因为在UI中,点击子菜单什么都不做:它们在鼠标悬停时打开,除了打开之外什么都不能做。你想要的行为是不寻常的,我认为如果你需要
triggered
信号的话,就需要对QMenu
进行子分类。在您可以尝试连接到
aboutToShow
信号。在另一种选择是在每个代表父子菜单操作的子菜单中添加某种“.”操作。在
相关问题 更多 >
编程相关推荐