wxPython - ปุ่ม

วิดเจ็ตปุ่มใช้กันอย่างแพร่หลายในอินเทอร์เฟซ GUI ใด ๆ จับภาพเหตุการณ์การคลิกที่ผู้ใช้สร้างขึ้น การใช้งานที่ชัดเจนที่สุดคือการเรียกใช้ฟังก์ชันตัวจัดการที่ผูกไว้

ไลบรารีคลาส wxPython มีปุ่มประเภทต่างๆ มีปุ่มแบบธรรมดาที่เรียบง่ายwx.Buttonคลาสออบเจ็กต์ซึ่งมีข้อความบางส่วนเป็นคำอธิบายภาพ นอกจากนี้ยังมีปุ่มสองสถานะซึ่งมีชื่อว่าwx.ToggleButton. สถานะที่ถูกกดหรือหดหู่สามารถระบุได้ด้วยฟังก์ชันตัวจัดการเหตุการณ์

ปุ่มประเภทอื่น wx.BitmapButton แสดงบิตแมป (รูปภาพ) เป็นไอคอนบนใบหน้า

ตัวสร้างสำหรับคลาส wx Button และคลาส wx.ToggleButton รับอาร์กิวเมนต์ต่อไปนี้ -

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

นี่คือวิธีการที่สำคัญบางอย่างของคลาส wx ปุ่ม -

SN วิธีการและคำอธิบาย
1

SetLabel()

ตั้งค่าคำบรรยายของปุ่มโดยใช้โปรแกรม

2

GetLabel()

ส่งคืนคำบรรยายของปุ่ม

3

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 binder เชื่อมโยงฟังก์ชันตัวจัดการกับมัน

ในทางกลับกันปุ่มสลับใช้ wx.TOGGLEBUTTON binder สำหรับการจัดการเหตุการณ์

ในตัวอย่างต่อไปนี้ปุ่มทั้งสามประเภทจะอยู่ในกล่องแนวตั้งของแผง

วัตถุปุ่มธรรมดาถูกสร้างขึ้นโดยใช้คำสั่ง -

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)

ป้ายกำกับภายในของปุ่มเหล่านี้ตั้งค่าเป็นใหม่เปิดและบันทึกตามลำดับ

ฟังก์ชันตัวจัดการเหตุการณ์ 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()

รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -

ป้ายกำกับของปุ่มที่กด = คลิกฉัน

ปิดสถานะปุ่มสลับ

เปิดสถานะปุ่มสลับ

ป้ายกำกับของปุ่มที่กด = ใหม่

ป้ายกำกับของปุ่มที่กด = เปิด

ป้ายกำกับของปุ่มที่กด = บันทึก