2010-08-15 8 views
0

중첩 된 상자 레이아웃 내부에 여러 줄로 된 textctrl을 포함하는 XRC를 사용하여 디자인 된 wxpython 앱이 있습니다.비정상적으로 종료되는 Wxpython 앱

내가이 앱은 잘 처음 실행

thread.start_new_thread(self.longtask,()) 

다음 코드를 사용하여 별도의 스레드에서 longtask 방법 내부 SetValue를()를 사용하여 텍스트 컨트롤 (웹에서 검색) 텍스트를 추가 해요 두 번 시도 (텍스트가 올바르게 추가됨)하지만 약 3 ~ 4 회 후에 세그먼테이션 결함 및 경고와 함께 종료됩니다.

(python:3341): Gtk-WARNING **: unable to find signal handler for object(GtkEntry:0x9ed89e0) with func(0x837600) and data(0x9e19c08) 

왜 이런 일이 일어나는 지 알고 어떻게 고칠 수 있습니까? 나는 Ubuntu 10.2에서 Python2.6을 실행 중입니다.

미리 감사드립니다.

답변

2

다른 스레드에서 GUI 요소의 메서드를 직접 호출하는 것은 위험합니다. 코드를 너무 많이 사용하지 않으면 강력한 멀티 스레드 디자인을 고려하는 것이 좋습니다. 예를 들어 Queue 개체를 사용하여 스레드간에 데이터를 전달할 수 있습니다. 또는 wx의 이벤트를 사용하십시오.

Here's a nice article 그리고는 related SO discussion입니다. Google for more ('wxpython thread')

+0

안녕하세요, 귀하의 답변에 감사드립니다. 모든 UI 처리 코드를 별도의 메서드에두고 wx.CallAfter()를 사용하여 호출하면 문제가 해결되었습니다. 처음에는 대기열을 사용해 보았지만 작동시키지 못했습니다. wx.CallAfter()를 통한 통신에 대기열을 사용하면 어떤 이점이 있습니까? – jimbo

+0

@jimbo : IIRC 내가 언급 한 기사에서 이러한 옵션을 논의하고 비교합니다. –

+0

네,하지만 논의 된 내용은 다른 옵션보다 한 가지 옵션을 선택하는 이유를 말하지 않습니다. 어쨌든, 네 말이 맞아, 내 현재 애플 리케이션에 문제가되지 않을거야. – jimbo

관련 문제