PyGTK - Classe ComboBox

ComboBox è un widget potente e popolare in qualsiasi toolkit GUI. Fornisce un elenco a discesa di elementi da cui un utente può scegliere. Il widget gtk.ComboBox implementa l'interfaccia CellLayout e fornisce una serie di metodi per gestire la visualizzazione degli elementi.

L'oggetto della classe gtk.ComboBox è associato a ListSore, che è un modello di elenco che può essere utilizzato con widget che visualizzano una raccolta di elementi. Gli elementi vengono aggiunti a ListStore con il metodo append (). Inoltre, un oggetto CellRendererText viene creato e impacchettato nella casella combinata.

Segui questi passaggi per configurare una casella combinata.

combobox = gtk.ComboBox()
store = gtk.ListStore(gobject.TYPE_STRING)
cell = gtk.CellRendererText()
combobox.pack_start(cell)
combobox.add_attribute(cell, 'text', 0)

PyGTK offre un metodo conveniente: gtk.combo_box_new_text()per creare una casella combinata invece di utilizzare un archivio di elenchi. I metodi di convenienza associati append_text (), prepend_text (), insert_text () e remove_text () vengono utilizzati per gestire i contenuti della casella combinata.

La classe gtk.ComboBox ha i seguenti metodi:

S.NO Metodi e descrizione
1

set_wrap_width()

Imposta il numero di colonne da visualizzare nel layout della tabella popup

2

get_active()

Restituisce il valore della proprietà "attiva" che è l'indice nel modello dell'elemento attualmente attivo

3

set_active()

Imposta l'elemento attivo della combo_box sull'elemento con l'indice del modello specificato

4

set_model()

Imposta il modello utilizzato dalla casella combinata

5

append_text()

Aggiunge la stringa specificata dal testo all'elenco di stringhe archiviate nell'archivio elenco della casella combinata

6

Insert_text()

Inserisce la stringa specificata dal testo nella casella combinata gtk.ListStore in corrispondenza dell'indice specificato dalla posizione

7

prepend_text()

Antepone la stringa specificata dal testo all'elenco di stringhe archiviate nell'archivio elenchi

8

remove_text()

Rimuove la stringa in corrispondenza dell'indice specificato dalla posizione nel liststore associato

9

get_active_text()

Restituisce la stringa attualmente attiva

Il widget ComboBox emette i seguenti segnali:

cambiato Viene emesso quando viene selezionato un nuovo elemento nella casella combinata
move_active Questo è un segnale di associazione dei tasti che viene emesso per spostare la selezione attiva.
Popdown Questo è un segnale di associazione dei tasti che viene emesso per visualizzare l'elenco delle caselle combinate. Le associazioni predefinite per questo segnale sono Alt + Su ed Esc
Apparire Questo è un segnale di associazione dei tasti che viene emesso per far apparire l'elenco della casella combinata. Le associazioni predefinite per questo segnale sono Alt + Giù.

Di seguito sono riportati due codici di esempio per la dimostrazione di ComboBox.

Esempio 1

In questo esempio, un ListStore è popolato con i nomi dei popolari toolkit della GUI Python ed è associato a un widget ComboBox. Quando un utente fa una scelta, viene emesso il segnale modificato. È collegato a una funzione di callback per visualizzare la scelta dell'utente.

import pygtk
pygtk.require('2.0')
import gtk

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("ComboBox with ListStore")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)
      
      combobox = gtk.ComboBox()
      store = gtk.ListStore(str)
      cell = gtk.CellRendererText()
      combobox.pack_start(cell)
      combobox.add_attribute(cell, 'text', 0)
      fixed = gtk.Fixed()
      lbl = gtk.Label("select a GUI toolkit")
      fixed.put(lbl, 25,75)
      fixed.put(combobox, 125,75)
      lbl2 = gtk.Label("Your choice is:")
      fixed.put(lbl2, 25,125)
      self.label = gtk.Label("")
      fixed.put(self.label, 125,125)
      self.add(fixed)
      
      store.append (["PyQt"])
      store.append (["Tkinter"])
      store.append (["WxPython"])
      store.append (["PyGTK"])
      store.append (["PySide"])
      combobox.set_model(store)
      combobox.connect('changed', self.on_changed)
      combobox.set_active(0)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
      return
   
   def on_changed(self, widget):
      self.label.set_label(widget.get_active_text())
      return
      
if __name__ == '__main__':
PyApp()
gtk.main()

Al momento dell'esecuzione, il programma visualizza il seguente output:

Esempio 2

La seconda versione del programma utilizza il metodo conveniente combo_box_new_text()per creare una casella combinata e la funzione append_text () per aggiungere stringhe al suo interno. In entrambi i programmi, ilget_active_text() viene utilizzato per recuperare la selezione dell'utente e visualizzarla su un'etichetta nella finestra.

import gtk

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Simple ComboBox")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)
      
      cb = gtk.combo_box_new_text()
      cb.connect("changed", self.on_changed)
      cb.append_text('PyQt')
      cb.append_text('Tkinter')
      cb.append_text('WxPython')
      cb.append_text('PyGTK')
      cb.append_text('PySide')
      
      fixed = gtk.Fixed()
      lbl = gtk.Label("select a GUI toolkit")
      fixed.put(lbl, 25,75)
      
      fixed.put(cb, 125,75)
      lbl2 = gtk.Label("Your choice is:")
      fixed.put(lbl2, 25,125)
      
      self.label = gtk.Label("")
      fixed.put(self.label, 125,125)
      self.add(fixed)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
   
   def on_changed(self, widget):
      self.label.set_label(widget.get_active_text())
if __name__ == '__main__':
   PyApp()
   gtk.main()

L'output di questo programma è simile a quello del programma precedente.