PyQt在ListWidget中获取特定值

时间:2016-11-22 08:02:12

标签: python qt pyqt pyside maya

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

我使customwidget类由2个标签(title& desc)组成,这是稍后添加到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 个答案:

答案 0 :(得分: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