2016년 7월 14일 목요일
The wx.App object must be created first!
배경: Anaconda 의 Spider IDE 에서 wxPython 코드 연습
연습 코드:
에러 메시지: "The wx.App object must be created first!"
StackOverflow 에서 찾은 이유:
※ dedicated Python interpreter 설정 후
연습 코드:
import wx
class Frame(wx.Frame):
def __init__(self, title):
wx.Frame.__init__(self, None, title=title, size=(350,200))
app = wx.App(redirect=True)
top = Frame("Hello World")
top.Show()
app.MainLoop()
에러 메시지: "The wx.App object must be created first!"
StackOverflow 에서 찾은 이유:
I suspect it's because you are attempting to run the example in an interactive interpreter session. The example is really a GUI application with an event loop, and it's not going to behave well when you repeatedly execute it in the same interactive session since cleanup of the previous app from the last run won't happen completely. Like you experienced, it will run once, but subsequent attempts fail. Such an example should definitely be run in its own dedicated interpreter that can completely exit when the GUI closes.
In Spyder, you can configure your script to run in a dedicated stand-alone interpreter without having to manually run in a separate external console. Open the file in the Spyder editor, hit F6 to open the Run Settings dialog, and then select the radio button for "Execute in a new dedicated Python interpreter". Now hit Run. Subsequent runs by using F5 will remember this configuration setting, and you'll get your example running in it's own interpreter with each repeated execution.
아마 당신은 연습코드를 interactive interpreter session(대화형 인터프리터 세션, 상호작용이 가능한 상태) 에서 실행한 것 같다. 예제는 루프문을 도는 GUI 응용 프로그램이고, 재 시작을 했을 때는 이전 실행 했던 것들이 아직 남아있는 상태 였을 것이다. 경험했던 대로, 한번을 잘 돌지만 다시 돌릴 때는 실패한다. 이런 프로그램을 실행할 때는 그 프로그램 만을 위한 인터프리터를 사용해야 한다.
스파이더 에서는, 하나의 프로그램만을 위한 인터프리터에서 실행할 수 있다. 스파이더 에디터에서, F6를 누르면 셋팅 다이얼로그가 열린다. 그리고 거기서 "Execute in a new dedicated Python interpreter" 라디오 버튼을 선택하면 된다. 이제부터 실행하는 것들은 그 프로그램만을 위한 인터프리터를 실행할 수 있는 것이다.
※ 기본 설정
2016년 5월 3일 화요일
사용할 Python GUI 비교 및 선택하기
하나의 필요(python에서 어떤 GUI를 주로 사용할 것인가)가 생겨 고민 과정을 정리해 보았습니다. 정리를 해 놓아야. 왜 그런 생각을 했는지, 돌아볼 수 있기 때문입니다.
목적: Python에서 주로 사용할 GUI 선택
검토 자료
검색을 통해서 동영상, 여러 비교 웹페이지 들을 돌아 다녔고, 그 결론으로
1. 'stackoverflw' 의 한 질문과 답변 (링크)
2. wxPython과 PyQt 를 둘다 처음 사용해본 개발자 의견 (링크)
3. 동일한 고민을 하고 wxPython을 고른 분의 글 (링크)
개인적 요구 사항은
1. 사용성(짧은 시간에 결과 확인)
2. 범용성(어느 OS에서나 사용 가능)
3. PC에서 사용
이었습니다.
간략하게 정리하면
1. PyQt, pyGTK, wxPython 이 유명도 면에서 선정 대상이 되었고
2. 그중 pyGTK 가 범용성 면에서 점수가 낮아 먼저 탈락 되었습니다.
3. PyQt 와 wxPython 중 어떤 것을 선택하는지 문제인데,
위 검토자료의 2, 3 이 다른 의견을 주었습니다.
4. 하지만 2번의 개발자가 직접 두 라이브러리를 가지고 직접 동일한 GUI를 구현을 해 보았고 PyQt 가 1일 걸리는 일을 wxPython으로 일주일이 걸리고, 코드의 이해도도 PyQt 가 wxPython에 비해서 높다고 하였습니다.
결론은
PyQt 공부하기로 했습니다.
추가로
python korea 에 비슷한 질문이 있고, 답변이 좋아서 기록해 둡니다.
목적: Python에서 주로 사용할 GUI 선택
검토 자료
검색을 통해서 동영상, 여러 비교 웹페이지 들을 돌아 다녔고, 그 결론으로
1. 'stackoverflw' 의 한 질문과 답변 (링크)
2. wxPython과 PyQt 를 둘다 처음 사용해본 개발자 의견 (링크)
3. 동일한 고민을 하고 wxPython을 고른 분의 글 (링크)
개인적 요구 사항은
1. 사용성(짧은 시간에 결과 확인)
2. 범용성(어느 OS에서나 사용 가능)
3. PC에서 사용
이었습니다.
간략하게 정리하면
1. PyQt, pyGTK, wxPython 이 유명도 면에서 선정 대상이 되었고
2. 그중 pyGTK 가 범용성 면에서 점수가 낮아 먼저 탈락 되었습니다.
3. PyQt 와 wxPython 중 어떤 것을 선택하는지 문제인데,
위 검토자료의 2, 3 이 다른 의견을 주었습니다.
4. 하지만 2번의 개발자가 직접 두 라이브러리를 가지고 직접 동일한 GUI를 구현을 해 보았고 PyQt 가 1일 걸리는 일을 wxPython으로 일주일이 걸리고, 코드의 이해도도 PyQt 가 wxPython에 비해서 높다고 하였습니다.
결론은
PyQt 공부하기로 했습니다.
추가로
python korea 에 비슷한 질문이 있고, 답변이 좋아서 기록해 둡니다.
170925 update
- GUI 는 PyQt 를 사용하는게 제일 편합니다. 이유는 Designer Tool 때문
- GUI 를 구성할 때는 원하는 모습으로 만들 수 있어야 하는데 이 때 바탕의 배치(layout)를 잘 활용하고 각 Widget의 Minimum, Maximum 크기를 설정하고, Dock Widget 을 활용하면 가능합니다.
- 보통 버튼을 누르면 특정 동작을 진행해야 하는데 이 때 thread 를 사용해야 GUI 가 멈추지 않습니다. QThread를 활용 하는것이 편리해서(pyqtsignal) 저는 간단한 것만 사용했는데 내부에 bug가 많다는 글을 본적이 있어 신경쓰고 있습니다.
피드 구독하기:
글 (Atom)