0

我正在尝试对 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:需要字符串或 Unicode 类型”错误:

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)
4

1 回答 1

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 不是字符串或 Unicode,而是一个序列。您只是将此序列放入列表中,然后尝试将其添加到列表框中。改变

   self.m_listBox4.Append(str(rows))

只是看看它做了什么。

于 2014-12-05T10:46:28.340 回答