wxPython - przyciski
Widżet przycisku jest najczęściej używany w każdym interfejsie GUI. Przechwytuje zdarzenie kliknięcia wygenerowane przez użytkownika. Jego najbardziej oczywistym zastosowaniem jest wyzwolenie powiązanej z nim funkcji obsługi.
Biblioteka klas wxPython udostępnia różne typy przycisków. Jest prosty, tradycyjny przycisk,wx.Buttonclass, który zawiera tekst jako podpis. Dostępny jest również przycisk dwustanowy o nazwiewx.ToggleButton. Jego stan wciśnięcia lub wciśnięcia można zidentyfikować za pomocą funkcji obsługi zdarzeń.
Inny rodzaj przycisku, wx.BitmapButton wyświetla bitmapę (obraz) jako ikonę na swojej powierzchni.
Konstruktor dla klasy wx.Button i wx.ToggleButton przyjmuje następujące argumenty -
Wx.Button(parent, id, label, pos, size, style)
Oto kilka ważnych metod klasy wx.Button -
SN | Metody i opis |
---|---|
1 | SetLabel() Programowo ustawia podpis przycisku |
2 | GetLabel() Zwraca podpis przycisku |
3 | SetDefault() Przycisk jest ustawiony domyślnie dla okna najwyższego poziomu. Emuluje zdarzenie kliknięcia po naciśnięciu klawisza Enter |
Dwie ważne metody klasy wx.ToggleButton to -
SN | Metody i opis |
---|---|
1 | GetValue() Zwraca stan przycisku przełączania (wł. / Wył.) |
2 | SetValue() Programowo ustawia stan przycisku |
Aby utworzyć przycisk mapy bitowej, po pierwsze, obiekt bitmapy musi zostać utworzony z pliku obrazu.
Następująca odmiana konstruktora klasy wx.Bitmap jest najczęściej używana -
Wx.Bitmap(fiiename, wx.BITMAP_TYPE)
Niektóre z predefiniowanych stałych typu mapy bitowej to -
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 |
Ten obiekt bitmapowy jest używany jako jeden z parametrów konstruktora klasy wx.BitmapButton.
Wx.BitmapButton(parent, id, bitmap, pos, size, style)
Na niektórych platformach OS przycisk mapy bitowej może wyświetlać zarówno mapę bitową, jak i etykietę. Metody SetLabel () przypisują podpis. Na innych platformach służy jako etykieta wewnętrzna.
Zwykły przycisk, jak również przycisk mapy bitowej, emituje zdarzenie wx.CommandEvent. Binder EVT_BUTTON kojarzy z nim funkcję obsługi.
Z drugiej strony przycisk przełączania używa spinacza wx.TOGGLEBUTTON do obsługi zdarzeń.
W poniższym przykładzie przyciski wszystkich trzech typów są umieszczone w pionowym rozmiarze pola panelu.
Prosty obiekt przycisku jest tworzony za pomocą instrukcji -
self.btn = wx.Button(panel, -1, "click Me")
Przycisk przełączania jest skonstruowany przez następującą instrukcję -
self.tbtn = wx.ToggleButton(panel , -1, "click to on")
Te przyciski są dodawane do pionowego rozmiaru za pomocą następujących instrukcji -
vbox.Add(self.btn,0,wx.ALIGN_CENTER)
vbox.Add(self.tbtn,0,wx.EXPAND|wx.ALIGN_CENTER)
Note - Ze względu na flagę wx.EXPAND przycisk przełącznika zajmuje całą szerokość ramki.
Używając segregatorów EVT_BUTTON i EVT_TOGGLEBUTTON, są one powiązane z odpowiednimi programami obsługi.
self.btn.Bind(wx.EVT_BUTTON,self.OnClicked)
self.tbtn.Bind(wx.EVT_TOGGLEBUTTON,self.OnToggle)
Trzy przyciski bitmapowe są dodawane do rozmiaru pola poziomego. Te przyciski wyświetlają obraz jako ikonę jako ich podpis.
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))
Zdarzenie Click tych trzech przycisków jest kierowane do metody 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)
Etykiety wewnętrzne tych przycisków są odpowiednio ustawione na NOWY, OTWARTY i ZAPISZ.
Funkcja obsługi zdarzenia OnClicked () pobiera etykietę przycisku źródłowego, który spowodował zdarzenie kliknięcia. Ta etykieta jest wydrukowana na konsoli.
def OnClicked(self, event):
btn = event.GetEventObject().GetLabel()
print "Label of pressed button = ",btn
Moduł obsługi zdarzeń OnToggle () jest wyzwalany po kliknięciu przycisku przełącznika. Jego stan jest odczytywany przez metodę GetValue () i odpowiednio ustawiany jest podpis przycisku.
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")
Pełna lista kodów jest następująca -
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()
Powyższy kod daje następujące dane wyjściowe -
Etykieta wciśniętego przycisku = kliknij Mnie
Wyłącz stan przycisku
Włącz stan przycisku
Etykieta wciśniętego przycisku = NOWY
Etykieta wciśniętego przycisku = OPEN
Etykieta wciśniętego przycisku = ZAPISZ