使用QListWidget和其他'列表'小部件后,我终于到达了似乎是一个简单的解决方案来存储和检索List的项目类(QListWidgetItem )。我向自己介绍的问题背后是我认为QListWidgetItem只能用于存储其标签名称(用于在ListWidget中显示的名称)的事实。当QListWidget被QListWidgetItems填充时,我不得不声明一个字典,其中每个键将是该项目的标签名称,并且值将等于该对象本身(危险的方法,因为两个或多个项目可以具有相同的名称,而字典只能有一个具有相同名称的密钥)。然后,当一个项目被点击时,我会捕获该List Item标签(名称)并查看字典的键以找到相应的对象。如果我声明从QListWidgetItem继承的我自己定制的myItem()类,所有这些都可以轻松避免。现在当点击一个List Item时,我可以直接从它获取对象,就像我调用.getTime()方法一样。在我的代码中使用这种方法之前,请告诉我是否错过或误解了任何内容。Python:如何使用ListWidget项目来存储和检索对象:Easy
from PyQt4 import QtGui, QtCore
import sys, os
class myItem(QtGui.QListWidgetItem):
def __init__(self, name):
super(myItem, self).__init__()
self.name=name
def getTime(self):
import datetime
return datetime.datetime.now()
class Dialog_01(QtGui.QMainWindow):
def __init__(self):
super(QtGui.QMainWindow,self).__init__()
myQWidget = QtGui.QWidget()
myBoxLayout = QtGui.QVBoxLayout()
myQWidget.setLayout(myBoxLayout)
self.setCentralWidget(myQWidget)
self.listWidget = QtGui.QListWidget()
self.listWidget.currentItemChanged.connect(self.item_clicked)
for i in range(12):
name='Item '+str(i)
my_item=myItem(name)
my_item.setText('Item '+str(i))
self.listWidget.addItem(my_item)
myBoxLayout.addWidget(self.listWidget)
def item_clicked(self, arg=None):
print arg.text(), arg.getTime()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
dialog_1 = Dialog_01()
dialog_1.show()
dialog_1.resize(480,320)
sys.exit(app.exec_())
感谢Hyperboreus!我刚刚提到了一个采用上述方法的例子。在检索数据之后获取。怎么了? –
alphanumeric
很高兴帮助... – Hyperboreus
所以,只是为了确保,.toPyObject()方法是获取存储数据的方法......是否正确? – alphanumeric