QMenu动作创建范围

时间:2015-04-21 10:36:26

标签: pyside

我会创建一个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_()

2 个答案:

答案 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'
相关问题