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

누른 버튼의 레이블 = 저장