0

開いているファイルがあり、このファイルの内容をリストに入れます。次に、リストを「\r」で分割し、これを textctrl に出力します。問題は、list.txt の長さが 4 行であることですが、プログラムでこれを開くと、4 行から 10 行になり、テキストの一部が複製されます。どこが間違っているのかわかりません。

私のlist.txtの例

A
B
C
D

プログラムが textctrl の複数行ボックスに書き込む内容

A
A
B
A
B
C
A
B
C
D

私はpythonとwxpythonにかなり慣れていないので、私のコードは問題ないように見えますが、どこが重複しているのかわかりません。

   def OnOpen(self,e):
    dlg = wx.FileDialog(self, "Choose a file to open", self.dirname, "", "*.*", wx.OPEN) #open the dialog boxto open file
    if dlg.ShowModal() == wx.ID_OK:  #if positive button selected....
        directory, filename = dlg.GetDirectory(), dlg.GetFilename()
        self.filePath = '/'.join((directory, filename)) 
        f = open(os.path.join(directory, filename), 'r')  #traverse the file directory and find filename in the OS
        self.myList = []
        for line in f:
            self.myList.append(line)
            for i in (self.myList):
                for j in i.split("\r"):
                    self.urlFld.AppendText(j)
        self.fileTxt.SetValue(self.filePath)
        f.close
    dlg.Destroy()
4

2 に答える 2

1

待って、わかった、インデントが間違っていた!! そんなばかげたこと!

解決しました:)

新しいコード:

def OnOpen(self,e):
dlg = wx.FileDialog(self, "Choose a file to open", self.dirname, "", "*.*", wx.OPEN) #open the dialog boxto open file
if dlg.ShowModal() == wx.ID_OK:  #if positive button selected....
    directory, filename = dlg.GetDirectory(), dlg.GetFilename()
    self.filePath = '/'.join((directory, filename)) 
    f = open(os.path.join(directory, filename), 'r')  #traverse the file directory and find filename in the OS
    self.myList = []
    for line in f:
        self.myList.append(line)
    for i in (self.myList):
        for j in i.split("\r"):
            self.urlFld.AppendText(j)
    self.fileTxt.SetValue(self.filePath)
    f.close
dlg.Destroy()
于 2013-04-16T07:53:12.453 に答える
0

「with」を使用して FileDialog を開くと、終了すると破棄されます。

メソッド 'LoadFile' を使用してコントロールにファイル自体をロードさせると、自分でファイルを開いたり閉じたりすることを心配する必要はありません。

コントロールのメソッド「GetValue()」を使用し、結果を分割してリストを作成します。

def OnOpen(self,e):
    with wx.FileDialog(self, "Choose a file to open", self.dirname,
                       "", "*.*", wx.OPEN) as dlg:
        if dlg.ShowModal() == wx.ID_OK:
            directory, filename = dlg.GetDirectory(), dlg.GetFilename()
            self.filePath = '/'.join((directory, filename))
            self.urlFld.LoadFile(self.filePath)
            self.myList = self.urlFld.GetValue().split('\n')
于 2013-04-16T12:24:37.250 に答える