Portál AbcLinuxu, 30. dubna 2025 15:25
# unique_ID, Q#, Status Icon, Name, Size, Progress, Message, Seeders, # Peers, DL, UL, ETA, Share self.torrent_model = gtk.ListStore(int, gobject.TYPE_UINT, gtk.gdk.Pixbuf, str, gobject.TYPE_UINT64, float, str, int, int, int, int, int, int, gobject.TYPE_UINT64, float, float)Rozhodně nechci psát, že vývojáři deluge použili špatné řešení, nevím jaké měli důvody to řešit zrovna takto a ani jsem pořádně neviděl zdrojáky. Ale přijde mi přirozenější v objektově orientovaném jazyce v TreeModel uchovávat přímo objekty. Jenže pak nastane problém s jejich zobrazováním. Typ objektu gobject.TYPE_* využívají třídy CellRenderer*, které jsou součástí GTK, ale pokud je typ nastaven na gobject.TYPE_PYOBJECT, CellRendererText si neporadí s __repr__. Navíc, často je potřeba vypsat v různých sloupcích různé atributy. Na irc.gnome.org#gtk mi poradili jednoduchý trik. Pro jednoduchost - zobrazení textové informace o našem objektu: Vytvořit novou třídu zděděnou z CellRendererText, přidat novou "property", jejíž "setter" nastaví property "text" na požadovanou hodnotu. Zděděné metody z CellRendererText se pak už postarají o správne zobrazení.
class Nas: # ukazkova trida - v TreeView chceme zobrazit atribut "t" def __init__(self): self.t = "zobraz me" class NasRenderer(gtk.CellRendererText): # nas_helper(hodnota) nastavi property "text" naseho Rendereru na "hodnota.t" # property "text" pote bude pouzita metody zdedenymy z CellRendererText k spravnemu # zobrazeni textu def nas_helper(object): self.set_property("text",object.t) # pri nastaveni property "nas" na "hodnota" pust "nas_helper(hodnota)" nas = gobject.property(setter=nas_helper) model = gtk.ListStore(gobject.TYPE_PYOBJECT) view = gtk.TreeView() view.set_model(model) # prida sloupec, ktery bude zobrazen pomoci NasRenderer, pred zobrazenim # se nastavi property (objektu NasRenderer) "nas" postupne (po radcich) na objekty v prvnim sloupci view.append_column(gtk.TreeViewColumn("title",NasRenderer(),nas=0)) model.append((Nas(),)) # zkouskaStejně je samozřejmě možné nastavovat i jiné properties "CellRendererů". Jasně, jedná se o základní použití, ale snad to někomu pomůže.
Tiskni
Sdílej:
Přikláním se k pokračování. Základních příkladu GTK je hafo, ale v praxi narazíte na problémy, které se nikde neřeší. Pak si s tím lámete hlavu klidně týden.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.