我会创建一个qMenu,其中包含一个列表af文件名。这是一个可变长度列表。我想做一个简单的脚本,我会选择一个 简单的(文件)来自它。
from PySide import QtGui
def a():
print "Here i should know which menu is called."
mpos = QtGui.QCursor
x = mpos.pos().x()
y = mpos.pos().y()
# print x,y
app = QtGui.QApplication(())
m = QtGui.QMenu()
for i in range(22):
m.addAction('Menu '+str(i), a)
m.setGeometry( x-20, y-20, 0, 0)
# m.hideTearOffMenu()
# m.setTitle("hh")
# action1.triggered.connect( a)
m.exec_()
答案 0 :(得分:0)
您需要将每个操作的信号连接到自己的行为。这可以通过以下方式完成:
functools.partial
但是我个人更喜欢这样使用for i in range(3):
fileMenu.addAction(a,functools.partial(print,"Hello",i))
:
i
对于每个菜单项,您创建一个可调用对象(在闭包中)包含区分该操作与菜单中其余操作的值。这是int {{1}},但它也可以是文件名。
答案 1 :(得分:0)
您可以将一个插槽连接到菜单的triggered信号,该信号会发送已选择的操作:
def a(action):
print "Here i should know which menu is called."
print unicode(action.text())
...
m.triggered.connect(a)
或者,exec函数直接返回已选择的操作(如果未选择任何内容,则返回None
)。所以你也可以这样做:
action = m.exec_()
if action is not None:
print unicode(action.text())
else:
print 'nothing selected'