PyQt5中如何获取Listwidget点击项的文本?
Posted
技术标签:
【中文标题】PyQt5中如何获取Listwidget点击项的文本?【英文标题】:How to get the text of the clicked item of Listwidget in PyQt5? 【发布时间】:2022-01-06 05:17:23 【问题描述】:我正在寻找一种方法来获取 listWidget 上被点击元素的文本/名称。
这是我的方法看起来像:
# call lamp clicked event
self.listWidget_lamps.itemClicked.connect(self.lamp_clicked)
# call group clicked event
def lamp_clicked(self):
self.lamp_on = True
self.group_on = False
lamp = Lamp(self.item.text())
print("lamp" + self.item.text() + "got clicked")
但它总是崩溃并给我这个错误:
lamp = Lamp(self.item.text())
AttributeError: 'MainWindow' object has no attribute 'item'
谁能告诉我我做错了什么?
【问题讨论】:
如果发生崩溃,请尝试在终端上运行程序或提示查看完整的回溯,因为 IDE 通常会隐藏:您可能没有声明self.item
,或者您将其用于别的东西。 itemClicked
有一个 item 参数,它对应于单击的项目,将 item
参数添加到 lamp_clicked
并使用它。
@musicamante 谢谢,我现在遇到了一个错误(将其添加到问题中),您能否向我解释一下将 item 参数添加到 lamp_clicked 方法的确切含义?
更改为 def lamp_clicked(self, item):
并在该函数中使用 item
而不是 self.item
。您收到该错误是因为您的代码中没有 self.item = ...
。我建议你: 1. 阅读更多关于类、实例、方法和属性的信息; 2. 正如已经建议的那样,您应该不编辑 pyuic 文件,因为很多原因被认为是不好的做法;阅读using Designer。
@musicamante 谢谢!有人建议我使用其他类,这是 pyuic 类的遗产,所以我使用了它^^
如果你从 both pyuic 类 和 QMainWindow 继承,那就没问题了。
【参考方案1】:
您的插槽lamp_clicked
的签名错误。看看QListWidget::itemClicked,注意信号有一个参数,但你的槽没有参数。
def lamp_clicked(self, clickedItem):
self.lamp_on = True
self.group_on = False
lamp = Lamp(clickedItem.text())
print("lamp" + clickedItem.text() + "got clicked")
应该可以解决问题。
【讨论】:
以上是关于PyQt5中如何获取Listwidget点击项的文本?的主要内容,如果未能解决你的问题,请参考以下文章
用于 openPersitentEditor 的 PyQt5 TypeError