wxPython
파이썬 GUI, 그리드사이저 wx.GridSizer
wx.Factory
2023. 2. 26. 12:46
반응형
개요
그리드사이저(wx.GridSizer)는 내부에 배열된 위젯들의 크기가 모두 동일한 2차원 바둑판 배열의 컨테이너이다. 그리드 사이저에 버튼을 나열하고 랜덤으로 버튼 배경색을 바꾸는 예제를 수행해보자.
wx.GridSizer
그리드 사이저(wx.GridSizer)를 선언하는 방법은 아래와 같이 네 가지가 있다. 선언이 직관적이어서 별도의 설명은 생략하겠다.
GridSizer(cols, vgap, hgap)
GridSizer(cols, gap=Size(0,0))
GridSizer(rows, cols, vgap, hgap)
GridSizer(rows, cols, gap)
rows: 행의 수
cols: 열의 수
vgap: 수직 간격
hgap: 수평 간격
gap: 수직, 수평 간격 모두
예제
아래 예제는 5x5 그리드 사이저 생성 후 상하좌우 간격을 10으로 설정하고 25개의 버튼을 순서대로 배치하는 예제이다. 배치된 버튼은 self.grid.Children.Window 속성으로 소환할 수 있다.
반응형
import wx
import random
class GridSizerExample(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self,parent,id,'GridSizerExample Window', size=(400,300))
panel=wx.Panel(self)
# 그리드 사이저 (rows, cols, vgap, hgap)
self.grid = wx.GridSizer(5,5,10,10)
for i in range(5):
for j in range(5):
# 버튼 25개 생성 (5 x 5)
btn = wx.Button(panel,-1,"("+str(i+1)+","+str(j+1)+")")
# 각 버튼을 그리드 사이저에 할당
self.grid.Add(btn, flag=wx.EXPAND)
# 패널에 그리드 사이저 할당
panel.SetSizer(self.grid)
# 랜덤으로 1개 지정하여 색 변경
for i in range(1000):
wx.CallLater(i*100,self.SetColor)
# 버튼 색상 변경
def SetColor(self):
# 랜덤 정수 생성 (0~24)
rand = random.randint(0,24)
# 그리드 사이저에 속한 자식 오브젝트 중 rand 번째 아이템(버튼) 소환
item = self.grid.Children[rand].Window
# 해당 버튼 색상 변경 (회색 <-> 빨간색)
if item.GetBackgroundColour()==wx.RED:
item.SetBackgroundColour((240, 240, 240, 255))
else:
item.SetBackgroundColour(wx.RED)
if __name__=="__main__":
app = wx.App()
frame=GridSizerExample(parent=None, id=-1)
frame.Show()
frame.Center()
app.MainLoop()
도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :)
반응형