Seite 1 von 1

Textview mit Zeitabständen anzeigen lassen

Verfasst: Donnerstag 19. Juli 2012, 15:15
von Hansi500
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.

Re: Textview mit Zeitabständen anzeigen lassen

Verfasst: Donnerstag 19. Juli 2012, 16:10
von 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.

Re: Textview mit Zeitabständen anzeigen lassen

Verfasst: Donnerstag 19. Juli 2012, 16:14
von Hansi500
@BlackJack
Danke erstmal aber die selfs stehen nur im Code da er ein Ausschnitt eines größeren Scripts ist.
ich versuchs gleich mal