2016-05-05 3 views
3

Ich bin ein Text-Abenteuer in Python zu schaffen, um es mit tkinter aufgrund ist einfach Grafiken zu verwenden (Tasten und so weiter)Schreibmaschine Wirkung in tkinter

Ich mag einen Effekt hinzufügen, wo der Text sieht aus wie es geführt wird getippt wird.

Aber das Fenster friert nur ein, bis es fertig ist und alles, was es mir lässt, ist das letzte Zeichen der Zeichenfolge.

Kann mir jemand helfen?

+0

[ähnliche?] (Http://stackoverflow.com/questions/36969724/multi-threading-in-tkinter-gui-threads-in-different-classes) – motoku

+0

I 'slp' Hoffnung ist nicht ein Rebound 'time.sleep', weil das mit Tkinter nicht richtig funktioniert. – TigerhawkT3

Antwort

3

time.sleep() funktioniert nicht ordnungsgemäß mit Tkinter-Anwendungen. Verwenden Sie die after() Methode wie im folgenden Beispiel:

import tkinter as tk 

root = tk.Tk() 

word = 'hello' 

def go(counter=1): 
    l.config(text=word[:counter]) 
    root.after(150, lambda: go(counter+1)) 

b = tk.Button(root, text='go', command=go) 
l = tk.Label(root) 
b.pack() 
l.pack() 

root.mainloop() 
3

Sie müssen die Ereignisschleife lassen um den Bildschirm aktualisieren. Der einfachste Weg, dies zu tun, ist eine Selbstwiederholungsfunktion mit tkinter after Methode schreiben.

Hier ist ein funktionierendes Beispiel. Dies verwendet ein Text-Widget, aber Sie können ebenso einfach ein Label-Widget oder ein Canvas-Textelement aktualisieren.

import Tkinter as tk 

def typeit(widget, index, string): 
    if len(string) > 0: 
     widget.insert(index, string[0]) 
     if len(string) > 1: 
     # compute index of next char 
     index = widget.index("%s + 1 char" % index) 

     # type the next character in half a second 
     widget.after(250, typeit, widget, index, string[1:]) 

root = tk.Tk() 
text = tk.Text(root, width=40, height=4) 
text.pack(fill="both", expand=True) 
typeit(text, "1.0", "Hello, this is an \nexample of some text!") 

root.mainloop()