首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >listctrl未正确填充

listctrl未正确填充
EN

Stack Overflow用户
提问于 2013-05-23 19:02:24
回答 1查看 308关注 0票数 0

因此,我设法按照给定的顺序获得了项目列表,以便正确地填充数据库。当转换项目以填充显示订单中包括的项目的listctrl小部件时.......我明白了:

左侧窗口显示当您添加第一个项目时发生的情况...右窗口是我的问题所在。它基本上覆盖了第一项的文本,并添加了一个空白列。但是,价格会适当地增加,并且所有项目都会正确地添加到sql数据库中……所以我的问题在于我如何填充我的列表

下面显示的代码是填充前面显示的列表ctrl的函数...我似乎找不到我哪里错了.有什么想法吗?

用于重启列表的代码

代码语言:javascript
复制
    def refresh_list2(self, event):
          """Place the names of each ItemEntry into the list"""

        index = 0
        self.entrydict = {}
        self.list2.DeleteAllItems()
        for entry in self.ordite.list_entries():
                if entry.Order_ID == self.entry.Order_ID:
                   self.list2.InsertStringItem(index,self.entry.Order_ID)
                   self.list2.SetStringItem(index,1,self.entryit.Item_ID)
                   self.list2.SetStringItem(index,2,str(self.entryit.Item_Price))
                   self.list2.SetStringItem(index,3,str(self.entryit.Item_Qty))
                   self.entrydict[index] = entry
                   index += 1

用于将项插入数据库的代码

代码语言:javascript
复制
    def add_item(self, event):
        """Add a new entry to the Order_Date ite"""
        # start out with blank, generic Entry
        self.entryit = oi.OrderItemEntry(self.entry.Order_ID,"","","0")
        self.endiag = AddItemOrder(self,self.entryit)
        self.endiag.ShowModal()           


        self.ordite.add_entry(self.entry.Order_ID,
                            str(self.entryit.Item_ID),
                            str(self.entryit.Item_Price),
                            str(self.entryit.Item_Qty) )

        self.refresh_list2(None)
        self.addPrice(None)

我还在考虑在后端创建一个函数,根据给定的order_ID存储item对象的过滤列表

EN

回答 1

Stack Overflow用户

发布于 2013-05-23 21:46:19

哦,wx.ListCtrl的乐趣。;-)

我花了一个多小时来解决这些问题,然后围绕它编写了一个包装器类,从而大大减轻了它的痛苦。

你的refresh_list2()代码有几个问题...

首先,InsertStringItem()方法总是在指定的index之前插入项目,所以如果想要追加到列表中,必须将index设置为大于或等于列表中当前项目数量的任意值- sys.maxint工作得很好。

其次,InsertStringItem()将返回它插入该项的索引,因此您必须在后续的SetStringItem()调用中使用该值。

试试这样的..。

代码语言:javascript
复制
def refresh_list2(self, event):
      """Place the names of each ItemEntry into the list"""

    self.entrydict = {}
    self.list2.DeleteAllItems()

    for entry in self.ordite.list_entries():
        if entry.Order_ID == self.entry.Order_ID:
           index = self.list2.InsertStringItem(sys.maxint, self.entry.Order_ID)
           self.list2.SetStringItem(index, 1, self.entryit.Item_ID)
           self.list2.SetStringItem(index, 2, str(self.entryit.Item_Price))
           self.list2.SetStringItem(index, 3, str(self.entryit.Item_Qty))
           self.entrydict[index] = entry

...which应该可以获得所需的结果,但是如果您随后从列表中删除了一项,self.entrydict可能会出现问题,因为索引值可能会更改。

更新

不知道你在做什么,但是下面这个自包含的例子对我来说很有效……

代码语言:javascript
复制
import sys
import wx

data = (('O0012', '1001', '235.0', '1'),
        ('O0012', '1002', '600.0', '2'))

app = wx.App(redirect=False)
frame = wx.Frame(None)
lc = wx.ListCtrl(frame, style=wx.LC_REPORT)
lc.InsertColumn(0, 'Order ID')
lc.InsertColumn(1, 'Item ID')
lc.InsertColumn(2, 'Item Price')
lc.InsertColumn(3, 'Item Qty')
for a, b, c, d in data:
    index = lc.InsertStringItem(sys.maxint, a)
    lc.SetStringItem(index, 1, b)
    lc.SetStringItem(index, 2, c)
    lc.SetStringItem(index, 3, d)

frame.Show()
app.MainLoop()

更新#2

阿。我想您的意思是插入来自本地entry变量的项,而不是实例属性...

代码语言:javascript
复制
def refresh_list2(self, event):
      """Place the names of each ItemEntry into the list"""

    self.entrydict = {}
    self.list2.DeleteAllItems()

    for entry in self.ordite.list_entries():
        if entry.Order_ID == self.entry.Order_ID:
           index = self.list2.InsertStringItem(sys.maxint, entry.Order_ID)
           self.list2.SetStringItem(index, 1, entry.Item_ID)
           self.list2.SetStringItem(index, 2, str(entry.Item_Price))
           self.list2.SetStringItem(index, 3, str(entry.Item_Qty))
           self.entrydict[index] = entry
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16712236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档