如何使用 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)
我想用单击的项目的名称创建 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)