1. 시험환경
· python v3.7.2 (64 bit)
· wxPython
2. 목적
· pip를 이용하여 wxPython 라이브러리를 설치한다.
· wxPython 윈도우/속성/메뉴 생성 등 기본 사용법을 알아보자.
3. 적용
① pip를 이용하여 wxPython 라이브러리를 설치한다.
- pip 업데이트를 진행한다: pip -m pip install -upgrade pip
- wxPython 라이브러리를 설치한다: pip install wxPython
- 정상 설치 여부를 확인한다: python 프롬프트에서 import wx 실행
② wx.Frame을 이용한 Window 생성 예제
- 파일명: 01_wxFrame_basic.py
1
2
3
4
5
6
7
8
9
|
import wx
app = wx.App()
frame = wx.Frame(None, -1, "Hello World!")
frame.Show()
app.MainLoop()
|
cs |
- 결과) “Hello World!”라는 title을 갖는 window 생성
③ wx.Frame 속성을 적용한 Window 생성
- 파일명: 02_wxFrame_setting.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import wx
# SetSize(width, height) : wx.Frame의 “가로 x 세로” 크기 설정
# SetBackgroundColour(“color”) : wx.Frame 배경색 설정
# CreateStatusBar() : 상태 표시줄 설정
# Centre() : 화면 가운데 위치로 윈도우 이동
# Move(wx.Point point) : 설정값 위치로 윈도우 이동
# MoveXY(int x, int y) : 설정 좌표로 윈도우 이동
# SetPosition(wx.Point point) : 윈도우의 위치 설정
# SetDimensions(x, y, width, height, sizeFlags) : 윈도우의 위치와 크기 설정
class WxFrame_Setting(wx.Frame):
def __init__(self, parent, title):
super().__init__(parent, title = title)
self.SetSize(600, 400)
self.SetBackgroundColour("gray")
self.CreateStatusBar()
self.Centre()
self.Show()
if __name__ == "__main__":
app = wx.App()
WxFrame_Setting(None, title = "wx.Frame Setting")
app.MainLoop()
|
cs |
- 결과) 설정이 반영된 윈도우 화면
④ wx.Menu 속성을 이용한 메뉴 구성 예제
- 파일명: 03_menu_setting.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
import wx
# wx.MenuBar : wx.Frame 상단에 위치한 메뉴를 구성하는 Bar
# wx.Menu : 메뉴에 기본적으로 나타나는 항목
# wx.MenuItem : wx.Menu 클릭시 나타나는 메뉴 항목
class wxMenu_setting(wx.Frame):
def __init__(self, parent, title):
super().__init__(parent, title = title)
self.SetSize(600, 400)
self.SetBackgroundColour("gray")
self.CreateStatusBar()
self.Centre()
menu = wx.Menu()
menu.Append(wx.ID_ABOUT, "About", "description_1 in status bar")
menu.AppendSeparator()
Exit_ = menu.Append(wx.ID_EXIT, "Exit\tCtrl+E", "description_2 in status bar")
self.Bind(wx.EVT_MENU, self.evt_exit_click, Exit_)
menuBar = wx.MenuBar()
menuBar.Append(menu, "&File")
self.SetMenuBar(menuBar)
self.Show()
# binding function
def evt_exit_click(self, e):
self.Close()
if __name__ == "__main__":
app = wx.App()
wxMenu_setting(None, "wx.Menu setting")
app.MainLoop()
|
cs |
- 결과) 설정 메뉴 확인 및 <Alt>를 누르면 코드에서 지정한 단축키가 밑줄로 표시
⑤ Sub Menu 구성 예제
- 파일명: 04_wxMenu_SubMenu_setting.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
import wx
# 동일한 서브메뉴를 구성하는 항목들은 동일한 ID로 설정해야 한다.
class wxMenu_SubMenu_setting(wx.Frame):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.createWidget()
def createWidget(self):
menu = wx.Menu()
menu.Append(wx.ID_NEW, "&New")
menu.Append(wx.ID_OPEN, "&Open")
menu.Append(wx.ID_SAVE, "&Save")
menu.AppendSeparator()
subMenu = wx.Menu()
subMenu.Append(wx.ID_ANY, "Import File")
subMenu.Append(wx.ID_ANY, "Import Image")
subMenu.Append(wx.ID_ANY, "Export File")
menu.Append(wx.ID_ANY, "Import/Export", subMenu)
Exit_ = menu.Append(wx.ID_EXIT, "&Exit")
self.Bind(wx.EVT_MENU, self.evt_exit_click, Exit_)
menuBar = wx.MenuBar()
menuBar.Append(menu, "&Menu1")
self.SetMenuBar(menuBar)
self.Show(True)
def evt_exit_click(self, e):
self.Close()
if __name__ == "__main__":
app = wx.App()
wxMenu_SubMenu_setting(None)
app.MainLoop()
|
cs |
- 결과) 메뉴 및 서브메뉴 구성 확인
⑥ Check Menu 구성 예제
- 파일명: 05_wxMenu_Check_setting.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
import wx
# menu item 생성시 wx.ITEM_CHECK 속성을 이용하여 check menu로 설정
class wxMenu_Check_setting(wx.Frame):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.createWidget()
def createWidget(self):
menuBar = wx.MenuBar()
# 1. File Menu
m_file = wx.Menu()
menuBar.Append(m_file, "&File")
# 2. View Menu
m_view = wx.Menu()
# kind: Menu Type parameter
# wx.ITEM_NORMAL(default), wx.ITEM_CHECK(check menu)
self.show_tb = m_view.Append(wx.ID_ANY, "툴바 보기", "툴바 ON/OFF", kind = wx.ITEM_CHECK)
self.show_sb = m_view.Append(wx.ID_ANY, "상태바 보기", "상태바 ON/OFF", kind = wx.ITEM_CHECK)
# Default Set : ToolBar(Checked), StatusBar(Checked)
m_view.Check(self.show_tb.GetId(), True)
m_view.Check(self.show_sb.GetId(), True)
# Binding event function
self.Bind(wx.EVT_MENU, self.toolbar_click, self.show_tb)
self.Bind(wx.EVT_MENU, self.statusbar_click, self.show_sb)
menuBar.Append(m_view, "&View")
self.SetMenuBar(menuBar)
self.toolbar = self.CreateToolBar()
self.statusBar = self.CreateStatusBar()
self.statusBar.SetStatusText("Ready")
self.Show(True)
def toolbar_click(self, e):
if self.show_tb.IsChecked():
self.toolbar.Show()
else:
self.toolbar.Hide()
def statusbar_click(self, e):
if self.show_sb.IsChecked():
self.statusBar.Show()
else:
self.statusBar.Hide()
if __name__ == "__main__":
app = wx.App()
wxMenu_Check_setting(None)
app.MainLoop()
|
cs |
- 결과) 체크 메뉴 선택에 따른 툴바 및 상태바 ON/OFF 기능
⑦ Pop-Up Menu 예제
- 파일명: 07_wxMenu_PopUp_setting.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
import wx
# MenuItem 클래스를 이용한 Pop-Up Menu 구성
class PopupMenu_setting(wx.Menu):
def __init__(self, parent):
super().__init__()
self.parent = parent
m_minimize = wx.MenuItem(self, wx.NewId(), "최소화")
self.Append(m_minimize)
self.Bind(wx.EVT_MENU, self.exec_minimize_func, m_minimize)
m_exit = wx.MenuItem(self, wx.NewId(), "종료")
self.Append(m_exit)
self.Bind(wx.EVT_MENU, self.exec_exit_func, m_exit)
def exec_minimize_func(self, e):
self.parent.Iconize()
def exec_exit_func(self, e):
self.parent.Close()
class WinFrame(wx.Frame):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.createWidget()
def createWidget(self):
# 1. Event : right click on mouse
self.Bind(wx.EVT_RIGHT_DOWN, self.exec_right_down_func)
self.Show(True)
# Binding Function
def exec_right_down_func(self, e):
# 2. get the position(x, y) on the screen and show your definded popoup menu
self.PopupMenu(PopupMenu_setting(self), e.GetPosition())
def main():
app = wx.App()
WinFrame(None)
app.MainLoop()
if __name__ == "__main__":
WinFrame.main()
|
cs |
- 결과) 마우스 우클릭시 나타나는 팝업 메뉴 구성 및 기능 확인
⑧ ToolBar 및 Icon 구성 예제
- 파일명: 08_Toolbar_Icon_setting.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import wx
class Toolbar_Icon_setting(wx.Frame):
def __init__(self, *args, **kw):
super().__init__(*args, **kw)
self.createWidget()
def createWidget(self):
# Create a ToolBar in wx.Frame
# CreateToolBar()를 이용하여 생성된 ToolBar에 Icon 이미지 및 기능 추가
tb = self.CreateToolBar()
# Insert icon image into the ToolBar
Exit_ = tb.AddTool(wx.ID_ANY, "Exit", wx.Bitmap("icon_image/icon_01.jpg"))
self.Bind(wx.EVT_TOOL, self.exec_exit_func, Exit_)
# essential code to show icon image for Win/Mac
tb.Realize()
self.Show(True)
def exec_exit_func(self, e):
self.Close()
if __name__ == "__main__":
app = wx.App()
app.locale = wx.Locale(wx.LANGUAGE_ENGLISH)
Toolbar_Icon_setting(None)
app.MainLoop()
|
cs |
- 결과) ToolBar에 추가된 Icon 이미지 및 기능 확인
⑨ Multiple ToolBar 및 Icon 예제
- 파일명: 09_Toolbar_Multiple_setting.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
import wx
# 여러 개의 ToolBar를 사용하여 wx.Frame에 배치하는 경우, 겹쳐서 표현되는 문제를 해결해야 함
# wx.BoxSizer(wx.VERTICAL|wx.HORIZONTAL) : wx.Frame을 구획
# Add(ToolBar 객체, 구획비율, wx.EXPAND) : WindowFrame에 설정값으로 ToolBar 추가
class Toolbar_Multiple_setting(wx.Frame):
def __init__(self, *args, **kw):
super().__init__(*args, **kw)
self.createWidget()
def createWidget(self):
# Use wx.ToolBar() instread of wx.CreateToolBar() to create Multiple ToolBar
tb1 = wx.ToolBar(self)
tb1.AddTool(wx.ID_ANY, "New", wx.Bitmap("icon_image/new.png"))
tb1.AddTool(wx.ID_ANY, "Open", wx.Bitmap("icon_image/open.png"))
tb1.AddTool(wx.ID_ANY, "Save", wx.Bitmap("icon_image/save.png"))
tb1.Realize()
# Use wx.ToolBar() instread of wx.CreateToolBar() to create Multiple ToolBar
tb2 = wx.ToolBar(self)
Exit_ = tb2.AddTool(wx.ID_ANY, "Exit", wx.Bitmap("icon_image/icon_01.jpg"))
self.Bind(wx.EVT_TOOL, self.exec_exit_func, Exit_)
tb2.Realize()
# Set horizontal position of ToolBars in wx.Frame
hBox = wx.BoxSizer(wx.HORIZONTAL)
hBox.Add(tb1, 2, wx.EXPAND)
hBox.Add(tb2, 1, wx.EXPAND)
self.SetSizer(hBox)
'''
# Set vertical position of ToolBars in wx.Frame
vBox = wx.BoxSizer(wx.VERTICAL)
vBox.Add(tb1, 0, wx.EXPAND)
vBox.Add(tb2, 0, wx.EXPAND)
self.SetSizer(vBox)
'''
self.Show(True)
def exec_exit_func(self, e):
self.Close()
if __name__ == "__main__":
app = wx.App()
app.locale = wx.Locale(wx.LANGUAGE_ENGLISH)
Toolbar_Multiple_setting(None)
app.MainLoop()
|
cs |
- 결과) wx.HORIZONTAL/wx.VERTICAL 및 구획비율을 변경하며 테스트
⑩ ToolBar의 아이콘(버튼) 활성/비활성 제어
- 파일명: 10_Toolbar_icon_active_nonactive.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
import wx
# EnableTool(“object ID”, True | False)
class Toolbar_icon_Act_NonAct(wx.Frame):
def __init__(self, *args, **kw):
super().__init__(*args, **kw)
self.createWidget()
def createWidget(self):
self.count = 5
self.toolbar = self.CreateToolBar()
toolbar_undo = self.toolbar.AddTool(wx.ID_UNDO, 'undo', wx.Bitmap('icon_image/undo.png'))
toolbar_redo = self.toolbar.AddTool(wx.ID_REDO, 'redo', wx.Bitmap('icon_image/redo.png'))
self.toolbar.AddSeparator()
toolbar_exit = self.toolbar.AddTool(wx.ID_EXIT, 'exit', wx.Bitmap('icon_image/exit.png'))
self.Bind(wx.EVT_TOOL, self.onUndo, toolbar_undo)
self.Bind(wx.EVT_TOOL, self.onRedo, toolbar_redo)
self.Bind(wx.EVT_TOOL, self.onExit, toolbar_exit)
self.toolbar.Realize()
self.Show(True)
def onUndo(self, e):
if self.count > 1 and self.count <= 5:
self.count -= 1
elif self.count == 1:
self.toolbar.EnableTool(wx.ID_UNDO, False)
elif self.count == 4:
self.toolbar.EnableTool(wx.ID_REDO, True)
def onRedo(self, e):
if self.count >= 1 and self.count < 5:
self.count += 1
elif self.count == 5:
self.toolbar.EnableTool(wx.ID_REDO, False)
elif self.count == 2:
self.toolbar.EnableTool(wx.ID_UNDO, True)
def onExit(self, e):
self.Close()
if __name__ == "__main__":
app = wx.App()
app.locale = wx.Locale(wx.LANGUAGE_ENGLISH)
Toolbar_icon_Act_NonAct(None)
app.MainLoop()
|
cs |
- 결과) ToolBar 버튼 활성화/비활성화
4. 결과
· 소스코드 파일첨부
'파이썬' 카테고리의 다른 글
numpy 사용법 기초 (2/2) (6) | 2024.09.07 |
---|---|
numpy 사용법 기초 (1/2) (2) | 2024.09.07 |
우분투(Ubuntu) 환경에서 파이썬 설치 매뉴얼 문서(word) (0) | 2024.06.12 |
python 가상환경 다루기 (venv) (0) | 2023.08.15 |
Window 파이썬(python) 설치하기 (0) | 2023.07.10 |