wxPython - Schaltflächen
Das Schaltflächen-Widget wird am häufigsten in jeder GUI-Oberfläche verwendet. Es erfasst das vom Benutzer generierte Klickereignis. Die naheliegendste Verwendung besteht darin, eine daran gebundene Handlerfunktion auszulösen.
Die wxPython-Klassenbibliothek bietet verschiedene Arten von Schaltflächen. Es gibt einen einfachen, traditionellen Knopf,wx.ButtonKlassenobjekt, dessen Beschriftung Text enthält. Es ist auch eine Schaltfläche mit zwei Status verfügbar, die als bezeichnet wirdwx.ToggleButton. Sein gedrückter oder niedergedrückter Zustand kann durch die Eventhandler-Funktion identifiziert werden.
Eine andere Art von Knopf, wx.BitmapButton Zeigt eine Bitmap (Bild) als Symbol auf der Vorderseite an.
Der Konstruktor für die Klassen wx.Button und wx.ToggleButton verwendet die folgenden Argumente:
Wx.Button(parent, id, label, pos, size, style)
Dies sind einige wichtige Methoden der wx.Button-Klasse -
SN | Methoden & Beschreibung |
---|---|
1 | SetLabel() Legt die Beschriftung der Schaltfläche programmgesteuert fest |
2 | GetLabel() Gibt die Beschriftung der Schaltfläche zurück |
3 | SetDefault() Die Schaltfläche ist für das Fenster der obersten Ebene auf Standard eingestellt. Emuliert das Klickereignis beim Drücken der Eingabetaste |
Zwei wichtige Methoden der wx.ToggleButton-Klasse sind -
SN | Methoden & Beschreibung |
---|---|
1 | GetValue() Gibt den Status der Umschalttaste zurück (ein / aus) |
2 | SetValue() Legt den Status der Schaltfläche programmgesteuert fest |
Um eine Bitmap-Schaltfläche zu erstellen, muss zunächst ein Bitmap-Objekt aus einer Bilddatei erstellt werden.
Die folgende Variante des Konstruktors der Klasse wx.Bitmap wird am häufigsten verwendet:
Wx.Bitmap(fiiename, wx.BITMAP_TYPE)
Einige der vordefinierten Bitmap-Typkonstanten sind -
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 |
Dieses Bitmap-Objekt wird als einer der Parameter für den Klassenkonstruktor wx.BitmapButton verwendet.
Wx.BitmapButton(parent, id, bitmap, pos, size, style)
Auf einigen Betriebssystemplattformen kann die Bitmap-Schaltfläche sowohl Bitmap als auch Beschriftung anzeigen. SetLabel () -Methoden weisen die Beschriftung zu. Auf anderen Plattformen dient es als internes Label.
Die normale Schaltfläche sowie die Bitmap-Schaltfläche geben ein wx.CommandEvent aus. Der Ordner EVT_BUTTON ordnet ihm eine Handlerfunktion zu.
Die Umschalttaste verwendet dagegen den Ordner wx.TOGGLEBUTTON für die Ereignisbehandlung.
Im folgenden Beispiel werden Schaltflächen aller drei Typen in einer vertikalen Boxgröße eines Bedienfelds platziert.
Ein einfaches Schaltflächenobjekt wird mit der Anweisung erstellt -
self.btn = wx.Button(panel, -1, "click Me")
Die Umschalttaste wird durch die folgende Anweisung erstellt:
self.tbtn = wx.ToggleButton(panel , -1, "click to on")
Diese Schaltflächen werden mit den folgenden Anweisungen zur vertikalen Größe hinzugefügt:
vbox.Add(self.btn,0,wx.ALIGN_CENTER)
vbox.Add(self.tbtn,0,wx.EXPAND|wx.ALIGN_CENTER)
Note - Aufgrund des Flags wx.EXPAND nimmt die Umschalttaste die gesamte Breite des Rahmens ein.
Mit den Bindemitteln EVT_BUTTON und EVT_TOGGLEBUTTON werden sie den jeweiligen Handlern zugeordnet.
self.btn.Bind(wx.EVT_BUTTON,self.OnClicked)
self.tbtn.Bind(wx.EVT_TOGGLEBUTTON,self.OnToggle)
Drei Bitmap-Schaltflächen werden zu einer horizontalen Box-Größe hinzugefügt. Diese Schaltflächen zeigen ein Bild als Symbol als Beschriftung an.
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))
Das Klickereignis dieser drei Schaltflächen wird an die OnClicked () -Methode weitergeleitet.
self.bmpbtn.Bind(wx.EVT_BUTTON, self.OnClicked)
self.bmpbtn1.Bind(wx.EVT_BUTTON, self.OnClicked)
self.bmpbtn2.Bind(wx.EVT_BUTTON, self.OnClicked)
Die internen Beschriftungen dieser Schaltflächen sind auf NEU, ÖFFNEN bzw. SPEICHERN eingestellt.
Die OnClicked () - Ereignishandlerfunktion ruft die Bezeichnung der Quellschaltfläche ab, die das Klickereignis verursacht hat. Dieses Etikett ist auf der Konsole aufgedruckt.
def OnClicked(self, event):
btn = event.GetEventObject().GetLabel()
print "Label of pressed button = ",btn
Die Ereignisbehandlungsroutine OnToggle () wird ausgelöst, wenn auf die Umschaltfläche geklickt wird. Sein Status wird von der GetValue () -Methode gelesen und dementsprechend wird die Beschriftung der Schaltfläche festgelegt.
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")
Die vollständige Codeliste lautet wie folgt:
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()
Der obige Code erzeugt die folgende Ausgabe -
Beschriftung der gedrückten Taste = Klicken Sie auf Me
Schaltflächenstatus ausschalten
Schaltflächenstatus einschalten
Beschriftung der gedrückten Taste = NEU
Beschriftung der gedrückten Taste = OPEN
Beschriftung der gedrückten Taste = SPEICHERN