所以我知道在python窗口中您可以使用此..
for char in introstring:
sleep(0.2)
sys.stdout.write(char)
sys.stdout.flush()
它将以0.2的速度逐个字符显示在窗口中的文本
如何将其转换为Tkinter窗口?例如,我有以下文字:
canvas.create_text((720,454),text="Just in case you start to feel sniffily, or something",fill="white", font=('arial'))
有没有办法获得相同的动画,但是在Tkinter GUI中,我已经设置好了?我已经听说过有关.after命令的信息,但是我似乎找不到如何将其应用于此功能。
这是一个非常简单的示例,将一个字符一个字符地打印到画布上,每个字符之间的延迟为500毫秒。
import Tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root)
canvas.pack()
canvas_text = canvas.create_text(10, 10, text='', anchor=tk.NW)
test_string = "This is a test"
#Time delay between chars, in milliseconds
delta = 500
delay = 0
for i in range(len(test_string) + 1):
s = test_string[:i]
update_text = lambda s=s: canvas.itemconfigure(canvas_text, text=s)
canvas.after(delay, update_text)
delay += delta
root.mainloop()
该代码已在Python 2.6上进行了测试。要在Python 3上运行它,您需要将import
语句更改为import tkinter as tk
这是一个更复杂的示例,显示输入到Entry小部件中的文本。Enter在“条目”小部件中按时会显示文本。
#!/usr/bin/env python
''' animate text in a tkinter canvas
See http://stackoverflow.com/q/34973060/4014959
Written by PM 2Ring 2016.01.24
'''
import Tkinter as tk
class Application(object):
def __init__(self):
root = tk.Tk()
self.canvas = tk.Canvas(root)
self.canvas.pack()
self.canvas_text = self.canvas.create_text(10, 10, text='', anchor=tk.NW)
self.entry = tk.Entry(root)
self.entry.bind("<Return>", self.entry_cb)
self.entry.pack()
root.mainloop()
def animate_text(self, text, delta):
''' Animate canvas text with a time delay given in milliseconds '''
delay = 0
for i in range(len(text) + 1):
update_text = lambda s=text[:i]: self.canvas.itemconfigure(self.canvas_text, text=s)
self.canvas.after(delay, update_text)
delay += delta
def entry_cb(self, event):
self.animate_text(self.entry.get(), 250)
app = Application()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句