Textview mit Zeitabständen anzeigen lassen

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Hansi500
User
Beiträge: 7
Registriert: Sonntag 19. Februar 2012, 10:52

Hallo, ich habe folgendes Probem:
Ich möchte eine art Quiz machen bei dem es alle 6 Sekunden einen Hinweis anzeigen soll.
Alle Hinweise sind in einem Tuple gespeichert und werden in den TextBuffer geschrieben.
Dabei muss ich darauf achten gtk.Textview zu verwenden.

Code: Alles auswählen

#!/usr/bin/env python

import pygtk
import gtk
import time

class Base:
	
    def destroy(self, data = None):
        gtk.main_quit()
	
    def __init__(self):
        self.hinweistext = "Hinweis1", "Hinweis2", "Hinweis3", "Hinweis4", "Hinweis5", "Hinweis6"

        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.show()
        self.window.connect("destroy", self.destroy)
        
        self.hinweise_buffer = gtk.TextBuffer()
        self.hinweise_tag = gtk.TextTag()
        self.hinweise_tag.set_property("font", "Sans 15")
        self.hinweise_tag.set_property("wrap_mode", gtk.WRAP_WORD)
        self.hinweise_tag.set_property("pixels-above-lines",10)
        self.hinweise_tag.set_property("left-margin",10)
        self.start = self.hinweise_buffer.get_start_iter()
        self.end =self.hinweise_buffer.get_end_iter()
        self.hinweise_buffer.get_tag_table().add(self.hinweise_tag)
        self.hinweise_buffer.apply_tag(self.hinweise_tag, self.start, self.end)
        self.hinweisfeld = gtk.TextView(self.hinweise_buffer)
        self.hinweisfeld.set_editable(False)
        self.hinweisfeld.show()
       
        self.window.add(self.hinweisfeld)
        x = 0
        for i in range (0, 6, 1):
            self.hinweise_buffer.set_text(self.hinweistext[x])
            time.sleep(6)
            x = x+1

           
    
    def main(self):
        gtk.main()

if __name__ == '__main__':
    base = Base()
    base.main()

Kann mir irgendjemand zeigen wie das funktioniert?
Schonmal Danke im Vorraus.
BlackJack

@Hansi500: `time.sleep()` darf/sollte man in GUI-Code nicht verwenden. Dieser Code wird von der Hauptschleife des GUI-Toolkits aufgerufen und sollte immer so kurz wie möglich laufen um die Kontrolle wieder der Hauptschleife zurück zu geben, damit diese die GUI aktualisieren und auf den Benutzer reagieren kann.

Wenn man etwas nach einer bestimmten Wartezeit machen möchte, bieten die meisten GUI-Toolkits Funktionen um Funktionen verzögert aufzurufen. Bei Gtk geht das zum Beispiel mit `gtk.timeout_add()`.

In Deinem Quelltext bindest Du viel zu viel an das Objekt. Du scheinst einfach vor (fast) jeden Namen ``self.`` zu schreiben ohne darüber nach zu denken ob das sinnvoll ist.

Die ``for``-Schleife ist in der Form „unpythonisch”. Man kann in Python *direkt* über die Elemente einer Sequenz iterieren — ohne einen Umweg über einen Index machen zu müssen. Du schleppst auch noch zwei synchrone unnötige Indizes mit. Überleg mal welche Werte `i` und `x` jeweils bei jedem Schleifendurchlauf haben.
Hansi500
User
Beiträge: 7
Registriert: Sonntag 19. Februar 2012, 10:52

@BlackJack
Danke erstmal aber die selfs stehen nur im Code da er ein Ausschnitt eines größeren Scripts ist.
ich versuchs gleich mal
Antworten