wxPython - Tombol

Widget tombol paling banyak digunakan di semua antarmuka GUI. Ini menangkap peristiwa klik yang dihasilkan oleh pengguna. Penggunaannya yang paling jelas adalah untuk memicu fungsi penangan yang terikat padanya.

Perpustakaan kelas wxPython menyediakan berbagai jenis tombol. Ada tombol tradisional yang sederhana,wx.Buttonobjek kelas, yang membawa beberapa teks sebagai judulnya. Tombol dua status juga tersedia, yang dinamai sebagaiwx.ToggleButton. Keadaan tertekan atau tertekan dapat diidentifikasi dengan fungsi eventhandler.

Jenis tombol lainnya, wx.BitmapButton menampilkan bitmap (gambar) sebagai ikon di wajahnya.

Konstruktor untuk kelas wx.Button dan kelas wx.ToggleButton mengambil argumen berikut -

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

Ini adalah beberapa metode penting dari kelas wx.Button -

SN Metode & Deskripsi
1

SetLabel()

Setel judul tombol secara terprogram

2

GetLabel()

Mengembalikan keterangan tombol

3

SetDefault()

Tombol disetel ke default untuk jendela tingkat atas. Mengemulasi acara klik saat menekan tombol Enter

Dua metode penting dari kelas wx.ToggleButton adalah -

SN Metode & Deskripsi
1

GetValue()

Mengembalikan status tombol sakelar (on / off)

2

SetValue()

Menetapkan status tombol secara terprogram

Untuk membuat tombol bitmap, pertama-tama, objek bitmap perlu dibuat dari file gambar.

Variasi konstruktor kelas wx.Bitmap berikut ini paling umum digunakan -

Wx.Bitmap(fiiename, wx.BITMAP_TYPE)

Beberapa dari konstanta jenis bitmap standar adalah -

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

Objek bitmap ini digunakan sebagai salah satu parameter untuk konstruktor kelas wx.BitmapButton.

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

Pada beberapa platform OS, tombol bitmap dapat menampilkan bitmap dan label. Metode SetLabel () menetapkan judul. Di platform lain, ini berfungsi sebagai label internal.

Tombol normal serta tombol bitmap mengeluarkan wx.CommandEvent. Pengikat EVT_BUTTON mengaitkan fungsi penangan dengannya.

Tombol sakelar di sisi lain menggunakan pengikat wx.TOGGLEBUTTON untuk penanganan acara.

Dalam contoh berikut, tombol dari ketiga jenis ditempatkan dalam pengukur ukuran kotak vertikal sebuah panel.

Objek tombol sederhana dibuat menggunakan pernyataan -

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

Tombol Toggle dibangun dengan pernyataan berikut -

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

Tombol-tombol ini ditambahkan ke pengukur vertikal menggunakan pernyataan berikut -

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

Note - Karena bendera wx.EXPAND, tombol sakelar menempati seluruh lebar bingkai.

Menggunakan EVT_BUTTON dan EVT_TOGGLEBUTTON pengikat mereka dikaitkan dengan masing-masing penangan.

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

Tiga tombol bitmap ditambahkan ke pengukur ukuran kotak horizontal. Tombol-tombol ini menampilkan gambar sebagai ikon sebagai keterangannya.

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

Acara klik dari ketiga tombol ini diarahkan ke metode 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)

Label internal tombol-tombol ini masing-masing disetel ke BARU, BUKA dan SIMPAN.

Fungsi penanganan peristiwa OnClicked () mengambil label tombol sumber, yang menyebabkan peristiwa klik. Label itu tercetak di konsol.

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

Pengendali kejadian OnToggle () dipicu saat tombol sakelar diklik. Statusnya dibaca oleh metode GetValue () dan karenanya, judul tombol disetel.

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

Daftar kode lengkapnya adalah sebagai berikut -

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

Kode di atas menghasilkan keluaran sebagai berikut -

Label tombol yang ditekan = klik Saya

Matikan status tombol

Hidupkan status tombol

Label tombol yang ditekan = BARU

Label tombol yang ditekan = OPEN

Label tombol yang ditekan = SIMPAN