wxPython - Düğmeler

Düğme widget'ı en yaygın olarak herhangi bir GUI arayüzünde kullanılır. Kullanıcı tarafından oluşturulan tıklama olayını yakalar. En belirgin kullanımı, kendisine bağlı bir işleyici işlevini tetiklemektir.

wxPython sınıf kitaplığı, farklı türde düğmeler sağlar. Basit, geleneksel bir düğme var,wx.Buttonresim yazısı olarak bir miktar metin taşıyan sınıf nesnesi. Ayrıca iki durumlu bir düğme de mevcuttur.wx.ToggleButton. Basılmış veya basılmış durumu, çift taşıyıcı işlevi ile tanımlanabilir.

Başka bir düğme türü, wx.BitmapButton yüzünde simge olarak bir bitmap (resim) görüntüler.

Wx.Button sınıfı ve wx.ToggleButton sınıfı için oluşturucu aşağıdaki bağımsız değişkenleri alır -

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

Bunlar wx.Button sınıfının bazı önemli yöntemleridir -

SN Yöntemler ve Açıklama
1

SetLabel()

Düğmenin başlığını programlı olarak ayarlar

2

GetLabel()

Düğmenin başlığını verir

3

SetDefault()

Düğme, üst düzey pencere için varsayılan olarak ayarlanmıştır. Enter tuşuna basıldığında tıklama olayını taklit eder

Wx.ToggleButton sınıfının iki önemli yöntemi -

SN Yöntemler ve Açıklama
1

GetValue()

Geçiş düğmesinin durumunu döndürür (açık / kapalı)

2

SetValue()

Programlı olarak düğmenin durumunu ayarlar

Bir bitmap düğmesi oluşturmak için, öncelikle bir görüntü dosyasından bir bitmap nesnesinin oluşturulması gerekir.

Aşağıdaki wx.Bitmap sınıfı yapıcısı varyasyonu en yaygın olarak kullanılır -

Wx.Bitmap(fiiename, wx.BITMAP_TYPE)

Önceden tanımlanmış bitmap türü sabitlerinden bazıları -

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

Bu bitmap nesnesi, wx.BitmapButton sınıfı yapıcısı için parametrelerden biri olarak kullanılır.

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

Bazı işletim sistemi platformlarında, bitmap düğmesi hem bitmap'i hem de etiketi görüntüleyebilir. SetLabel () yöntemleri resim yazısını atar. Diğer platformlarda, dahili bir etiket görevi görür.

Normal düğme ve bitmap düğmesi bir wx.CommandEvent yayar. EVT_BUTTON bağlayıcı, kendisine bir işleyici işlevi ilişkilendirir.

Öte yandan geçiş düğmesi, olay işleme için wx.TOGGLEBUTTON bağlayıcısını kullanır.

Aşağıdaki örnekte, her üç türdeki düğmeler, bir panelin dikey bir kutu boyutlandırıcısına yerleştirilmiştir.

Basit düğme nesnesi, ifade kullanılarak oluşturulur -

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

Geçiş düğmesi aşağıdaki ifade ile oluşturulur -

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

Bu düğmeler, aşağıdaki ifadeler kullanılarak dikey boyutlandırıcıya eklenir -

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

Note - wx.EXPAND bayrağı nedeniyle, geçiş düğmesi çerçevenin tüm genişliğini kaplar.

EVT_BUTTON ve EVT_TOGGLEBUTTON bağlayıcılarını kullanarak, bunlar ilgili işleyicilerle ilişkilendirilir.

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

Yatay kutu boyutlandırıcıya üç bitmap düğmesi eklenir. Bu düğmeler, bir resmi başlık olarak simge olarak görüntüler.

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

Bu üç düğmenin tıklama olayı OnClicked () yöntemine yönlendirilir.

self.bmpbtn.Bind(wx.EVT_BUTTON, self.OnClicked) 
self.bmpbtn1.Bind(wx.EVT_BUTTON, self.OnClicked) 
self.bmpbtn2.Bind(wx.EVT_BUTTON, self.OnClicked)

Bu düğmelerin dahili etiketleri sırasıyla YENİ, AÇIK ve KAYDET olarak ayarlanmıştır.

OnClicked () olay işleyici işlevi, click olayına neden olan kaynak düğmesinin etiketini alır. Bu etiket konsolun üzerine basılmıştır.

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

OnToggle () olay işleyicisi, geçiş düğmesi tıklandığında tetiklenir. Durumu GetValue () yöntemi ile okunur ve buna göre düğmenin başlığı ayarlanır.

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

Tam kod listesi aşağıdaki gibidir -

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

Yukarıdaki kod aşağıdaki çıktıyı üretir -

Basılan düğmenin etiketi = Beni tıklayın

Düğme durumunu kapat

Düğme durumunu aç / kapat

Basılan düğmenin etiketi = YENİ

Basılan düğmenin etiketi = AÇIK

Basılan düğmenin etiketi = KAYDET