Как записать записи wxListBox в файл.txt на python

Я пытаюсь запрограммировать интерфейс 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 or 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)

1 ответ

Решение

В

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

просто чтобы посмотреть, что он делает.

Другие вопросы по тегам