Hi!
Weil ich faul bin habe ich mir ein "gtkhelper"-Modul erstellt. In diesem Modul entsteht immer wieder mal eine neue Klasse, die mir das Leben mit GTK als Programmierer erleichtert. Ein Auszug daraus ist "SimpleList".
SimpleList erstellt schlicht und einfach nur eine "TreeView"-Liste in einem "ScrolledWindow". Wer das schon einmal gemacht hat, weiß, dass man im GTK nicht einfach nur eine Liste erstellen kann. Man braucht normalerweise mindestens ein TreeView, eine TreeViewCell, eine TreeViewColumn und ein ListView.
SimpleList kümmert sich um dieses Drumherum und stellt ein einziges Objekt zur Verfügung.
Mit dem Befehl "append_item()" wird eine neu Zeile hinzugefügt und mit "get_selection_data()" wird die selektierte Zeile zurück gegeben.
Hier geht es zur SimpleList-Seite: http://gerold.bcom.at/python/python_cod ... mple_list/
mfg
Gerold
GTK SimpleList (Einfache Listbox mit GTK)
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Fein. Ich krieg immer Krämpfe, wenn ich ListViews in gtk erstellen muss.
Dafür kann man schweineviel damit anstellen
Dankeschön
Dafür kann man schweineviel damit anstellen
Dankeschön
TUFKAB – the user formerly known as blackbird
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ja, man kann damit gut Arbeiten wenn man erst das Konzept dahinter verstanden hat. Ich habe es einmal Verstanden und wieder vergessenblackbird hat geschrieben:Fein. Ich krieg immer Krämpfe, wenn ich ListViews in gtk erstellen muss.
Dafür kann man schweineviel damit anstellen
Sehr praktisch dein Code
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi!
Ich habe ein Problem (siehe unterhalb des Codes) mit diesem Code, der eine GTK-Liste anzeigt.
Wenn ich mit STRG+F oder einfach nur durch tippen eines Buchstaben in den Suchmodus wechsle und mit diesem einen Wert auswähle, dann wird der gewählte Eintrag nicht automatisch an das TreeViewSelection-Objekt weiter gegeben.
Es ist zwar optisch eine Zeile ausgewählt und wie gewohnt blau hinterlegt, lässt sich aber nicht mitoder
abrufen.
Erst, wenn man zusätzlich mit der Maus auf die blau hinterlegte Zeile klickt, dann wird die Zeile so ausgewählt, dass man Sie abfragen kann.
Weiß jemand einen Workaround?
lg
Gerold
Ich habe ein Problem (siehe unterhalb des Codes) mit diesem Code, der eine GTK-Liste anzeigt.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import pygtk
pygtk.require("2.0")
import gtk
#----------------------------------------------------------------------
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 _cursor_changed(self, widget):
"""
Setzt den Wert von self.selected_items. Dieser Wert kann
mit der Methode "get_selection_data".
"""
selection = widget.get_selection()
(model, iter) = selection.get_selected()
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.connect("cursor-changed", self._cursor_changed)
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
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()
Es ist zwar optisch eine Zeile ausgewählt und wie gewohnt blau hinterlegt, lässt sich aber nicht mit
Code: Alles auswählen
selection = widget.get_selection()
(model, iter) = selection.get_selected()
Code: Alles auswählen
selection.get_selected_rows()
Erst, wenn man zusätzlich mit der Maus auf die blau hinterlegte Zeile klickt, dann wird die Zeile so ausgewählt, dass man Sie abfragen kann.
Weiß jemand einen Workaround?
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
So sieht das Beispiel aus, wie es nicht sein sollte.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
So sieht das Beispiel aus wie es sein sollte -- nur leider ohne Suche.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
kann man simplelist auch in einem glade projekt benutzen? sorry, bin noch ein ziemlicher Anfänger und blick da leider nicht ganz durch
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
@mx:
Klar,
self.gladetree.get_widget("box-wo-das-reinsoll").pack_start(SimpleList(), True, True,0)
Klar,
self.gladetree.get_widget("box-wo-das-reinsoll").pack_start(SimpleList(), True, True,0)
wow... hab nicht erwartet nach der Zeit noch eine Antwort zu bekommen!
vielen dank, ich werds auf jeden fall ausprobieren wenn ich mal zeit hab... das projekt für das ich simplelist bruchte ist auf jedenfal schon seit meinem letzten post nicht mehr weiterentwickelt worden ....
schönen tag noch,
mx
vielen dank, ich werds auf jeden fall ausprobieren wenn ich mal zeit hab... das projekt für das ich simplelist bruchte ist auf jedenfal schon seit meinem letzten post nicht mehr weiterentwickelt worden ....
schönen tag noch,
mx