我试图编写一个wxFormBuilder接口,将文本从wxListBox写入文本文件。我目前的代码:
def clickSave (self, parent):
dialog = wx.FileDialog(None, "Choose a file", os.getcwd(), "", "*.*", wx.SAVE)
if dialog.ShowModal() == wx.ID_OK:
fn = dialog.GetPath()
fh = open(fn, "w")
for i in range(self.m_listBox4.GetCount()):
listBox = self.m_listBox4.GetString(i) + "\n"
fh.write(listBox)
fh.close()
目前,此代码仅保存列表框中的最后一个条目,而不是所有条目。我也无法将文本文件中的列表导入到wxListBox中。使用我的代码,我得到了一个" TypeError:String或Unicode type required"错误:
def clickOpen(self, event):
dialog = wx.FileDialog(None, "Choose a file", os.getcwd(), "", "*.*", wx.OPEN)
if dialog.ShowModal() == wx.ID_OK:
stockinfo = []
fn = dialog.GetPath()
fh = open(fn, "r")
csv_fh = csv.reader(fh)
for row in csv_fh:
stockinfo.append(row)
fh.close()
for rows in stockinfo:
self.m_listBox4.Append(rows)
答案 0 :(得分:0)
在
中for i in range(self.m_listBox4.GetCount()):
listBox = self.m_listBox4.GetString(i) + "\n"
你总是覆盖listBox变量的内容,因此只留下最后一行。你可能想要这样做:
listBox += self.m_listBox4.GetString(i) + "\n"
但是,连接字符串效率非常低。你应该做的事情如下:
for i in range(self.m_listBox4.GetCount()):
fh.write(self.m_listBox4.GetString(i))
fh.write("\n")
至于另一个:
for row in csv_fh:
stockinfo.append(row)
这里,row不是String或Unicode,而是序列。您只是将此序列放入列表中,然后尝试将其添加到列表框中。变化
self.m_listBox4.Append(str(rows))
只是为了看它的作用。