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点击项的文本?的主要内容,如果未能解决你的问题,请参考以下文章

pyqt5的QListWidget中设置右键菜单

PyQt5 唯一点击的子项

用于 openPersitentEditor 的 PyQt5 TypeError

如何在android中获取主屏幕小部件列表项的点击事件[重复]

如何在两个 QListWidget 之间移动项目?

PyQt 在 ListWidget 中获取特定值