wxPython - Các nút
Tiện ích nút được sử dụng rộng rãi nhất trong bất kỳ giao diện GUI nào. Nó nắm bắt sự kiện nhấp chuột do người dùng tạo ra. Công dụng rõ ràng nhất của nó là kích hoạt một hàm xử lý liên kết với nó.
Thư viện lớp wxPython cung cấp các loại nút khác nhau. Có một nút đơn giản, truyền thống,wx.Buttonđối tượng lớp, mang một số văn bản làm chú thích của nó. Một nút hai trạng thái cũng có sẵn, được đặt tên làwx.ToggleButton. Trạng thái nhấn hoặc nhấn của nó có thể được xác định bằng chức năng xử lý sự kiện.
Một loại nút khác, wx.BitmapButton hiển thị một bitmap (hình ảnh) dưới dạng biểu tượng trên mặt của nó.
Hàm tạo cho lớp wx.Button và lớp wx.ToggleButton nhận các đối số sau:
Wx.Button(parent, id, label, pos, size, style)
Đây là một số phương thức quan trọng của lớp wx.Button -
SN | Phương pháp & Mô tả |
---|---|
1 | SetLabel() Đặt chú thích của nút theo chương trình |
2 | GetLabel() Trả về chú thích của nút |
3 | SetDefault() Nút được đặt thành mặc định cho cửa sổ cấp cao nhất. Mô phỏng sự kiện nhấp chuột khi nhấn phím Enter |
Hai phương thức quan trọng của lớp wx.ToggleButton là:
SN | Phương pháp & Mô tả |
---|---|
1 | GetValue() Trả về trạng thái của nút chuyển đổi (bật / tắt) |
2 | SetValue() Đặt trạng thái của nút theo chương trình |
Để tạo một nút bitmap, trước tiên, một đối tượng bitmap cần được tạo ra từ một tệp hình ảnh.
Biến thể sau của phương thức khởi tạo lớp wx.Bitmap thường được sử dụng nhất:
Wx.Bitmap(fiiename, wx.BITMAP_TYPE)
Một số hằng số kiểu bitmap được xác định trước là:
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 |
Đối tượng bitmap này được sử dụng làm một trong các tham số cho phương thức khởi tạo lớp wx.BitmapButton.
Wx.BitmapButton(parent, id, bitmap, pos, size, style)
Trên một số nền tảng hệ điều hành, nút bitmap có thể hiển thị cả bitmap và nhãn. Phương thức setLabel () gán chú thích. Trên các nền tảng khác, nó hoạt động như một nhãn nội bộ.
Nút bình thường cũng như nút bitmap phát ra một wx.CommandEvent. Chất kết dính EVT_BUTTON liên kết một hàm xử lý với nó.
Mặt khác, nút bật tắt sử dụng chất kết dính wx.TOGGLEBUTTON để xử lý sự kiện.
Trong ví dụ sau, các nút của cả ba loại được đặt trong một bộ chỉnh hình hộp dọc của bảng điều khiển.
Đối tượng nút đơn giản được tạo bằng câu lệnh -
self.btn = wx.Button(panel, -1, "click Me")
Nút chuyển đổi được xây dựng bằng câu lệnh sau:
self.tbtn = wx.ToggleButton(panel , -1, "click to on")
Các nút này được thêm vào bộ chỉnh âm dọc bằng cách sử dụng các câu lệnh sau:
vbox.Add(self.btn,0,wx.ALIGN_CENTER)
vbox.Add(self.tbtn,0,wx.EXPAND|wx.ALIGN_CENTER)
Note - Do cờ wx.EXPAND, nút bật tắt chiếm toàn bộ chiều rộng của khung.
Sử dụng chất kết dính EVT_BUTTON và EVT_TOGGLEBUTTON, chúng được liên kết với các trình xử lý tương ứng.
self.btn.Bind(wx.EVT_BUTTON,self.OnClicked)
self.tbtn.Bind(wx.EVT_TOGGLEBUTTON,self.OnToggle)
Ba nút bitmap được thêm vào một bộ chỉnh hình hộp ngang. Các nút này hiển thị hình ảnh dưới dạng biểu tượng làm chú thích của chúng.
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))
Sự kiện nhấp chuột của ba nút này được chuyển hướng đến phương thức 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)
Nhãn bên trong của các nút này lần lượt được đặt thành MỚI, MỞ và LƯU.
Hàm xử lý sự kiện OnClicked () truy xuất nhãn của nút nguồn gây ra sự kiện nhấp chuột. Nhãn đó được in trên bàn điều khiển.
def OnClicked(self, event):
btn = event.GetEventObject().GetLabel()
print "Label of pressed button = ",btn
Trình xử lý sự kiện OnToggle () được kích hoạt khi nhấp vào nút bật tắt. Trạng thái của nó được đọc bởi phương thức GetValue () và theo đó, chú thích của nút được đặt.
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")
Danh sách mã hoàn chỉnh như sau:
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()
Đoạn mã trên tạo ra kết quả sau:
Nhãn của nút đã nhấn = bấm vào Tôi
Tắt trạng thái nút
Bật trạng thái nút
Nhãn của nút nhấn = MỚI
Nhãn của nút đã nhấn = MỞ
Nhãn của nút nhấn = LƯU