halvar.at bcom Python Tools Plone Zope Visual Basic Programmierung SW3 PC Computer Netzwerk Linux Windows Shop

Skip to content

Gerolds Homepage

Sections
Personal tools
You are here: Home Python Python Code GTK - SimpleList
Document Actions

GTK-SimpleList

Kleine Helfer-Klasse, die das Erstellen von einfachen Listboxen mit GTK einfacher macht.

So sieht das Beispiel aus:

Laden Sie sich den Quellcode herunter.

Der Code, der dieses Fenster anzeigt sieht so aus:


#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import pygtk
pygtk.require("2.0")
import gtk
from simple_list import SimpleList


# Fenster erstellen
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.set_title("SimpleList")
window.set_default_size(180, 100)
window.connect("destroy", gtk.main_quit)

# SimpleList erstellen und dazugehöriges Event verbinden
simple_list = SimpleList()

def cursor_changed(*args):
    print "(pos, key, value) =", simple_list.get_selection_data()

simple_list.set_eventfunction__cursor_changed(cursor_changed)

# SimpleList befüllen
simple_list.append_item("Erster Wert", "eins")
simple_list.append_item("Zweiter Wert (ohne Key)")
simple_list.append_item("Dritter Wert", "drei")
simple_list.append_item("Vierter Wert")
simple_list.append_item(u"Fünfter Wert")
simple_list.append_item("Sechster Wert")

# Anzeigen
window.add(simple_list)
window.show()
gtk.main()


Und hier der Quellcode:


#----------------------------------------------------------------------
class SimpleList(gtk.ScrolledWindow):
    """
    Stellt eine einfache Liste mit Laufbalken dar. Das wird mit
    den Objekten ScrolledWindow und TreeView erreicht.
    """

    #----------------------------------------------------------------------
    def append_item(self, value, key = ""):
        """
        Fügt der Liste Werte und wenn gewünscht, Schlüssel hinzu.
        """

        self.list_store.append([key, value])


    #----------------------------------------------------------------------
    def _on_row_activated(self, treeview, path, view_column, data = None):
        """
        Setzt den Wert von self.selected_items. Dieser Wert kann
        mit der Methode "get_selection_data" abgerufen werden.
        """

        iter = self.list_store.get_iter(path)
        
        if iter:
            self.selected_item = (
                path[0], # Position
                self.list_store.get_value(iter, 0), # Key
                self.list_store.get_value(iter, 1) # Value
            )


    #----------------------------------------------------------------------
    def _on_cursor_changed(self, widget, data1 = None, data2 = None):
        """
        Setzt den Wert von self.selected_items. Dieser Wert kann
        mit der Methode "get_selection_data" abgerufen werden.
        """

        selection = widget.get_selection()
        (model, iter) = selection.get_selected()

        if iter:
            self.selected_item = (
                int(selection.get_selected_rows()[1][0][0]), # Position
                str(model.get_value(iter, 0)), # Key
                str(model.get_value(iter, 1)) # Value
            )


    #----------------------------------------------------------------------
    def get_selection_data(self):
        """
        Gibt die Variable self.selected_item zurück.
        Diese enthält ein Tupel. (<Position>, <Key>, <Value>)
        """
        
        return self.selected_item  # (<Position>, <Key>, <Value>)
    

    #----------------------------------------------------------------------
    def set_eventfunction__cursor_changed(self, function):
        """
        Verbindet die übergebene Funktion mit dem 
        Signal "cursor-changed".
        """
        
        self.tree_view.connect("cursor-changed", function)


    #----------------------------------------------------------------------
    def __init__(self):
        """
        Initialisieren
        """
        
        gtk.ScrolledWindow.__init__(self)
        self.selected_item = None # (<Position>, <Key>, <Value>)
        
        # Liste
        self.list_store = gtk.ListStore(str, str)
        
        # ScrolledWindow
        self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        #self.set_border_width(6)
        self.set_shadow_type(gtk.SHADOW_IN)
        
        # Treeview
        self.tree_view = gtk.TreeView(self.list_store)
        self.tree_view.set_headers_visible(False)
        self.tree_view.get_selection().set_mode(gtk.SELECTION_BROWSE)
        self.tree_view.connect("cursor-changed", self._on_cursor_changed)
        self.tree_view.connect("row-activated", self._on_row_activated)
        self.tree_view.show()
        
        # Key-Spalte hinzufügen
        self.key_cell = gtk.CellRendererText()
        self.key_column = gtk.TreeViewColumn("Key")
        self.key_column.pack_start(self.key_cell, True)
        self.key_column.add_attribute(self.key_cell, "text", 0)
        self.key_column.set_visible(False)
        self.tree_view.append_column(self.key_column)
        
        # Value-Spalte hinzufügen
        self.value_cell = gtk.CellRendererText()
        self.value_column = gtk.TreeViewColumn("Caption")
        self.value_column.pack_start(self.value_cell, True)
        self.value_column.add_attribute(self.value_cell, "text", 1)
        self.tree_view.append_column(self.value_column)

        # Suchspalte setzen
        # Leider funktioniert die Suche im Moment nicht so 
        # wie ich das möchte. Deshalb habe ich die Suche abgeschaltet.
        self.tree_view.set_enable_search(False)
        #self.tree_view.set_search_column(1)
       
        # Anzeigen
        self.add(self.tree_view)
        self.show()
    
    

#----------------------------------------------------------------------
def main():
    """
    Testfunktion
    """
    
    # Fenster erstellen
    window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    window.set_title("SimpleList")
    window.set_default_size(180, 100)
    window.connect("destroy", gtk.main_quit)
    
    # SimpleList erstellen und dazugehöriges Event verbinden
    simple_list = SimpleList()
    
    def cursor_changed(*args):
        print "(pos, key, value) =", simple_list.get_selection_data()

    simple_list.set_eventfunction__cursor_changed(cursor_changed)

    # SimpleList befüllen
    simple_list.append_item("Erster Wert", "eins")
    simple_list.append_item("Zweiter Wert (ohne Key)")
    simple_list.append_item("Dritter Wert", "drei")
    simple_list.append_item("Vierter Wert")
    simple_list.append_item(u"Fünfter Wert")
    simple_list.append_item("Sechster Wert")
    
    # Anzeigen
    window.add(simple_list)
    window.show()
    gtk.main()
    

if __name__ == "__main__":
    main()


 

Powered by Plone   Powered by Bcom   Powered by Gentoo-Linux

Diese Seite erfüllt evt. :-) folgende Standards: