gpt4 book ai didi

python - ListCtrl 黑客 : Set a ListItems Text in a ListCtrl

转载 作者:行者123 更新时间:2023-12-01 06:13:28 25 4
gpt4 key购买 nike

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

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

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

  • ListCtrl 设置了 LC_REPORT 样式
  • ListCtrl 有多个列
  • 我有自己的类,即 ListCtrl...它是 ListCtrl 对象和 wx.lib.mixins.TextEditMixins 对象的子类(因此我可以编辑每个项目/单元格)

我的代码:

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"

最佳答案

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

关于python - ListCtrl 黑客 : Set a ListItems Text in a ListCtrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4532602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com