我正在编写一个速读程序,在这里我带一个带有定义列表的.txt并显示关键字,同时在下面逐字打印定义,模拟Spritz speedreader。这一切都在Tkinter窗口中完成。
我已经组成了一个list keyword = i [0],其中包含.txt中每一行(i)的关键字,以及一个包含定义的列表定义= i [1:],每个单词它自己的代币。
例如,如果.txt的line1是" bug:程序中的错误"我需要输出看起来像这样。
bug:
an
然后
bug:
error
依此类推,直到定义结束。然后," bug"被替换为要定义的下一个单词。
所以...我该如何保持" bug"在那里,贯穿定义的每个单词? 这是我的一部分。它目前还会将这些单词打印在一起,因此我需要删除每个单词,然后再将其替换为另一个单词。这是我第一次使用Tkinter,所以请耐心等待。
def cycle_text(root, canvas, file_name, width, height, font_size, wpm):
canvas.create_rectangle(0, 0, width, height, fill='Beige')
topics = write_title(file_name)
information = write_info(file_name)
pause = 60/wpm
for i in topics:
canvas.create_text(200, 200, text=i, font = ('Courier', font_size))
for j in information:
for z in j:
canvas.create_text(250, 250, text=z, font = ('Courier', font_size))
time.sleep(pause)
答案 0 :(得分:0)
使用create_
方法时,将返回的值保存到变量中。然后,您可以使用config
或itemconfig
将其切换为不同的文本,而不是一遍又一遍地创建新文本。例如,使用Label
小部件:
wordlist = ['an', 'error', 'in', 'a', 'program']
def nextword(self, which):
definitionword.config(text=wordlist[which])
if which+1 < len(wordlist):
self.root.after(self.wpm*1000/60, lambda: nextword(which+1))
self.theword = Label(self.canvas, text='bug')
self.theword.grid(row=0, column=0)
self.definitionword = Label(self.canvas, text='')
self.definitionword.grid(row=1, column=0)
self.nextword(0)
这是近似值。您需要使用自己的数据结构和名称。
如果您更倾向于使用Canvas
窗口小部件create_text
而不是Label
,请尝试以下操作:
self.definitionword = self.canvas.create_text(250, 250, text=wordlist[0])
self.canvas.itemconfig(self.definitionword, text=wordlist[1])
基本上,您将定义的单词与构成其定义的单词列表分开,然后重复重新定义定义中的单词&#34;小部件,用于显示定义中下一个单词的文本。
请勿使用time.sleep
延迟tkinter
中的活动 - tkinter
更新其展示的方式会使sleep
无法正常运作。请改用after
方法。
查看tkinterbook on Effbot,了解有关tkinter
。