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()
รหัสด้านบนสร้างผลลัพธ์ต่อไปนี้ -
ป้ายกำกับของปุ่มที่กด = คลิกฉัน
ปิดสถานะปุ่มสลับ
เปิดสถานะปุ่มสลับ
ป้ายกำกับของปุ่มที่กด = ใหม่
ป้ายกำกับของปุ่มที่กด = เปิด
ป้ายกำกับของปุ่มที่กด = บันทึก