borzole Napisano Lipiec 27, 2010 Zgłoszenie Share Napisano Lipiec 27, 2010 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 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 More sharing options...
Neferius Napisano Lipiec 28, 2010 Zgłoszenie Share Napisano Lipiec 28, 2010 OFFTOPIC: @borzole nie lepiej zainteresować ci się gtkbulider + glade3 jeśli chodzi o projektowanie UI? Ja już prawie zapomniałem co to znaczy ręczne pisanie UI:D(choć chyba przez qtcreator Qt tu wygrywa z GTK) Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Lipiec 28, 2010 Autor Zgłoszenie Share Napisano Lipiec 28, 2010 * 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. 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ę , więc muszę posprzątać kod. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
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ę