0

wxListBox からテキスト ファイルにテキストを書き込む wxFormBuilder インターフェイスをプログラムしようとしています。私の現在のコード:

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

もう1つは次のとおりです。

for row in csv_fh:
    stockinfo.append(row)

ここで、row は String や Unicode ではなく、シーケンスです。このシーケンスをリストに入れ、後でリスト ボックスに追加しようとしているだけです。変化する

   self.m_listBox4.Append(str(rows))

それが何をするかを見るだけです。

于 2014-12-05T10:46:28.340 に答える