Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
-
monocult
- User
- Beiträge: 37
- Registriert: Donnerstag 31. März 2005, 09:55
- Wohnort: hennef
-
Kontaktdaten:
Ich habe mich Grade mal angemeldet da das bestimmt nicht meine letzte Frage sein wird.
Ich bekomme einfach kein Gui update hin was z.B. bei einem Progressbar ziemlich blöde ist wen er nur von 0 zu 1 springt.
Schon mal jetzt Danke für eure Hilfe.
Code: Alles auswählen
#!/usr/bin/env python
import gtk
import gtk.glade
import time
class gui:
def __init__(self):
self.wTree=gtk.glade.XML ("threadtest.glade")
self.wTree.signal_autoconnect(self)
def startprogress(self):
ip=0.0
for i in range(10):
ip=ip+0.1
self.wTree.get_widget("progressbar").set_fraction(ip)
print ip
time.sleep(0.2)
def on_button1_clicked(self,widget):
self.startprogress()
def gtk_main_quit(self,widget):
gtk.main_quit()
gui()
gtk.main()
-
Leonidas
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
-
Kontaktdaten:
Vorschlag:
Code: Alles auswählen
#!/usr/bin/env python
import gtk, gobject
import gtk.glade
import time
class gui:
def __init__(self):
win = gtk.Window()
win.set_border_width(12)
win.connect('destroy', gtk.main_quit)
vbox = gtk.VBox()
vbox.set_spacing(12)
self.pbar = gtk.ProgressBar()
vbox.pack_start(self.pbar)
hbox = gtk.HBox()
button = gtk.Button(stock=gtk.STOCK_EXECUTE)
button.connect('clicked', self.on_button1_clicked)
hbox.pack_start(button)
vbox.pack_start(hbox)
win.add(vbox)
win.show_all()
self.gen = self.startprogress()
def startprogress(self):
ip=0.0
for i in range(10):
ip=ip+0.1
print ip
gobject.idle_add(self.pbar.set_fraction, ip)
yield None
def on_button1_clicked(self,widget):
self.gen.next()
gui()
gtk.main()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
Gast
ok soweit.
mit
Code: Alles auswählen
gobject.idle_add(self.pbar.set_fraction, ip)
yield None
halte ich die schleife an um den gtk.mainloop zu vollenden. Beim nächsten Aufruf der Funktion wird die schleife weitergeführt.
Aber das bedeutet ja auch das der mainloop auf einen event wartet der die schleifen Funktion mit der schleife neu aufruft.
ich würde es lieber so haben
Code: Alles auswählen
for i in range(10):
gobject.idle_add(self.pbar.set_fraction, ip)
time.sleep(0.2)
--- gui update ---
ich hoffe ich stehe nicht voll aufm Schlauch
Edit (Leonidas): Code in Python Tags gesetzt.
-
monocult
- User
- Beiträge: 37
- Registriert: Donnerstag 31. März 2005, 09:55
- Wohnort: hennef
-
Kontaktdaten:
-
Leonidas
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
-
Kontaktdaten:
Mein Hirn: kreisch, schepper, wühl... da war doch was! Und ja tatsächlich:
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import gtk, gobject
import time
class Gui(object):
def __init__(self):
win = gtk.Window()
win.set_border_width(12)
win.connect('destroy', gtk.main_quit)
vbox = gtk.VBox()
vbox.set_spacing(12)
self.pbar = gtk.ProgressBar()
vbox.pack_start(self.pbar)
hbox = gtk.HBox()
button = gtk.Button(stock=gtk.STOCK_EXECUTE)
button.connect('clicked', self.on_button1_clicked)
hbox.pack_start(button)
vbox.pack_start(hbox)
win.add(vbox)
win.show_all()
def startprogress(self):
ip = self.pbar.get_fraction()
ip += 0.1
if ip <= 1.0:
self.pbar.set_fraction(ip)
return True
else:
return False
def on_button1_clicked(self,widget):
gobject.timeout_add(200, self.startprogress)
Gui()
gtk.main()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
monocult
- User
- Beiträge: 37
- Registriert: Donnerstag 31. März 2005, 09:55
- Wohnort: hennef
-
Kontaktdaten:
super (war klar das das so einfach ist)
aber jetzt kann ich ja beruhigt schlafen
Danke
-
ProgChild
- User
- Beiträge: 210
- Registriert: Samstag 9. April 2005, 10:58
-
Kontaktdaten:
Es geht auch noch ein bisschen anders...
Code: Alles auswählen
#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import gtk, gobject
import time
class Gui(object):
def __init__(self):
win = gtk.Window()
win.set_border_width(12)
win.connect('destroy', gtk.main_quit)
vbox = gtk.VBox()
vbox.set_spacing(12)
self.pbar = gtk.ProgressBar()
vbox.pack_start(self.pbar)
hbox = gtk.HBox()
button = gtk.Button(stock=gtk.STOCK_EXECUTE)
button.connect('clicked', self.on_button1_clicked)
hbox.pack_start(button)
vbox.pack_start(hbox)
win.add(vbox)
win.show_all()
def startprogress(self):
ip=0.0
for i in range(10):
ip=ip+0.1
self.pbar.set_fraction(ip)
while gtk.events_pending():
gtk.main_iteration()
print ip
time.sleep(0.2)
def on_button1_clicked(self,widget):
self.startprogress()
Gui()
gtk.main()