我想用單擊的專案的名稱創建 Class Lamp 的新物件。
self.listWidget_lamps.clicked.connect(Hue = Lamp(name_item))
由于這不起作用,我現在想知道正確的方法是什么樣的,以及我需要如何將 Lamp 類繼承到class Ui_MainWindow(object):.
這是我的代碼(問題第 52 行):https : //pastebin.com/rjg96kuJ
這是 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"]
uj5u.com熱心網友回復:
輸入...cliked.connect()必須是一個函式 - 可以用一對括號呼叫的東西。所以Hue = ...不會作業。相反,使用 lambda 函式或您定義的函式。另請注意,要獲取專案的名稱,您應該使用...itemClicked.connect()not...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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/368038.html
