PyQt 在 ListWidget 中获取特定值

Posted

技术标签:

【中文标题】PyQt 在 ListWidget 中获取特定值【英文标题】:PyQt Get specific value in ListWidget 【发布时间】:2016-11-22 08:02:11 【问题描述】:

我是 python 和 pyqt/pyside 的新手...

我使 customwidget 类由 2 个标签(标题和描述)组成,这是稍后添加到 Listwidget 的示例实例 ...

这是完整的干净代码(pyside maya)

import PySide.QtCore as qc
import PySide.QtGui as qg

class CustomQWidget (qg.QWidget):
    def __init__ (self, parent = None):
        super(CustomQWidget, self).__init__(parent)
        self.textQVBoxLayout = qg.QVBoxLayout()
        self.titleLabel    = qg.QLabel()
        self.description  = qg.QLabel()
        self.textQVBoxLayout.addWidget(self.titleLabel)
        self.textQVBoxLayout.addWidget(self.description)
        self.setLayout(self.textQVBoxLayout)
    def setTitle (self, text):
        self.titleLabel.setText(text)
    def setDescription (self, text):
        self.description.setText(text)

class example_ui(qg.QDialog):
    def __init__(self):
        qg.QDialog.__init__(self)
        self.myQListWidget = qg.QListWidget(self)
        self.myQListWidget.currentItemChanged.connect(self.getTitleValue)
        self.myQListWidget.setGeometry(qc.QRect(0,0,200,300))
        # make instance customwidget item (just one)------
        instance_1 = CustomQWidget()
        instance_1.setTitle('First title')
        instance_1.setDescription('this is a sample desc')
        myQListWidgetItem = qg.QListWidgetItem(self.myQListWidget)
        myQListWidgetItem.setSizeHint(instance_1.sizeHint())
        self.myQListWidget.addItem(myQListWidgetItem)
        self.myQListWidget.setItemWidget(myQListWidgetItem, instance_1)
    def getTitleValue(self,val):
       # i make assume something like below but didnt work
       # print (self.myQListWidget.currentItem.titleLabel.text()
       return 0
dialog = example_ui()
dialog.show()

现在在 getTitleValue 函数中,当我更改选择时如何获取 Title 和 desc 值?

【问题讨论】:

【参考方案1】:

您应该记住,列表项和相应的小部件并不相同。幸运的是,QListWidget 会跟踪它们并让您访问显示的小部件(如果您提供列表项):

class example_ui(qg.QDialog):
    def getTitleValue(self,val):
        # parameter val is actually the same as self.myQListWidget.currentItem
        selected_widget = self.myQListWidget.itemWidget(val)
        print selected_widget.titleLabel.text()       
        return 0

旁注:我必须添加一个主循环才能完全执行应用程序:

import sys # to give Qt access to parameters
# ... class definitions etc. ... 
app = qg.QApplication(sys.argv)
dialog = example_ui()
dialog.show()
exec_status = app.exec_() # main loop

【讨论】:

感谢 Sanyok 抽出宝贵时间,我现在明白了,注意:我在 Maya 中运行代码,很好,如果想直接从 python 运行,则需要一个主循环(就像你输入的那样)。谢谢

以上是关于PyQt 在 ListWidget 中获取特定值的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5中如何获取Listwidget点击项的文本?

从pyqt4中的listWidget返回值

Python:如何在 PyQt 中查询 QListWidget 中的多个选定项

PyQt4:将项目从一个 QListWidget 移动到另一个

PyQt通过resize改变窗体大小时ListWidget显示异常

如何将套接字添加到 listWidget