
개요
위젯의 수가 증가함에 따라 위젯이 서로 상대적으로 정렬되는 방식이 중요해집니다. wxPython에는 위젯을 배치하는 데 도움이 되는 클래스가 있습니다. 컨테이너그것은이라고. 용기에 BoxSizer(wx.BoxSizer)옆에 GridSizer(wx.GridSizer), FlexGridSizer(wx.FlexGridSizer) 이 기사에서는 가장 간단한 컨테이너인 박스 사이저에 대해 알아봅니다.
BoxSizer와 함께
BoxSizer(wx.BoxSizer)가장 간단한 컨테이너입니다. 원래 수평 배열수업 수직의 둘 다 지원합니다. 이를 사용하려면 이름을 지정하고 아래와 같이 Box Sizer 유형을 선언합니다.
hsizer = wx.BoxSizer(wx.HORIZONTAL)
생성된 박스 크기 측정기 객체에. .에 추가() 메서드를 통해 각 위젯을 차례로 넣을 수 있습니다. Add() 메서드의 인수는 다음과 같습니다.
hsizer.Add(widget, proportion=0, flag=wx.EXPAND, border=5)
위젯: 박스 사이저에 포함될 위젯 인스턴스입니다.
부분: 상자 크기 조정기에서 위젯 크기의 백분율입니다. sizer가 HORIZONTAL 배열이면 위젯의 가로 방향 전체 길이의 비율을 의미하고, VERTICAL이면 세로 방향 전체 길이에 대한 위젯의 세로 길이의 비율을 의미합니다. 비율 = 0이면 위젯의 크기 비율을 늘리거나 줄이지 않고 위젯 자체의 크기를 사용한다는 의미입니다. 예를 들어 세부 사항을 확인합시다.
깃발: Box sizer 위젯의 테두리 너비가 적용되는 영역(wx.LEFT, wx.RIGHT, wx.UP, wx.DOWN), 프레임 크기가 조정되면 그에 따라 위젯 크기를 조정하는 wx.EXPAND를 설정할 수 있습니다.
국경: 위젯 테두리와 박스 사이저 사이의 두께입니다.
예
상자 크기 측정기에 버튼이 추가될 때마다 어떻게 변경되는지 살펴보겠습니다. 버튼의 수가 증가할수록 버튼의 가로 크기 비율인 Proportion도 증가합니다.
import wx
class BoxSizerExample(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self,parent,id,'수직박스사이저에 위젯을 Add할 때...', size=(-1,-1))
self.panel = wx.Panel(self)
# 버튼 5개 생성
self.buttons = (wx.Button(self.panel, -1, "버튼"+str(i)) for i in range(5))
# 수평 박스사이저 생성
self.sizer = wx.BoxSizer(wx.HORIZONTAL)
# 박스사이저에 첫 번째 버튼 할당
# 2번째 인자 proportion은 박스사이저에서 위젯이 '수평방향'으로 차지하는 길이의 비율입니다
# for i in range(len(self.buttons)):
# self.sizer.Add(self.buttons(i), proportion=1+i, flag=wx.EXPAND, border=5)
# 패널에 박스사이저 할당
self.panel.SetSizer(self.sizer)
# 박스사이저 크기에 맞게 프레임 사이즈 조절
# self.sizer.Fit(self)
for i in range(len(self.buttons)):
# 1초에 1개씩 버튼 생성하여 수평박스사이저에 할당
wx.CallLater(1000*i, self.AddButton, i)
# 수평박스사이저에 1초에 1개씩 버튼 할당
# 수평박스사이저에 위젯을 Add하면 어떻게 변하는지 보세요!!
def AddButton(self,i):
self.sizer.Add(self.buttons(i), proportion=2+i, flag=wx.EXPAND, border=5)
self.sizer.Fit(self)
if __name__=="__main__":
app = wx.App()
frame=BoxSizerExample(parent=None, id=-1)
frame.Show()
frame.Center()
app.MainLoop()
도움이 되셨다면 하트() 부탁드리며, 기타 궁금한 사항은 댓글로 남겨주세요 🙂