如果我创建一个wx.ListCtrl使用mixin使我能够编辑它,如何从改变的单元格中获取数据?到目前为止,我有下面的代码。当我试图打印/保存在变量中时,它是空的。在
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent)
rows = [("Ford", "Taurus", "1996", "Blue"),
("Nissan", "370Z", "2010", "Green"),
("Porche", "911", "2009", "Red")
]
self.list_ctrl = EditableListCtrl(self, style=wx.LC_REPORT)
self.list_ctrl.InsertColumn(0, "Make")
self.list_ctrl.InsertColumn(1, "Model")
self.list_ctrl.InsertColumn(2, "Year")
self.list_ctrl.InsertColumn(3, "Color")
index = 0
for row in rows:
self.list_ctrl.InsertStringItem(index, row[0])
self.list_ctrl.SetItem(index, 1, row[1])
self.list_ctrl.SetItem(index, 2, row[2])
self.list_ctrl.SetItem(index, 3, row[3])
index += 1
self.list_ctrl.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnUpdate)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.list_ctrl, 0, wx.ALL|wx.EXPAND, 5)
self.SetSizer(sizer)
def OnUpdate(self, event):
row_id = event.GetIndex() #Get the current row
col_id = event.GetColumn () #Get the current column
new_data = event.GetText() #Get the changed data
print new_data
cols = self.list_ctrl.GetColumnCount() #Get the total number of columns
rows = self.list_ctrl.GetItemCount() #Get the total number of rows
#Get the changed item use the row_id and iterate over the columns
print (" ".join([self.list_ctrl.GetItem(row_id, colu_id).GetText() for colu_id in range(cols)]))
print "Changed Item:", new_data, "Column:", col_id
#Get the entire listctrl iterate over the rows and the columns within each row
print "\nEntire listctrl BEFORE the update:"
for row in range(rows):
row_data = (" ".join([self.list_ctrl.GetItem(row, col).GetText() for col in range(cols)]))
print row_data
#Set the new data in the listctrl
self.list_ctrl.SetItem(row_id,col_id,new_data)
print "\nEntire listctrl AFTER the update:"
#Create a list that can be used to export data to a file
data_for_export=[]
for row in range(rows):
row_data = (" ".join([self.list_ctrl.GetItem(row, col).GetText() for col in range(cols)]))
print row_data
data_for_export.append(row_data) #Add to the exportable data
print "\nData for export"
for row in data_for_export: #Print the data
print row
约束如下:
^{pr2}$举个例子,假设我想把“Blue”编辑成“Yellow”。在
您已接近
event.GetText()
,请改为尝试event.GetLabel()
,然后不要忘记拨打event.Skip()
更新以反映OP最低工作代码:
{我可能不喜欢你的代码。对于关于获取选择的问题,您可以通过调用
list_control.GetFirstSelected()
来获取所选项目(应该是您正在编辑的项目),并从中调用GetItemText
。在没有看到EditableListCtrl
代码的情况下,我会假设您的问题源于在其他地方被捕获并被否决的事件。但那只是猜测。在下面是一些我假设
EditableListCtrl
的最低工作代码编辑2 由于wx安装之间存在一些差异,因此采用了不同的解决方案。更改了
^{pr2}$OnUpdate
方法并添加了after_edit_event
方法相关问题 更多 >
编程相关推荐