2013-08-06 12 views
0

나는 운 좋게도 풀 수없는 정말 이상한 문제가 있습니다.데이터를 처리하는 동안 wxpython textctrl이 사라짐

내 프로그램은 메인 프레임, 메뉴 모음으로 구성되어 있으며 메뉴 모음 바로 아래에 상태 표시 줄 아래의 읽기 전용 모드로 된 텍스트 컨트롤이 있습니다.

내 주요 클래스에는 여러 가지 기능이 있는데 그 중 하나가 아래에 나와 있습니다. 메뉴 이벤트에서 해당 메뉴 이벤트와 연관된 함수가 호출됩니다. 아래의 함수는 textctrl에 처리 될 파일의 ​​이름을 인쇄해야합니다. 그런 다음 파일을 처리해야합니다. 그런 다음 textctrl에 인쇄 할 다음 파일로 이동 한 다음 해당 파일을 처리합니다.

대신 텍스트 상자 &은 모든 파일이 처리되는 동안 상태 표시 줄이 완전히 사라집니다. 처리가 끝나면 모든 텍스트가 인쇄 된 상태로 다시 나타납니다.

왜 사라지는 지 잘 모르겠습니다. 함수 내에서 코드를 여러 가지 방법으로 이동하여 &이 문제를 해결하려고 시도했지만 아무 소용이 없습니다.

도움을 주시면 감사하겠습니다.

은 --- 편집 --- 코드는 어떤 일이 일어나고 것은 프로세스가 작업을 수행하고 있음을이고 그래서 새로 고치려면 GUI에 대한주기를 포기하지 않는 것처럼

답변

1

는 소리 제거되었습니다.

바쁜 프로세스를 자체 스레드로 옮기면됩니다.

당신은

import threading 

class Encrypt(threading.Thread): 
    def __init__(self, threadNum, asset, window): 
     threading.Thread.__init__(self) 
     self.threadNum = threadNum 
     self.window = window 
     self.signal = True 

    def run(self): 
     while self.signal: 
      do_stuff_that_is_cpu_intensive 
      for self.path in self.paths: #etc.. 

추천하고 메인 wx.Frame 클래스에서 뭔가를하고 싶은 것 : http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/

+1

안녕 multiphrenic :

class Frame(wx.Frame): def __init__(self, *args, **kwargs): super(Frame, self).__init__(*args, **kwargs) self.InitUI() self.Show() self.count = 0 # simple thread counter. self.threads = [] # this lets you iterate over your threads if you ever need to def OnEncrypt(self): self.count += 1 thread = Encrypt(self.count, asset, self) self.threads.append(thread) thread.start() 

여기에 훨씬 더 상세한 방법과 설명을 참조하십시오 고마워. 그것은 내 문제를 해결하기 위해해야 ​​할 일인 것처럼 보입니다. 나는 다음날에 이것을 가지고 놀 것입니다. 나는 아직 프로그래밍과 파이썬에 새로운 것이므로 잠시 걸릴 수도있다. 클린턴. –

+0

걱정하지 마라, 나는 오래 전에 당신과 같은 보트에 있었다. 그것은 곧 충분히 이해 될 것입니다. – pedram