将 qpushbutton 连接到 lambda

问题描述

我正在为 Maya 创建一个 UI,我需要创建一堆按钮并将它们连接到一个传递它们名称函数我有这样的事情:

from pyside2 import QtWidgets

def my_def(arg):
    print("Name: {0}".format(arg))
    
bttns = ["a","b","c","d"]
bttns_objs = []
for b in bttns:
    bttn = QtWidgets.QPushButton()    
    bttn.setobjectName(b)
    bttn.clicked.connect(lambda x=bttn.objectName(): my_def(x))
    bttns_objs.append(bttn)
    
for b in bttns_objs:
    b.clicked.emit()

在此示例中,此代码在 Maya 2018 中运行良好,代码将打印每个对象的名称。 但是当我在 Maya 2020 上试用时,我得到的是“错误”。

我一直在阅读论坛,我意识到“clicked”传递了一个 bool arg,所以对象的名称从未传递给函数......而其他一些答案是使用像这样传递参数:

>
bttn.clicked.connect(lambda checked,x=n: my_def(n))

如果我这样做,它会返回一个错误

# TypeError: <lambda>() takes at least 1 argument (0 given)

在这里遗漏了什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)