wxPython - przyciski

Widżet przycisku jest najczęściej używany w każdym interfejsie GUI. Przechwytuje zdarzenie kliknięcia wygenerowane przez użytkownika. Jego najbardziej oczywistym zastosowaniem jest wyzwolenie powiązanej z nim funkcji obsługi.

Biblioteka klas wxPython udostępnia różne typy przycisków. Jest prosty, tradycyjny przycisk,wx.Buttonclass, który zawiera tekst jako podpis. Dostępny jest również przycisk dwustanowy o nazwiewx.ToggleButton. Jego stan wciśnięcia lub wciśnięcia można zidentyfikować za pomocą funkcji obsługi zdarzeń.

Inny rodzaj przycisku, wx.BitmapButton wyświetla bitmapę (obraz) jako ikonę na swojej powierzchni.

Konstruktor dla klasy wx.Button i wx.ToggleButton przyjmuje następujące argumenty -

Wx.Button(parent, id, label, pos, size, style)

Oto kilka ważnych metod klasy wx.Button -

SN Metody i opis
1

SetLabel()

Programowo ustawia podpis przycisku

2

GetLabel()

Zwraca podpis przycisku

3

SetDefault()

Przycisk jest ustawiony domyślnie dla okna najwyższego poziomu. Emuluje zdarzenie kliknięcia po naciśnięciu klawisza Enter

Dwie ważne metody klasy wx.ToggleButton to -

SN Metody i opis
1

GetValue()

Zwraca stan przycisku przełączania (wł. / Wył.)

2

SetValue()

Programowo ustawia stan przycisku

Aby utworzyć przycisk mapy bitowej, po pierwsze, obiekt bitmapy musi zostać utworzony z pliku obrazu.

Następująca odmiana konstruktora klasy wx.Bitmap jest najczęściej używana -

Wx.Bitmap(fiiename, wx.BITMAP_TYPE)

Niektóre z predefiniowanych stałych typu mapy bitowej to -

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

Ten obiekt bitmapowy jest używany jako jeden z parametrów konstruktora klasy wx.BitmapButton.

Wx.BitmapButton(parent, id, bitmap, pos, size, style)

Na niektórych platformach OS przycisk mapy bitowej może wyświetlać zarówno mapę bitową, jak i etykietę. Metody SetLabel () przypisują podpis. Na innych platformach służy jako etykieta wewnętrzna.

Zwykły przycisk, jak również przycisk mapy bitowej, emituje zdarzenie wx.CommandEvent. Binder EVT_BUTTON kojarzy z nim funkcję obsługi.

Z drugiej strony przycisk przełączania używa spinacza wx.TOGGLEBUTTON do obsługi zdarzeń.

W poniższym przykładzie przyciski wszystkich trzech typów są umieszczone w pionowym rozmiarze pola panelu.

Prosty obiekt przycisku jest tworzony za pomocą instrukcji -

self.btn = wx.Button(panel, -1, "click Me")

Przycisk przełączania jest skonstruowany przez następującą instrukcję -

self.tbtn = wx.ToggleButton(panel , -1, "click to on")

Te przyciski są dodawane do pionowego rozmiaru za pomocą następujących instrukcji -

vbox.Add(self.btn,0,wx.ALIGN_CENTER) 
vbox.Add(self.tbtn,0,wx.EXPAND|wx.ALIGN_CENTER)

Note - Ze względu na flagę wx.EXPAND przycisk przełącznika zajmuje całą szerokość ramki.

Używając segregatorów EVT_BUTTON i EVT_TOGGLEBUTTON, są one powiązane z odpowiednimi programami obsługi.

self.btn.Bind(wx.EVT_BUTTON,self.OnClicked) 
self.tbtn.Bind(wx.EVT_TOGGLEBUTTON,self.OnToggle)

Trzy przyciski bitmapowe są dodawane do rozmiaru pola poziomego. Te przyciski wyświetlają obraz jako ikonę jako ich podpis.

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

Zdarzenie Click tych trzech przycisków jest kierowane do metody 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)

Etykiety wewnętrzne tych przycisków są odpowiednio ustawione na NOWY, OTWARTY i ZAPISZ.

Funkcja obsługi zdarzenia OnClicked () pobiera etykietę przycisku źródłowego, który spowodował zdarzenie kliknięcia. Ta etykieta jest wydrukowana na konsoli.

def OnClicked(self, event): 
   btn = event.GetEventObject().GetLabel() 
   print "Label of pressed button = ",btn

Moduł obsługi zdarzeń OnToggle () jest wyzwalany po kliknięciu przycisku przełącznika. Jego stan jest odczytywany przez metodę GetValue () i odpowiednio ustawiany jest podpis przycisku.

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

Pełna lista kodów jest następująca -

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

Powyższy kod daje następujące dane wyjściowe -

Etykieta wciśniętego przycisku = kliknij Mnie

Wyłącz stan przycisku

Włącz stan przycisku

Etykieta wciśniętego przycisku = NOWY

Etykieta wciśniętego przycisku = OPEN

Etykieta wciśniętego przycisku = ZAPISZ