如何使用 pyqt 在 .connect 函数中创建一个新对象?

How to create a new object in the .connect function with pyqt?

我想用单击的项目的名称创建 Class Lamp 的新对象。

self.listWidget_lamps.clicked.connect(Hue = Lamp(name_item))

因为这行不通,我现在想知道正确的方法是什么以及我需要如何将 Lamp class 继承到 class Ui_MainWindow(object):.

这是我的代码(第 52 行): https://pastebin.com/rjg96kuJ

这是 class Lamps 的初始化:

class Lamp:
    """Class to control phillips hue lamps/groups"""

    def __init__(self, name: str):
        self.name = name
        with open("data.json", "r") as self.file:
            self.data = json.load(self.file)
        self.brightness = self.data["lamps"][self.name]["brightness"]
        self.xy = self.data["lamps"][self.name]["color"]

...cliked.connect() 的输入必须是函数 - 可以用一对括号调用的函数。所以 Hue = ... 将不起作用。相反,请使用 lambda 函数或您定义的函数。另请注意,要获取项目的名称,您应该使用 ...itemClicked.connect() 而不是 ...clicked.connect() ,它将单击的项目作为参数传递给函数。这是(我相信)最短的方法,虽然非常难读且不推荐:

self.listWidget_lamps.itemClicked.connect(lambda item: globals().update({"Hue": Lamp(item.text())}))

这是推荐的方式:

Hue = None
def new_lamp(item):
    global Hue
    Hue = Lamp(item.text())
self.listWidget_lamps.itemClicked.connect(new_lamp)