wxPython - Pulsanti

Il widget del pulsante è ampiamente utilizzato in qualsiasi interfaccia GUI. Cattura l'evento clic generato dall'utente. Il suo utilizzo più ovvio è attivare una funzione gestore ad essa associata.

La libreria di classi wxPython fornisce diversi tipi di pulsanti. C'è un semplice pulsante tradizionale,wx.Buttonoggetto di classe, che contiene del testo come didascalia. È disponibile anche un pulsante a due stati, denominatowx.ToggleButton. Il suo stato premuto o depresso può essere identificato dalla funzione gestore di eventi.

Un altro tipo di pulsante, wx.BitmapButton mostra una bitmap (immagine) come icona sulla sua faccia.

Il costruttore per la classe wx.Button e la classe wx.ToggleButton accetta i seguenti argomenti:

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

Questi sono alcuni metodi importanti della classe wx.Button -

SN Metodi e descrizione
1

SetLabel()

Imposta la didascalia del pulsante a livello di codice

2

GetLabel()

Restituisce la didascalia del pulsante

3

SetDefault()

Il pulsante è impostato sul valore predefinito per la finestra di primo livello. Emula l'evento clic alla pressione del tasto Invio

Due metodi importanti della classe wx.ToggleButton sono:

SN Metodi e descrizione
1

GetValue()

Restituisce lo stato del pulsante di attivazione / disattivazione (on / off)

2

SetValue()

Imposta lo stato del pulsante a livello di codice

Per creare un pulsante bitmap, in primo luogo, un oggetto bitmap deve essere costruito da un file immagine.

La seguente variazione del costruttore di classi wx.Bitmap è più comunemente usata:

Wx.Bitmap(fiiename, wx.BITMAP_TYPE)

Alcune delle costanti di tipo bitmap predefinite sono:

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

Questo oggetto bitmap viene utilizzato come uno dei parametri per il costruttore della classe wx.BitmapButton.

Wx.BitmapButton(parent, id, bitmap, pos, size, style)

Su alcune piattaforme OS, il pulsante bitmap può visualizzare sia bitmap che etichetta. I metodi SetLabel () assegnano la didascalia. Su altre piattaforme, funge da etichetta interna.

Anche il pulsante normale e il pulsante bitmap emettono un wx.CommandEvent. Il binder EVT_BUTTON gli associa una funzione di gestore.

Il pulsante di attivazione / disattivazione d'altra parte utilizza il raccoglitore wx.TOGGLEBUTTON per la gestione degli eventi.

Nell'esempio seguente, i pulsanti di tutti e tre i tipi sono posizionati in un misuratore di riquadro verticale di un pannello.

L'oggetto pulsante semplice viene creato utilizzando l'istruzione -

self.btn = wx.Button(panel, -1, "click Me")

Il pulsante di attivazione / disattivazione è costruito dalla seguente istruzione:

self.tbtn = wx.ToggleButton(panel , -1, "click to on")

Questi pulsanti vengono aggiunti al dimensionamento verticale utilizzando le seguenti istruzioni:

vbox.Add(self.btn,0,wx.ALIGN_CENTER) 
vbox.Add(self.tbtn,0,wx.EXPAND|wx.ALIGN_CENTER)

Note - A causa del flag wx.EXPAND, il pulsante di attivazione / disattivazione occupa l'intera larghezza del frame.

Utilizzando i raccoglitori EVT_BUTTON e EVT_TOGGLEBUTTON vengono associati ai rispettivi gestori.

self.btn.Bind(wx.EVT_BUTTON,self.OnClicked) 
self.tbtn.Bind(wx.EVT_TOGGLEBUTTON,self.OnToggle)

Tre pulsanti bitmap vengono aggiunti in un ridimensionatore di riquadro orizzontale. Questi pulsanti visualizzano un'immagine come icona come didascalia.

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))

L'evento di clic di questi tre pulsanti è diretto al metodo 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)

Le etichette interne di questi pulsanti sono impostate rispettivamente su NEW, OPEN e SAVE.

La funzione del gestore di eventi OnClicked () recupera l'etichetta del pulsante di origine, che ha causato l'evento clic. Quell'etichetta è stampata sulla console.

def OnClicked(self, event): 
   btn = event.GetEventObject().GetLabel() 
   print "Label of pressed button = ",btn

Il gestore di eventi OnToggle () viene attivato quando si fa clic sul pulsante di attivazione / disattivazione. Il suo stato viene letto dal metodo GetValue () e di conseguenza viene impostata la didascalia del pulsante.

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")

L'elenco completo del codice è il seguente:

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()

Il codice precedente produce il seguente output:

Etichetta del pulsante premuto = fare clic su Me

Disattiva lo stato del pulsante

Attiva / disattiva lo stato del pulsante

Etichetta del pulsante premuto = NUOVO

Etichetta del pulsante premuto = APERTO

Etichetta del pulsante premuto = SALVA