1. Introduction
wxPython 기본 버튼 제어 연습.
2. Code
import wx
def runningJames(event):
print("쎠럽! 치킨 먹으로 달려가는 James! ^.^;")
jamesApp = wx.App()
jamesWindow = wx.Frame(parent=None, title="똔상씨, I Love U!", size=(640, 240))
jamesPanel = wx.Panel(parent=jamesWindow, pos=(40, 40), size=(200, 64))
jamesBtn1 = wx.Button(parent=jamesPanel, label="쎠럽!", pos=(40, 40), size=(120, 48))
jamesBtn1.Bind(wx.EVT_BUTTON, runningJames)
jamesBtn1 = wx.Button(parent=jamesPanel, label="쎠럽!", pos=(180, 40), size=(120, 48))
jamesBtn1.Bind(wx.EVT_BUTTON, runningJames)
jamesWindow.Show()
jamesApp.MainLoop()
3. Result

4. Notes
1) 다음 세 줄만으로도 하나의 앱을 만들 수 있습니다.
| wxPython 기본 앱 - 001 |
import wx jamesApp = wx.App() jamesApp.MainLoop() """ 코드 노트 : ...... """ |
jamesApp = wx.App()
# wx.App() 인스턴스를 하나 만듭니다. 앱 인스턴스. 앱 인스턴스가 하나는 반드시 있어야 합니다.
jamesApp.MainLoop()
# 일종의 무한 루프를 실행하면서 이벤트를 기다립니다. 프로그램이 완전히 종료될 때까지 계속 기다림.
2) 시각적으로 보이는 윈도우 추가
# 그런데 위 프로그램은 사실상 하는 일이 거의 없음. 심지어 눈에 보이지도 않음. 하지만 오류는 없는 초간단 앱... ㅡ.ㅡ;
# 자, 이제 눈에 보이도록 해 보자면, wx.Frame()을 사용해서 시각적 윈도우를 추가로 생성하면 됩니다.
| wxPython 기본 앱 - 002 |
# 위 코드에서 가운데 두 줄만 추가됨. import wx jamesApp = wx.App() jamesWindow = wx.Frame(parent=None, title="똔상씨, I Love U!", size=(640, 240)) jamesWindow.Show() jamesApp.MainLoop() """ 코드 노트 : ...... """ |
앱을 맨드는 것과 윈도우를 만드는 것을 구분해야 합니다.
- 앱 만들기 : jamesApp = wx.App()
- 윈도우 만들기 : jamesWindow = wx.Frame()
앱에는 작성 목적에 따라 눈에 보이는 윈도우가 없는 앱도 있습니다. 없어야만 하는 앱, 예를 들자면, 사용자 몰래 작동하는 나쁜 백그라운드 바이러스, 멜웨어, 스파이웨어, 트로이목마 등.. 각종 악성 코드들, 이들은 눈에 보이면 오히려 자신들에게 불리합니다. 그래서 숨어서 작동합니다. 보통은.
반면, 시각적으로 명백하게 보이는 윈도우를 생성하려면, 가장 기본적으로는, wx.Frame()을 사용하면 됩니다.
■ 형식
myWindow = wx.Frame(옵션들)
실제 사용예:
jamesWindow = wx.Frame(parent=None, title="똔상씨, I Love U!", size=(640, 240))
여기서 parent= None은 wx.Frame()으로 만든 윈도우가 최상위 윈도우임을 나타냅니다. jamesWindow는 그 윈도우의 이름에 해당됩니다.
title="똔상씨, I Love U!"는 해당 윈도우의 '제목', size=(640, 240)는 생성되는 윈도우의 가로 세로 크기를 나타냅니다. 가로 세로 크기는 한 쌍으로 의미가 있어서 괄호로 묶어서 하나의 덩어리 단위처럼 사용합니다. (참고. 튜플 자료형)
3) 패널 추가
| 패널 추가 |
jamesPanel = wx.Panel(parent=jamesWindow, pos=(40, 40), size=(200, 64)) """ 코드 노트 : ...... """ |
- 앱 안에 프레임, 프레임 안에 패널, 패널 안에 버튼. parent=... 부분만 수정하면 됩니다.
- wx.Frame()으로 생성한 Window에 직접 배치하는 것보다 패널과 같은 '컨테이너'를 활용해서 배치하는 것이 이후 좀 더 유리할 때가 많습니다. 그래서 패널 추가를 권장합니다.
4) 버튼 추가
| 버튼 추가 |
# 버튼 클릭시 실행될 함수 def runningJames(event): print("쎠럽! 치킨 먹으로 달려가는 James! ^.^;") # 버튼 생성 jamesBtn1 = wx.Button(parent=jamesPanel, label="쎠럽!", pos=(40, 40), size=(120, 48)) # 버튼 클릭 바인딩(여기서 바인딩은 버튼 클릭과 함수를 연결한다는 의미임.) jamesBtn1.Bind(wx.EVT_BUTTON, runningJames) """ 코드 노트 : ...... """ |
- 버튼을 생성하는 것은 wx.Button().
- 버튼은 생성하는 것만으로는 관련 작업이 완료된 것은 아닙니다.
- 바인딩을 설정해야 하고
- 바인딩된 함수를 만들어야 합니다. (참고. 이벤트 핸들러 함수)
- 특별히 event 매개변수를 빼먹지 않도록 주의해야 함.
- 시각적 위젯들과 바인딩으로 연결되는 모든 함수들에는 필수.
# 버튼 클릭시 실행될 함수, event 매개변수를 간과하지 않도록 주의해야 합니다.
def runningJames(event):
print("쎠럽! 치킨 먹으로 달려가는 James! ^.^;")
......
......
(계속..)
■ 응용 연습 과제
1) 랜덤 컬러링
2) 좌우 균형 맞추기
5. Files
Not yet! ^.^;
코드가 짧으니 일단 생략.
6. Ref.
Happy Programming!
^.^;