首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从字符串列表创建PyQt菜单

从字符串列表创建PyQt菜单
EN

Stack Overflow用户
提问于 2009-07-08 22:01:57
回答 2查看 6.2K关注 0票数 12

我有一个字符串列表,并希望为每个字符串创建一个菜单项。当用户单击其中一个条目时,将始终使用字符串作为参数调用相同的函数。经过一些尝试和研究,我想出了这样的东西:

代码语言:javascript
运行
复制
import sys
from PyQt4 import QtGui, QtCore

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.menubar = self.menuBar()
        menuitems = ["Item 1","Item 2","Item 3"]
        menu = self.menubar.addMenu('&Stuff')
        for item in menuitems:
            entry = menu.addAction(item)
            self.connect(entry,QtCore.SIGNAL('triggered()'), lambda: self.doStuff(item))
            menu.addAction(entry)
        print "init done"

    def doStuff(self, item):
        print item

app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())

现在的问题是,每个菜单项都将打印相同的输出:"Item 3“,而不是相应的输出。我很感谢任何关于我如何做好这件事的想法。谢谢。

EN

Stack Overflow用户

发布于 2009-07-08 22:13:07

这应该是可行的,但我很确定还有一种更好的方法,但我现在记不起来了。

代码语言:javascript
运行
复制
def do_stuff_caller(self, item):
    return lambda: self.doStuff(item)

...
self.connect(entry, QtCore.SIGNAL('triggered()'), self.do_stuff_caller(item))

编辑:更短的版本,这仍然不是我想要的……或者它是用另一种语言写的?:)

代码语言:javascript
运行
复制
(lambda x: lambda self.do_stuff(x))(item)
票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1100775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档