본문 바로가기

wxPython

파이썬 GUI, 스핀컨트롤 wx.SpinCtrl

반응형

 

개요 

    스핀컨트롤(wx.SpinCtrl)텍스트컨트롤(wx.TextCtrl)스핀버튼(wx.SpinButton)을 합쳐놓은 위젯이다. 위,아래 화살표를 눌러 숫자 값의 크기를 조절 할 수 있고, 본문에서는 입력된 숫자가 바뀌면 창 크기가 바뀌는 예제를 구현해본다. 

 

 

wx.SpinCtrl

    스핀컨트롤(wx.SpinCtrl) 선언은 아래와 같으며, style 값에서 키보드 화살표 키로 숫자를 올리고 내리는 기능이 있다. 

spin = wx.SpinCtrl(parent, id, value="", pos=wx.DefaultPosition,
                   size=wx.DefaultSize, style=0, min=0, max=100, initial=0,
                   name="wxSpinCtrl")

    parent: 스핀컨트롤 부모 클래스

    id: 위젯 id 이며 보통 -1로 자동설정한다. 

    value: 초기값 text string 이다. 

    pos: 위젯의 위치 (x,y) 좌표값이다.

    size: 위젯의 크기 (x,y) 값이다. 

    style: 위젯 스타일을 지정한다. wx.ALIGN_LEFT 등으로 위젯 안의 텍스트 정렬상태를 조절할 수 있고, wx.SP_ARROW_KEYS로 화살표 키를 눌렀을 때 값이 변경되는 기능도 구현할 수 있다. 

    min, max, initial: 각각 최소, 최대,  초기값이다. int형 정수값만 가질 수 있다. 

    name: 위젯 이름 

 

 

예제

반응형
import wx

class Example(wx.Frame):
    def __init__(self, parent, id):
        wx.Frame.__init__(self,parent,id,'Example Window', size=(400,300))

        panel=wx.Panel(self)

        # 텍스트
        txt = wx.StaticText(panel, -1, "스핀컨트롤(SpinCtrl) 예제입니다.\n숫자를 바꾸면 창 크기가 변합니다.", pos=(50,50))
        # 폰트
        font = wx.Font(20, wx.FONTFAMILY_MODERN, wx.NORMAL, wx.BOLD)

        # 스핀컨트롤 생성 X
        self.spinx = wx.SpinCtrl(panel, -1, "", (50, 100), (80,-1), style=wx.SP_ARROW_KEYS)
        self.spinx.SetRange(340,600)  # 값 범위
        self.spinx.SetValue(400)      # 초기값 설정
        self.spinx.SetIncrement(20)  # 구간간격 설정

        # 스핀컨트롤 생성 Y
        self.spiny = wx.SpinCtrl(panel, -1, "", (150, 100), (80,-1), style=wx.SP_ARROW_KEYS)
        self.spiny.SetRange(260, 500) # 값 범위
        self.spiny.SetValue(300)    # 초기값 설정
        self.spiny.SetIncrement(20) # 구간간격 설정

        # 폰트 설정
        self.spinx.SetFont(font)
        self.spiny.SetFont(font)

        self.Bind(wx.EVT_SPINCTRL, self.SpinnerAction, self.spinx)
        self.Bind(wx.EVT_SPINCTRL, self.SpinnerAction, self.spiny)

    def SpinnerAction(self,event):
        x, y = self.spinx.GetValue(), self.spiny.GetValue()
        self.SetSize(x,y)


if __name__=="__main__":
    app = wx.App()
    frame=Example(parent=None, id=-1)
    frame.Show()
    app.MainLoop()

 

 

 

 

 

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

반응형