首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ListCtrl Hack:在ListCtrl中设置ListItems文本

ListCtrl Hack:在ListCtrl中设置ListItems文本
EN

Stack Overflow用户
提问于 2010-12-26 03:14:23
回答 1查看 1.5K关注 0票数 1

我试图在ListCtrl中设置项目的文本内容。问题是它不起作用。

我使用这个函数:_listItem.SetText( "Blah“),但是文本不改变吗?我也尝试过函数SetItemText(),但这也不起作用。

一些重要的信息(可能有帮助):

  • ListCtrl有LC_REPORT样式集
  • ListCtrl有多列
  • 我有自己的类,即ListCtrl...it子类ListCtrl对象和wx.lib.mixins.TextEditMixins对象(以便编辑每个项/单元)

我的代码:

代码语言:javascript
复制
class AddStockListCtrl( ListCtrl, listmix.TextEditMixin ):
    """ """

    # Class Variables:

    # self.parent
    # self.type_cell
    # self.type_cb


    # Class Functions:

    def __init__( self, _parent ):
        """ Constructor """

        ListCtrl.__init__( self, parent=_parent, id=wx.NewId(), style=wx.LC_EDIT_LABELS|wx.LC_REPORT )

        AddStockListCtrl.def_data = ('ABC', "Registered",
                                     '0.00', '500')  # wx.lib.masked.NumCtrl( self, value="0.00" ), wx.lib.masked.NumCtrl( self, value="0.00" ) )
        listmix.TextEditMixin.__init__(self)

        self.parent    = _parent
        self.type_cb   = wx.ComboBox( self, choices=('Registered', 'Tracking'))
        self.type_cell = None

        self.InsertColumn( 0, heading="Code", width=40 )
        self.InsertColumn( 1, heading="Type", width=50 )
        self.InsertColumn( 2, heading="Purchase Price", width=100 )
        self.InsertColumn( 3, heading="Purchase Quantity", width=110 )
        self.type_cb.SetSelection(0)
        self.type_cb.Hide()

        self.add_stock_row()

        self.Bind( wx.EVT_LIST_END_LABEL_EDIT,   self.on_end_edit )  # .on_validate_value )
        self.Bind( wx.EVT_LIST_BEGIN_LABEL_EDIT, self.on_begin_edit )


    def on_begin_edit( self, event ):
        """ Post: """

        if event.GetItem().GetColumn() == 1:

            self.type_cell = event.GetItem().GetId()
            item           = self.type_cell
            rect= self.GetItemRect( event.GetItem().GetId() )
            rect.SetLeft ( self.GetColumnWidth(0)+2 )
            rect.SetWidth( self.GetColumnWidth(1)-2 )

            @AfterEx( rect )
            def postedit( rect ):
                self.type_cb.SetRect( rect )
                self.type_cb.SetFocus()
                self.type_cb.Show()
                self.type_cb.Raise()
                #event.Veto()


    def on_end_edit( self, event ):
        """ Post: """

        if self.type_cell != -1:
            sel_type = str(self.type_cb.GetValue())
            print "Doing end edit & type_cell != None"
            print self.GetItemCount()
            print sel_type

            if sel_type == "Registered":

                for row in range(self.GetItemCount()):

                    #self.GetItem(row,2).SetEditable(True) # by the way is there a way to make a ListItem not editable?
                    #self.GetItem(row,3).SetEditable(True)
                    pass

            else: # sel_type == "Tracking"

                for row in range(self.GetItemCount()):

                    p_price = self.GetItem(row,2)
                    p_quant = self.GetItem(row,3)
                    p_price.SetText("0.00")
                    p_quant.SetText("500")
                    #p_price.SetEditable(False)
                    #p_quant.SetEditable(False)

            self.type_cb.Hide()
            #event.GetItem().SetText( sel_type )
            self.SetItemText( self.type_cell, sel_type ) # HERE the text should change but doesn't?!
            event.Veto()
        else:
            print "It == None"
EN

回答 1

Stack Overflow用户

发布于 2010-12-30 20:23:49

当您使用_listItem.SetText("Blah")时,您还需要使用类似于self.SetItem(_listItem)的内容将项目放回listctrl中。或者您可以使用listctrl的SetItemText方法,而不必处理wx.ListItem对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4532602

复制
相关文章

相似问题

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