Skocz do zawartości

[pygtk] Jak Przeładować Np. Gtk.vbox()


borzole

Rekomendowane odpowiedzi

Witam.

 

Mam w okienku obszar, który powinien zmieniać się po naciśnięciu przycisku. W tym obszarze ładowany jest obiekt np. gtk.VBox()

no i w tym problem, że nie działa :lol:

Przykład:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import time, gtk

class Plugin(object):
    def load(self):
        self.mainbox = gtk.VBox()

        self.frame = gtk.Frame()
        self.label = gtk.Label()

        self.mainbox.pack_start(self.frame, True, True, 0)
        self.frame.add(self.label)
        msg = "time: " + str(time.time())
        self.label.set_label(msg )

        return self.mainbox

class Main(object):
    def __init__(self):
        self.p=Plugin()
        self.w = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.w.connect("delete_event", gtk.main_quit)
        self.w.set_position(gtk.WIN_POS_CENTER_ALWAYS)

        self.box= gtk.VButtonBox()
        self.b = gtk.Button("reload")
        self.b.connect("clicked", self.on_click, None)

        self.inst = self.p.load()

        self.box.add(self.inst)
        self.box.add(self.b)

        self.w.add(self.box)
        self.w.show_all()
        gtk.main()

    def on_click(self, x,y):
        print "remove: ", self.inst
        self.inst = self.p.load()
        print "insert: ", self.inst

if __name__ == '__main__':
    Main()

w funkcji on_click(self, x,y) teoretycznie przeładowywany jest obiekt self.inst ale okienko gtk nie odświeża tego obiektu. Czego mi tu brakuje?

 

[EDIT]

dobra mam

w funkcji on_click(self, x,y) trzeba nie tylko przypisać nowy obiekt, ale też usunąć stary, dodać nowy i pokazać, czyli:

    def on_click(self, x,y):
        self.box.remove(self.inst)
        self.inst = self.p.load()
        self.box.add(self.inst)
        self.box.show_all()

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

* To zależy od stopnia skomplikowania okienka. Sklejenie kilku obiektów w okienku nie jest trudne.

* Jak wymyślę sobie odpowiedni problem to skorzystam z Glade

* Potrzebne mi to było, bo wymyśliłem coś co chyba trudniej było by mi osiągnąć w Glade (!)

Zacząłem myśleć nad tym "skryptem konfiguracyjnym" do remixu. Chciałem żeby to tak jak pierwszy pomysł w bash, było zapełniane przez pluginy.

Chciałem uzyskać okienko takie jak w TweakUI (google tweakui) tylko że pozycje są pluginami. Potrzebowałem więc drzewka, które się zapełni listą opcji po lewo i obszar do przeładowywania pluginów po prawo.

zielony-py-sudo.png

zielony-py-about-out.png

każda pozycja jest pluginem (również kategorie) np. tak wygląda najprostszy plugin

about.py

#!/usr/bin/env python
#-*- coding:utf-8 -*-
from zielony import *

ABOUT="""
O programie...
autor: Łukasz Jędral ( borzole )
www: jedral.one.pl
jid/email: [email protected]
"""

class About(Plugin):
    __label__='About'

    def load(self):
        self.label = gtk.Label()
        self.label.set_label(ABOUT)
        self.label.set_alignment(0.1,0.0)

        return self.label

if __name__ == '__main__':
    TestPlugin( About() )

Obecnie wszystko mi już działa, ale na klej i taśmę :D, więc muszę posprzątać kod.

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...