2011-02-03 5 views
0

wx.ListView 상자에 lvActions라는 이름의 데이터를 추가하여외부 로그 파일에 wx.ListView 상자의 내용을 출력하는 방법

와 비슷한 코드를 사용합니다.

내가 원하는 것은 내 작업이 모두 끝나고 목록이있을 때 출력하고 싶습니다. 이 파일의 전체 내용을 로그 파일에 저장합니다. 이것은 어떻게 했는가

logfile = open(logFullPath, "a") 
for events in self.lvActions: 
    logfile.write(events) 
logfile.close() 

내가 돌아 오는 오류는

입니다.
TypeError: 'ListView' object is not iterable 

ListView가 반복 가능하지 않은 경우 어떻게 파일의 내용을 덤프 할 수 있습니까?

+0

목록에 단 하나의 열만 있습니까? –

답변

1

지적한대로 목록보기 자체는 원하는대로 반복 할 수 없습니다. 대부분의 wx 위젯과 마찬가지로 위젯의 항목 수를 얻은 다음 해당 위치의 항목 텍스트를 요청해야합니다. 당신이 (listctrl에서 파생) 목록보기로 작업하기 때문에, 각 열 개별적으로

logfile = open(logFullPath, "a") 
for event in xrange(self.lvActions.GetItemCount()): 
    date = self.lvActions.GetItem(event, 0).GetText()  # item in column 0 
    filename = self.lvActions.GetItem(event, 1).GetText() # col 1, etc 
    action = self.lvActions.GetItem(event, 2).GetText() 
    logfile.write("{0}, {1}, {2}\n".format(date, filename, action) 

logfile.close() 

를 GetItem() 해당 행/열에서 데이터를 나타내는을 ListItem 개체를 반환에 대한 텍스트를 얻을 수있을 것이다. 그런 다음 GetText() 메서드를 사용하여 해당 항목 개체에서 텍스트를 가져옵니다. 또한 적절하게 오류를 추가해야합니다. 또한 하드 코딩 된 열 이름 (입력 내용을 기반으로)을 사용했습니다. 적절하게 조정해야합니다.

+0

'logfile.close()'의 필요성을 피할 수 있고 이것을'with' 블록 안에 넣으면 예외 처리를 할 수 있습니다 :'open (logFullPath, "a") as logfile : – Velociraptors

+0

감사합니다. – ccwhite1

관련 문제