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()

 

 

 

 

    도움되셨다면 하트(♥) 부탁드리고, 더 궁금한 사항은 댓글로 남겨주세요 :) 

 

반응형