개발/PYTHON

파이썬 Python GUI 프로그램 제작도구 Wxpython 설치 및 시작

Aireee 2022. 10. 4. 21:50
300x250
반응형

파이썬으로 GUI 프로그램 제작을 위한 도구는 몇가지가 있습니다. 제가 아는건 tkinter, pyqt, wxpython 정도 뿐입니다만.. 그 중에 개인적으로 제일 마음에 드는 건 wxpython 입니다. pyqt 는 언젠가 찾아보니까 배포판에 유료라는 말을 본적이 있기도 하고, tkinter 는 마이크로 프로젝트용이다라는 말을 들어서이죠. 뭐 그렇다고 제가 그 2가지를 아주 정확히 잘 아는 것은 아니지만요. wxpython 은 LGPL 라이센스라고 해요

설치

당연한 것이지만, 모든지 사용하려면 설치가 시작입니다. 사용환경에 따라 pip 또는 pip3 를 이용해서 설치할 수 있습니다. 아래는 설치명령어입니다. 사실 모든 설치는 방식이 똑같아서 같은말 계속하는 느낌이네요!

pip install wxpython

사용

설치했다면 사용해야겠죠?

import wx

class Hello(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, parent=None, title="Hello")
     
if __name__ == "__main__":
    app = wx.App()
    frame = Hello()
    frame.Show()
    
    app.MainLoop()

보시면 아시겠지만, "import wx" 라는 명령어를 통해서 wxpython 을 사용하겠다고 데이터를 연결하는 겁니다. 

그리고 class Hello(wx.Frame) 이라는 부분은 Hello 라는 이름의 클래스를 만드는데, 이 클래스의 유형이 wx 에서 정의한 Frame 이라는 유형이다라고 말하는 거에요. 프레임은 모두 아시듯이 액자틀 같은 걸 말하잖아요. 전체적인 화면에 표시를 해주는 그런 틀을 가진 판을 생성한다정도로 보시면 좋을 것 같아요. 

솔직히 아직 def __init__(self) 에 대해선 완벽히 이해하진 못하고 있어요. def 은 함수를 만들어주는 것이고 __init__ 은 명령하지 않아도 시작되는 모 그런부분? 그런 의미처럼 초기화하는 거라고 보면 좋을것 같아요. 즉 Hello 라는게 불려지면 자동으로 init 아래 내용이 실행된다 뭐 그런거 같습니다.  

그래서 Hello 클래스가 실행되면 wx.Frame.__init__(self, parent=None, title="hello") 가 실행되는데 여기서 title 은 hello 즉 wx가 정의한 Frame 이라는 것의 이름이 hello 라는 것이고 parent 즉 부모는 None 이니까 없다 그러니까 최상위에 존재하는 프레임이다 뭐 그런의미. 그런걸 실행하라는 명령어겠지요? 

if __name__ == "__name__" 이 부분도 사실 별로 이해가 잘 안되는 부분이긴 한데, == 를 기준으로 왼쪽과 오른쪽이 같다면 실행하라인데.. 딱 봐도 똑같아요. 그러니 프로그램이 실행되면 가장 먼저 첫번째 줄을 실행하고 if 줄아래의 내용을 실행하게 되는 거에요. 

여기서 app 이라는 변수에 wx에서 정의한 App() 함수를 실행하고

frame 이라는 변수에는 클래스 Hello 를 넣어준뒤 
frame.Show() 명령을 통해 frame 이 보이게 만들어 준다는 명령이에요

그리고 마지막 app.MainLoop() 는 app 변수를 메인루프함수로 계속 실행해라 뭐 이런건데 그냥 이게 있어야 프로그램이 종료되지 않고 계속 돈다고 생각하면 되는 그냥 필수 명령어다라고 생각하면 됩니다. 

만약 hello 클래스가 아닌 새로운 프레임을 실행시키려 한다면 frame 을 닫거나 숨긴 뒤 frame 에 새로운 프레임 클래스를 적용하고 show() 를 해주면 될것 같다는 생각이 들어요. 

마찬가지로 frame 내부에도 또 다른 프레임 클래스를 만들어서 넣을 수도 있을 것 같고... 메뉴도 만들 수 있을 것 같고..

이런식으로 하나의 프로그램을 완성할 수도 있겠다 싶은데.... 

그 부분들은 이제 다시 공부를 해봐야 한답니다!!!! 

공부하고 알려드리겠습니다. 

반응형