PyQt 获取ListWidget中的特定值

PyQt Get specific value in ListWidget

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

我让 customwidget class 包含 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 函数中,当我更改选择时如何获取标题和描述值?

您应该记住,列表项和相应的小部件是不一样的。幸运的是,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