wxPython-버튼
버튼 위젯은 모든 GUI 인터페이스에서 가장 널리 사용됩니다. 사용자가 생성 한 클릭 이벤트를 캡처합니다. 가장 명백한 용도는 바인딩 된 핸들러 함수를 트리거하는 것입니다.
wxPython 클래스 라이브러리는 다양한 유형의 버튼을 제공합니다. 간단하고 전통적인 버튼이 있습니다.wx.Button일부 텍스트를 캡션으로 전달하는 클래스 개체입니다. 다음과 같은 2 가지 상태 버튼도 사용할 수 있습니다.wx.ToggleButton. 눌려 지거나 눌린 상태는 eventhandler 함수로 식별 할 수 있습니다.
또 다른 유형의 버튼은 wx.BitmapButton 얼굴에 비트 맵 (이미지)을 아이콘으로 표시합니다.
wx.Button 클래스와 wx.ToggleButton 클래스의 생성자는 다음 인수를 취합니다.
Wx.Button(parent, id, label, pos, size, style)
이들은 wx.Button 클래스의 몇 가지 중요한 방법입니다-
SN | 방법 및 설명 |
---|---|
1 | SetLabel() 프로그래밍 방식으로 버튼의 캡션을 설정합니다. |
2 | GetLabel() 버튼의 캡션을 반환합니다. |
삼 | SetDefault() 버튼은 최상위 창에 대해 기본값으로 설정됩니다. Enter 키를 누를 때 클릭 이벤트를 에뮬레이트합니다. |
wx.ToggleButton 클래스의 두 가지 중요한 방법은 다음과 같습니다.
SN | 방법 및 설명 |
---|---|
1 | GetValue() 토글 버튼의 상태를 반환합니다 (켜기 / 끄기). |
2 | SetValue() 프로그래밍 방식으로 버튼의 상태를 설정합니다. |
비트 맵 버튼을 만들려면 먼저 이미지 파일에서 비트 맵 객체를 구성해야합니다.
wx.Bitmap 클래스 생성자의 다음 변형이 가장 일반적으로 사용됩니다.
Wx.Bitmap(fiiename, wx.BITMAP_TYPE)
미리 정의 된 비트 맵 유형 상수 중 일부는-
wx.BITMAP_TYPE_BMP |
wx.BITMAP_TYPE_ICO |
wx.BITMAP_TYPE_CUR |
wx.BITMAP_TYPE_TIFF |
wx.BITMAP_TYPE_TIF |
wx.BITMAP_TYPE_GIF |
wx.BITMAP_TYPE_PNG |
wx.BITMAP_TYPE_JPEG |
wx.BITMAP_TYPE_PCX |
wx.BITMAP_TYPE_ICON |
wx.BITMAP_TYPE_ANY |
이 비트 맵 객체는 wx.BitmapButton 클래스 생성자의 매개 변수 중 하나로 사용됩니다.
Wx.BitmapButton(parent, id, bitmap, pos, size, style)
일부 OS 플랫폼에서 비트 맵 버튼은 비트 맵과 레이블을 모두 표시 할 수 있습니다. SetLabel () 메서드는 캡션을 할당합니다. 다른 플랫폼에서는 내부 레이블로 사용됩니다.
일반 버튼과 비트 맵 버튼은 wx.CommandEvent를 내 보냅니다. EVT_BUTTON 바인더는 핸들러 함수를 연관시킵니다.
반면에 토글 버튼은 이벤트 처리를 위해 wx.TOGGLEBUTTON 바인더를 사용합니다.
다음 예에서 세 가지 유형의 버튼은 모두 패널의 수직 상자 크기 조정기에 배치됩니다.
간단한 버튼 객체는 문을 사용하여 생성됩니다-
self.btn = wx.Button(panel, -1, "click Me")
토글 버튼은 다음 문으로 구성됩니다-
self.tbtn = wx.ToggleButton(panel , -1, "click to on")
이 버튼은 다음 문을 사용하여 수직 크기 측정기에 추가됩니다.
vbox.Add(self.btn,0,wx.ALIGN_CENTER)
vbox.Add(self.tbtn,0,wx.EXPAND|wx.ALIGN_CENTER)
Note − wx.EXPAND 플래그로 인해 토글 버튼이 프레임의 전체 너비를 차지합니다.
EVT_BUTTON 및 EVT_TOGGLEBUTTON 바인더를 사용하면 각각의 핸들러와 연관됩니다.
self.btn.Bind(wx.EVT_BUTTON,self.OnClicked)
self.tbtn.Bind(wx.EVT_TOGGLEBUTTON,self.OnToggle)
가로 상자 크기 조정기에 세 개의 비트 맵 단추가 추가됩니다. 이 버튼은 이미지를 캡션으로 아이콘으로 표시합니다.
bmp = wx.Bitmap("NEW.BMP", wx.BITMAP_TYPE_BMP)
self.bmpbtn = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp,
size = (bmp.GetWidth()+10, bmp.GetHeight()+10))
bmp1 = wx.Bitmap("OPEN.BMP", wx.BITMAP_TYPE_BMP)
self.bmpbtn1 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp1,
size = (bmp.GetWidth()+10, bmp.GetHeight()+10))
bmp2 = wx.Bitmap("SAVE.BMP", wx.BITMAP_TYPE_BMP)
self.bmpbtn2 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp2,
size = (bmp.GetWidth()+10, bmp.GetHeight()+10))
이 세 버튼의 클릭 이벤트는 OnClicked () 메서드로 전달됩니다.
self.bmpbtn.Bind(wx.EVT_BUTTON, self.OnClicked)
self.bmpbtn1.Bind(wx.EVT_BUTTON, self.OnClicked)
self.bmpbtn2.Bind(wx.EVT_BUTTON, self.OnClicked)
이 버튼의 내부 레이블은 각각 NEW, OPEN 및 SAVE로 설정됩니다.
OnClicked () 이벤트 핸들러 함수는 클릭 이벤트를 발생시킨 소스 버튼의 레이블을 검색합니다. 그 라벨은 콘솔에 인쇄되어 있습니다.
def OnClicked(self, event):
btn = event.GetEventObject().GetLabel()
print "Label of pressed button = ",btn
OnToggle () 이벤트 핸들러는 토글 버튼을 클릭하면 트리거됩니다. 상태는 GetValue () 메서드에 의해 읽히고 이에 따라 버튼의 캡션이 설정됩니다.
def OnToggle(self,event):
state = event.GetEventObject().GetValue()
if state == True:
print "off"
event.GetEventObject().SetLabel("click to off")
else:
print "on"
event.GetEventObject().SetLabel("click to on")
전체 코드 목록은 다음과 같습니다.
import wx
class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (200,150))
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
self.btn = wx.Button(panel,-1,"click Me")
vbox.Add(self.btn,0,wx.ALIGN_CENTER)
self.btn.Bind(wx.EVT_BUTTON,self.OnClicked)
self.tbtn = wx.ToggleButton(panel , -1, "click to on")
vbox.Add(self.tbtn,0,wx.EXPAND|wx.ALIGN_CENTER)
self.tbtn.Bind(wx.EVT_TOGGLEBUTTON,self.OnToggle)
hbox = wx.BoxSizer(wx.HORIZONTAL)
bmp = wx.Bitmap("NEW.BMP", wx.BITMAP_TYPE_BMP)
self.bmpbtn = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp,
size = (bmp.GetWidth()+10, bmp.GetHeight()+10))
hbox.Add(self.bmpbtn,0,wx.ALIGN_CENTER)
self.bmpbtn.Bind(wx.EVT_BUTTON,self.OnClicked)
self.bmpbtn.SetLabel("NEW")
bmp1 = wx.Bitmap("OPEN.BMP", wx.BITMAP_TYPE_BMP)
self.bmpbtn1 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp1,
size = (bmp.GetWidth()+10, bmp.GetHeight()+10))
hbox.Add(self.bmpbtn1,0,wx.ALIGN_CENTER)
self.bmpbtn1.Bind(wx.EVT_BUTTON,self.OnClicked)
self.bmpbtn1.SetLabel("OPEN")
bmp2 = wx.Bitmap("SAVE.BMP", wx.BITMAP_TYPE_BMP)
self.bmpbtn2 = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bmp2,
size = (bmp.GetWidth()+10, bmp.GetHeight()+10))
hbox.Add(self.bmpbtn2,0,wx.ALIGN_CENTER)
self.bmpbtn2.Bind(wx.EVT_BUTTON,self.OnClicked)
self.bmpbtn2.SetLabel("SAVE")
vbox.Add(hbox,1,wx.ALIGN_CENTER)
panel.SetSizer(vbox)
self.Centre()
self.Show()
self.Fit()
def OnClicked(self, event):
btn = event.GetEventObject().GetLabel()
print "Label of pressed button = ",btn
def OnToggle(self,event):
state = event.GetEventObject().GetValue()
if state == True:
print "Toggle button state off"
event.GetEventObject().SetLabel("click to off")
else:
print " Toggle button state on"
event.GetEventObject().SetLabel("click to on")
app = wx.App()
Mywin(None, 'Button demo')
app.MainLoop()
위의 코드는 다음 출력을 생성합니다.
누른 버튼의 레이블 = 나를 클릭
버튼 상태 끄기
버튼 상태 전환
누른 버튼의 라벨 = NEW
누른 버튼의 레이블 = OPEN
누른 버튼의 레이블 = 저장