Python:如何在遍历列表时显示项目(Tkinter)

时间:2015-03-29 02:59:38

标签: python tkinter tkinter-canvas

我正在编写一个速读程序,在这里我带一个带有定义列表的.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)

1 个答案:

答案 0 :(得分:0)

使用create_方法时,将返回的值保存到变量中。然后,您可以使用configitemconfig将其切换为不同的文本,而不是一遍又一遍地创建新文本。例如,使用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

的大量重要信息