2011-02-09 15 views
6

Dla każdego wiersza w moim widoku drzewa chcę, aby obok siebie znajdowały się 4 przyciski obrazów. Będą działać jak przyciski radiowe, z których tylko jedna będzie aktywowana w tym samym czasie. Każdy przycisk ma obraz "włączony" i "wyłączony".Widok drzewa gtk: umieść przyciski obrazów w wierszach

Jak to zrobić? Wymyśliłem, jak umieścić tam zdjęcia i jak je umieścić, ale wydaje się, że wymaga to trochę więcej wysiłku, ponieważ nie ma gotowego odtwarzacza komórek, który robi to, co chcę.

Zasadniczo udało mi się rozwiązać problem polegający na kliknięciu myszką na obraz z kliknięcia. jakieś pomysły?

Odpowiedz

1

Spójrz na to 'http://www.daa.com.au/pipermail/pygtk/2010-March/018355.html '. Pokazuje, jak można aktywować gtk.CellRendererPixbuf i połączyć się z sygnałem zdarzenia kliknięcia.

cell = CellRendererPixbufXt() 
cell.connect('clicked', func) 

Aktualizacja

Jak wskazał tę odpowiedź, lub odniesienie podane nie działa jak reklamowane. Brakuje metody do_activate, która musi emitować kliknięty sygnał. Gdy to zrobisz, wtedy cell.connect będzie działać.

Przepraszam, jeśli ta odpowiedź wprowadza w błąd każdego.

+0

Właściwie twoje odwołanie nie pokazuje tego ... – schlamar

+0

Nie wiem, na co patrzysz, ale moje odniesienie ma na to wpływ. Zauważyłem, że twoja odpowiedź jest prawie taka sama jak referencja, którą dałem. Jeśli narzekasz na coś innego, proszę bądź trochę bardziej przejrzysty. –

+0

Sygnał "kliknięcia" nigdy nie jest wyzwalany. Właściwie to nie jest dużym zaskoczeniem, jeśli zacytuję z twojego odniesienia: "ale nie jestem pewien, jak emitować niestandardowy" kliknięty "sygnał, gdy użytkownik kliknie na CellRenderer." – schlamar

0

Oto co pracował dla mnie:

class CellRendererClickablePixbuf(gtk.CellRendererPixbuf): 
    gsignal('clicked', str) 
    def __init__(self): 
     gtk.CellRendererPixbuf.__init__(self) 
     self.set_property('mode', gtk.CELL_RENDERER_MODE_ACTIVATABLE) 
    def do_activate(self, event, widget, path, background_area, cell_area, flags): 
     self.emit('clicked', path) 
+0

Zakładam, że odnosisz się do 'kiwi.utils.gsignal'? – schlamar

2

Oto krótka wersja bez kiwi wymogu.

class CellRendererClickablePixbuf(gtk.CellRendererPixbuf): 

    __gsignals__ = {'clicked': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, 
           (gobject.TYPE_STRING,)) 
        } 

    def __init__(self): 
     gtk.CellRendererPixbuf.__init__(self) 
     self.set_property('mode', gtk.CELL_RENDERER_MODE_ACTIVATABLE) 

    def do_activate(self, event, widget, path, background_area, cell_area, 
        flags): 
     self.emit('clicked', path) 
+0

Próbuję użyć Twojego kodu, ale otrzymuję obiekt 'gi.repository.Gtk 'nie ma atrybutu" CELL_RENDERER_MODE_ACTIVATABLE "- jakiekolwiek pomysły, dlaczego? –

+0

Tak, mój kod jest dla (Py) Gtk 2. – schlamar

Powiązane problemy