반응형
개요
스태틱박스사이저(wx.StaticBoxSizer)는 본래 wxPython의 기본 컨테이너인 박스사이저(wx.BoxSizer)를 기반으로 만들어졌다. 단순히 박스사이저의 둘레에 경계선을 그리고 레이블을 추가한 위젯인데, 서로 같은 기능을 하는 위젯들끼리 하나로 묶어 보여줄 수 있어서 활용도가 높다. 예제는 스태틱박스사이저를 활용하여 텍스트파일을 여는 위젯을 구현하였다.
wx.StaticBoxSizer
스태틱박스사이저의 선언은 아래와 같이 세 줄이 필요하다. 첫째로 레이블(제목)이 있는 스태틱박스(wx.StaticBox)를 선언해야 하고, 둘째로 스태틱박스를 부모로 갖는 스태틱박스사이저(wx.StaticBoxSizer)를 선언한다. 그리고 마지막으로 스태틱박스사이저에 들어갈 위젯들을 .Add() 메소드로 넣어주면 끝이다.
sbox = wx.StaticBox(parent, -1, '제목 레이블')
sbox_sizer = wx.StaticBoxSizer(sbox, wx.HORIZONTAL)
sbox_sizer.Add(wx.Widget, proportion=1, flag= wx.ALL | wx.EXPAND, border=5)
Add메소드는 기존 박스사이저와 동일하게 사용 가능하다.
예제
간단히 텍스트파일을 여는 예제를 구현해보자.
반응형
import wx
import os
class StaticBoxSizerExample(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self,parent,id,'Example Window', size=(450,150), pos=(500,300))
panel = wx.Panel(self)
# 레이블이 있는 스태틱박스
sbox = wx.StaticBox(panel, -1, '파일열기:')
# 아이템을 담을 스태틱박스 사이저. 가로방향으로 아이템 배치.
sbox_sizer = wx.StaticBoxSizer(sbox, wx.HORIZONTAL)
# 스태틱박스사이저에 담을 아이템 생성 후 담기 (Add())
tc_address = wx.TextCtrl(panel, 100, "", size=(-1,-1))
btn_openfile = wx.Button(panel, -1, "열기", size=(80,-1))
sbox_sizer.Add(tc_address, 1, wx.ALL | wx.EXPAND, 5)
sbox_sizer.Add(btn_openfile, 0, wx.ALL | wx.EXPAND, 5)
# Textctrl은 파일경로가 표시될 위젯이므로 편집 불가로 설정
tc_address.SetEditable(False)
# 스태틱박스를 담을 박스사이저 생성
bsizer = wx.BoxSizer(wx.VERTICAL)
bsizer.Add(sbox_sizer, 0, wx.ALL|wx.EXPAND, 15)
panel.SetSizer(bsizer)
# 열기 버튼 이벤트 바인딩
self.Bind(wx.EVT_BUTTON, lambda e: self.OpenFile(e), btn_openfile)
# 버튼 클릭시 동작
def OpenFile(self, e):
# 파일 대화상자 : 텍스트 파일만 열기
with wx.FileDialog(self, "Open GIF file", wildcard="GIF file (*.gif)|*.gif",
style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog:
if fileDialog.ShowModal() == wx.ID_CANCEL:
return # 캔슬 누르면 그냥 종료
# OK누르면 파일경로 받아오기
pathname = fileDialog.GetPath()
# 아이디가 100인 위젯 찾기 (tc_address)
tc_address = wx.FindWindowById(100)
# TextCtrl에 파일 경로 표시하기
tc_address.SetValue(pathname)
try:
# 파일 열기
with open(pathname, 'r') as file:
# 파일의 모든 줄을 읽어옴
txt = file.readlines()
print() # 한 칸 띄고 출력
for line in txt:
# 텍스트파일 출력
print(line)
# 파일 읽기 에러 발생시
except IOError:
wx.LogError("파일을 열 수 없습니다. '%s'." % os.path.basename(pathname))
if __name__=="__main__":
app = wx.App()
frame=StaticBoxSizerExample(parent=None, id=-1)
frame.Show()
app.MainLoop()
도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :)
반응형
'wxPython' 카테고리의 다른 글
파이썬 GUI, 노트북, 탭 창 wx.Notebook (0) | 2023.03.19 |
---|---|
파이썬 GUI, 파일선택컨트롤 wx.FilePickerCtrl (0) | 2023.03.18 |
파이썬 GUI, 플렉시 그리드 사이저 wx.FlexiGridSizer (0) | 2023.03.12 |
파이썬 GUI, 다중 창 인터페이스 wx.MDIParentFrame (4) | 2023.03.11 |
파이썬 GUI, 기본 색상표 wx.ColourDatabase (0) | 2023.02.26 |