2014-12-05 5 views
0

wxListBox의 텍스트를 텍스트 파일에 쓰려면 wxFormBuilder 인터페이스를 프로그래밍하려고합니다. 현재 코드 :wxListBox 항목을 파이썬의 .txt 파일에 쓰는 방법

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로 가져 오는 데 문제가 있습니다. 내가 가지고있는 코드로, 나는 "형식 오류를 : 문자열 또는 유니 코드 유형이 필요합니다"지고있어 오류 :

for i in range(self.m_listBox4.GetCount()): 
    listBox = self.m_listBox4.GetString(i) + "\n" 

당신은 항상 목록 상자 변수의 내용을 덮어에서

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

따라서 만

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) 

이 행은 문자열 또는 유니 코드,하지만 순서가 아닙니다. 이 시퀀스를 목록에 넣고 나중에 목록 상자에 추가하려고합니다. 변경

self.m_listBox4.Append(str(rows)) 

변경 사항을 확인하십시오.

+0

안녕하세요 Petr 님, 저의 저장 기능이 완벽하게 작동하므로 그 점에 대해 감사드립니다.
open 함수는 목록을 가져 오지만 각 줄은 대괄호와 인용 부호로 묶습니다.
이 [ "1 호선"] [ "3 호선"] [ "라인 2"] 원본 텍스트 문서에서이 같이 나타납니다 동안 : 1 호선 2 호선 라인 그래서 업로드 목록과 같이 보입니다 3 이 문제를 해결하기 위해 슬라이싱을 사용할 수 있습니까? –

+0

글쎄, csv 리더로 읽는다면, 당신은 튜플을 받고 문자열로 변환하면 [ "something"], ... 문자열 만 원한다면 csv.reader로 읽지 마라. , 그냥 : for fh.readlines() : ... 데이터 읽기를 유지할 필요가 없다면 읽기와 같은 주기로 목록 삽입을 수행하십시오. –

+0

잭팟! 너 락, 고마워! –

관련 문제