簡體   English   中英

Python:如何在遍歷列表時顯示項目(Tkinter)

[英]Python: how to display an item while iterating through a list (Tkinter)

我正在編寫一個速讀程序,在其中將.txt與定義列表一起顯示並顯示關鍵字,同時在下面逐字打印定義,以模擬Spritz快速閱讀器。 所有這些都在Tkinter窗口中完成。

我組成了一個列表關鍵字= 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)

使用create_方法時,請將返回值保存到變量。 然后,您可以使用configitemconfig將其切換為其他文本,而不是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])

基本上,將定義的單詞與組成其定義的單詞列表分開,然后重復重新配置“定義中的單詞”小部件以顯示定義中下一個單詞的文本。

不要使用time.sleep來延緩事件tkinter -的方式tkinter更新其顯示使sleep不能起到你所期望的。 請改用after方法。

退房的Effbot tkinterbook為大量的有關重大信息tkinter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM