PyGTK - Classe ComboBox

ComboBox é um widget poderoso e popular em qualquer kit de ferramentas de GUI. Ele fornece uma lista suspensa de itens que um usuário pode escolher. O widget gtk.ComboBox implementa a interface CellLayout e fornece vários métodos para gerenciar a exibição de itens.

O objeto da classe gtk.ComboBox está associado a um ListSore, que é um modelo de lista que pode ser usado com widgets que exibem uma coleção de itens. Os itens são adicionados a ListStore com o método append (). Além disso, um objeto CellRendererText é criado e compactado na combobox.

Siga estas etapas para configurar uma caixa de combinação.

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

PyGTK oferece um método de conveniência - gtk.combo_box_new_text()para criar uma caixa de combinação em vez de usar um armazenamento de lista. Os métodos de conveniência associados append_text (), prepend_text (), insert_text () e remove_text () são usados ​​para gerenciar o conteúdo da caixa de combinação.

A classe gtk.ComboBox tem os seguintes métodos -

S.NO Métodos e Descrição
1

set_wrap_width()

Define o número de colunas a serem exibidas no layout da tabela pop-up

2

get_active()

Retorna o valor da propriedade "ativa" que é o índice no modelo do item atualmente ativo

3

set_active()

Define o item ativo da combo_box para o item com o índice do modelo especificado

4

set_model()

Define o modelo usado pela caixa de combinação

5

append_text()

Acrescenta a string especificada pelo texto à lista de strings armazenada no armazenamento de lista da caixa de combinação

6

Insert_text()

Insere a string especificada pelo texto na caixa de combinação gtk.ListStore no índice especificado pela posição

7

prepend_text()

Anexa a string especificada por texto para a lista de strings armazenadas no armazenamento de lista

8

remove_text()

Remove a string no índice especificado por posição no liststore associado

9

get_active_text()

Retorna a string atualmente ativa

O widget ComboBox emite os seguintes sinais -

mudou Este é emitido quando um novo item na caixa de combinação é selecionado
move_active Este é um sinal de atalho que é emitido para mover a seleção ativa.
Popdown Este é um sinal de atalho que é emitido para abrir a lista da caixa de combinação. As ligações padrão para este sinal são Alt + Up e Escape
Aparecer Este é um sinal de atalho que é emitido para abrir a lista da caixa de combinação. As ligações padrão para este sinal são Alt + Down.

Dois exemplos de códigos para a demonstração do ComboBox são fornecidos abaixo.

Exemplo 1

Neste exemplo, um ListStore é preenchido com os nomes de kits de ferramentas Python GUI populares e está associado a um widget ComboBox. Conforme o usuário faz uma escolha, o sinal alterado é emitido. Ele está conectado a uma função de retorno de chamada para exibir a escolha do usuário.

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

Após a execução, o programa exibe a seguinte saída -

Exemplo 2

A segunda versão do programa usa o método de conveniência combo_box_new_text()para criar uma caixa de combinação e a função append_text () para adicionar strings nela. Em ambos os programas, oget_active_text() método é usado para buscar a seleção do usuário e exibir em um rótulo na janela.

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

A saída deste programa é semelhante à do programa anterior.