본문 바로가기

wxPython

파이썬 GUI, 그리드사이저 wx.GridSizer

반응형

 

개요 

    그리드사이저(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()

 

 

 

 

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

 

반응형