Lista rozwijana ComboBox w GTK+

Opis

Lista rozwijana, zwana także polem wyboru jest elementem graficznego interfejsu użytkownika. Jej zadaniem jest podanie możliwych opcji do wyboru z listy, rozwijającej się po jej kliknięciu.
Poniższy przykład został napisany dla biblioteki GTK+ przy użyciu nowego formatu GtkBuilder. Programem do edycji nadal pozostaje Glade, pomimo swej nazwy kojarzącej się z poprzedniem formatem.
Sygnały zostały połączone z uchwytami, a następnie w kodzie źródłowym można odczytać, że są przyczepione do klasy, dzięki czemu nie trzeba manualnie łączyć sygnałów z metodami. Choć odbywa się to częściowo automagicznie, to należy zwrócić uwagę na nazwę oraz parametry metody, które muszą odpowiadać połączonemu sygnałowi.

Przykład

Zawartość pliku ./listaRozwijana.py

#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# Author: Camelek.AmigaRulez
# License: Public Domain
# Date: piątek, 14 październik 2011 00:18:15
#
 
import gtk, gobject
 
class KlasaComboBox():
    def __init__(self):
        self.lista = gtk.ListStore(gobject.TYPE_STRING);
        self.lista.append (["Motorola 68000"]);
        self.lista.append (["Intel MCS-51"]);
        self.lista.append (["Cell"]);
        self.lista.append (["Zilog Z80"]);
 
        self.projekt = gtk.Builder();
        self.projekt.add_from_file("./gui/okienkoListyRozwijanej.ui");
 
        self.okienko = self.projekt.get_object("window1");
        self.projekt.connect_signals(self);
 
        self.listaRozwijana = self.projekt.get_object("combobox1");
        self.listaRozwijana.set_model(self.lista);
        self.komorka = gtk.CellRendererText();
        self.listaRozwijana.pack_start(self.komorka, True);
        self.listaRozwijana.add_attribute(self.komorka, 'text',0);
 
    def uruchom(self):
        self.okienko.show_all();
        gtk.main();
 
    def on_combobox1_changed(self, combobox, data=None):
        print 'Wybrałeś', self.listaRozwijana.get_active_text(), 'jego indeks na tej liście to:', self.listaRozwijana.get_active();
 
    def on_window1_delete_event(self, widget, event, data=None):
        gtk.main_quit();
 
if __name__ == "__main__":
    app = KlasaComboBox();
    app.uruchom();
else:
    sys.exit(1);

Zawartość pliku ./gui/okienkoListyRozwijanej.ui

<?xml version="1.0"?>
<interface>
  <requires lib="gtk+" version="2.16"/>
  <!-- interface-naming-policy project-wide -->
  <object class="GtkWindow" id="window1">
    <property name="title" translatable="yes">Wybierz sw&#xF3;j ulubiony procesor</property>
    <property name="window_position">center</property>
    <signal name="delete_event" handler="on_window1_delete_event"/>
    <child>
      <object class="GtkHButtonBox" id="hbuttonbox1">
        <property name="visible">True</property>
        <child>
          <object class="GtkComboBox" id="combobox1">
            <property name="visible">True</property>
            <signal name="changed" handler="on_combobox1_changed"/>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">False</property>
            <property name="position">0</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

AutoDia

Taka ciekawosta. Jest to wynik komendy autodia wykonanej na powyższym kodzie źródłowym.

autodia -z -l python -i ./listaRozwijana.py -o ./autodia.out.png

autodia.out.png

Zobacz także:

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją GNU Free Documentation License.