[Python] GUI 개발환경 wxpython 설치하기

2013. 12. 1. 22:502018년 이전 관심사/개발관련

반응형



GUI 개발환경 wxpython 설치하기



python을 경험하고 python의 매력이 빠지면서, python을 이용한 GUI Toolkit를 찾다가 wxpython을 알게 되었다. 본 포스팅에서는 wxpython을 설치하고 eclipse 환경에서 python으로 GUI 프로그램을 만들 수 있는 방법을 설명 합니다.


1. wxpython이란


wxpython이란 Python 프로그램 언어를 위한 GUI Tool Kit 이며, Open Source의 특성 상 누구나 제약 없이 Source를 공개 및 사용 할 수 있습니다. 제가 생각 할 때 wxpython의 가장 큰 장점은, cross platform을 지원 한다는 점입니다. cross platform을 지원 함으로써, 개발자는 하나의 source code로 Windows, Unix, Mac OS에서 동작하는 프로그램을 구현 할 수 있습니다.


2. wxpython 설치


wxpython은 아래 경로에서 다운로드 받을 수 있으며, 현재 사용하고 있는 OS에 맞춰 다운로드 후 실행 하시면 됩니다.

http://www.wxpython.org/download.php#stable


저는 64bit windows에 Python 2.7을 사용하는 관계로 wxPython2.8-win64-unicode-py27를 다운로드 하였습니다.



위 경로에서 설치 파일을 다운로드 하고 실행 하면 아래와 같은 화면이 출력 됩니다. 아래 그림과 같이 미리 설치 되어 있는 Python의 경로를 지정하면 Python에 wxPython Tool Kit을 설치 합니다.




3.Eclipse에서 wxpython 설정

wxpython의 설치가 완료 된 후, Eclipse를 실행 하면 Eclipse는 아래와 같이 wxPython이 설치 된 것을 감지 합니다. 아래와 같은 화면은 PyDev가 미리 설치 되어 있을 경우 나오는 화면 입니다. PyDev를 설치 하는 방법은 아래 주소를 참고 하시기 바랍니다. 


http://kaizen8501.tistory.com/entry/Eclipse%EC%97%90%EC%84%9C-Python-%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95-%ED%95%98%EA%B8%B0




또한 Eclipse에서 wxpython의 Library를 사용하기 위해서는 아래 화면과 같이 Forced Builtins에서 wx와 wxPython을 제거 해야 합니다.




4.예제

아래 예제는 wxpython에서 Hello World Frame을 만드는 간단한 예제 입니다.

import wx


app = wx.App(redirect=True)


top = wx.Frame(None, title="Hello World", size=(300,200))

top.Show()


app.MainLoop()


아래 예제는 위의 예제를 Class화 하여 작성한 예제 입니다.

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()


아래 예제는 위의 예제에서 Event를 사용한 예제 입니다.

import wx


class Frame(wx.Frame):

    def __init__ (self, title):

        wx.Frame.__init__(self, None, title=title, size=(350,200))

        self.Bind(wx.EVT_CLOSE, self.OnClose)

        

    def OnClose(self, event):

        dlg = wx.MessageDialog(self,

                               "Do you really want to close this application?",

                               "Confirm Exit", wx.OK | wx.CANCEL | wx.ICON_QUESTION)

        result = dlg.ShowModal()

        dlg.Destroy()

        if result == wx.ID_OK:

            self.Destroy()

            

app = wx.App(redirect=True)

top = Frame("Hello World")

top.Show()

app.MainLoop()



아래 예제는 위의 예제에서 Frame에 메뉴를 추가한 예제 입니다.

import wx


class Frame(wx.Frame):

    def __init__ (self, title):

        wx.Frame.__init__(self, None, title=title, size=(350,200))

        self.Bind(wx.EVT_CLOSE, self.OnClose)

        

        menuBar = wx.MenuBar()

        menu = wx.Menu()

        m_exit = menu.Append(wx.ID_EXIT, "Exit \tAlt-X", "Close window and exit program.")

        self.Bind(wx.EVT_MENU, self.OnClose, m_exit)

        menuBar.Append(menu,"&File")

        self.SetMenuBar(menuBar)

        

        self.StatusBar = self.CreateStatusBar()

        

        panel = wx.Panel(self)

        box = wx.BoxSizer(wx.VERTICAL)

        

        m_text = wx.StaticText(panel, -1, "Hello World!")

        m_text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD))

        m_text.SetSize(m_text.GetBestSize())

        box.Add(m_text, 0, wx.ALL, 10)


        m_close = wx.Button(panel, wx.ID_CLOSE, "Close")

        m_close.Bind(wx.EVT_BUTTON, self.OnClose)

        box.Add(m_close, 0, wx.ALL, 10)

        

        panel.SetSize(box)

        panel.Layout()

        

        

    def OnClose(self, event):

        dlg = wx.MessageDialog(self,

                               "Do you really want to close this application?",

                               "Confirm Exit", wx.OK | wx.CANCEL | wx.ICON_QUESTION)

        result = dlg.ShowModal()

        dlg.Destroy()

        if result == wx.ID_OK:

            self.Destroy()

            

app = wx.App(redirect=True)

top = Frame("Hello World")

top.Show()

app.MainLoop()



5.에러

wxpython으로 예제를 작성하면서 아래와 같은 에러가 발생 하였습니다.


importerror dll load failed 1 is not valid win32 application


열심히 구글링 한 결과, 64bit OS에서 python 혹은 wxpython이 32bit로 설치 되어 발생한 문제 였습니다. 제가 실수로 Python을 32bit로 설치 한 것 같습니다. 기존에 설치 되어 있는 Python을 지우고 64bit 용으로 다시 설치 하니 문제 없이 코드를 실행 할 수 있었습니다.


반응형