【问题标题】:Add list of items in QtableWidget columns在 QtableWidget 列中添加项目列表
【发布时间】:2014-10-08 19:39:58
【问题描述】:

我尝试在我的 QtreeWidget 列中插入一个项目列表:每个数据都插入到每一列中,因此项目与列一样多。 我用的是MVC架构但是插入失败了!

这是我的看法:

def addContact(self, list):#add contact to my QTreeWidget
    list=[] #list of contact
    items=[]; #list of item

    self.treeWidget.setColumnCount(4);

    for i in list:
        items.append(QtGui.QTreeWidgetItem(list[i])); #create a QtreeWidgetItem's and append them
        items.setText(i,items[i])
        self.treeWidget.insertTopLevelItem(item[i]) #add all in my tree


class view_dialog(QtGui.QDialog, Ui_Dialog):
    def __init__(self):
        QtGui.QDialog.__init__(self)
        Ui_Dialog.__init__(self)
        self.setupUi(self)

    def readData(self): #read data entered by user
        nom=self.nom_line.text()
        prenom=self.prenom_line.text()
        tel=self.tel_line.text()
        adresse=self.adresse_line.text()

        contact=[nom, prenom, tel, adresse]

        return contact

    def clearData(self): # clear data
       self.nom_line.clear()
       self.prenom_line.clear()
       self.tel_line.clear()
       self.adresse_line.clear()

这是我的模型:

class modelContact:
    def __init__(self):
        self.contact=[] #Create a list of Contact

    def AddContact(self, nom, prenom, tel, adresse):#GetContact from my QList
       self.contact.append(nom);
       self.contact.append(prenom);
       self.contact.append(tel);
       self.contact.append(adresse);

这是我的控制器:

def addContactToPhoneBook(self):
    list=self.dialog.readData()
    self.window.addContact(list)
    self.dialog.clearData()

谁能帮我找出问题所在?

UDPDATE

我改变了将项目列表添加到 QtreeWidget 的方式,这对我来说似乎更合乎逻辑

我的新观点:

class view_window(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)


    def addContact(self, list):#add contact to my QTreeWidget
        #list=[] #list of contact
        items=[]; #list of item

        self.treeWidget.setColumnCount(4);

        for i in list:
            items.append(QtGui.QTreeWidgetItem(i)); #create a QtreeWidgetItem's and append them

        for j in range(4):
            items.setText(j,items(j))
            self.treeWidget.insertTopLevelItem(items) #add all in my tree

但是现在我有一个 malloc_error_break 来调试,我认为这是因为我没有分配我的项目,但是在 python 中,我怎样才能用我的项目列表执行 QTreeWidgetItem *items= new QTreeWidgetItem() ??

【问题讨论】:

  • list=[] 确保 for 循环永远不会执行,并且不会添加任何项目。此行应删除。
  • 您好,谢谢您的回复!我删除了行 list[] 但我对该行有一个新问题: items.append(QtGui.QTreeWidgetItem(list[i])) 这是正常的,因为 list[i] 不是整数!那么如何添加到我的项目列表,我的数据联系人列表?或者也许还有其他方法可以做到这一点?
  • 让我了解一下,在 addContact 中,列表的形式为 [nom, prenom, tel, adresse],它们都是字符串,您想在树中添加一行包含这些信息吗?
  • 是的,但我想要每列中的一项!一种父母列表,用一个循环添加到我的树中!

标签: list model-view-controller pyqt4 qtreewidget qtreewidgetitem


【解决方案1】:

添加到单行:

self.treeWidget.insertTopLevelItem( QtGui.QTreeWidgetItem( list ) )

在连续的列上添加 4 行,每行一个数据:

for i in range(4):
    stlist = [""] * 4
    stlist[i] = list[i]
    self.treeWidget.insertTopLevelItem( QtGui.QTreeWidgetItem( stlist ) )

【讨论】:

  • 后者可能与insertTopLevelItems在一行中完成
  • 非常感谢!你让我开心;)
猜你喜欢
  • 2013-01-09
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
  • 2017-04-10
相关资源
最近更新 更多