首页 > 解决方案 > 使用 tkinter 从文件中读取行

问题描述

我已经完成了一个打字导师项目,现在我想制作它的 GUI 版本。所以,我试图逐行读取文件到 tkinter,用户必须逐行键入每一行。这意味着如果他正确输入了第一行,第二行就会显示出来,直到最后。

这是我的代码:

import tkinter as tk

root = tk.Tk()
root.resizable(True, True)
frame = tk.Frame(root)
frame.pack()

def callback(sv):
    print(sv.get())
    return sv.get()

sv = tk.StringVar(root)
sv.trace("w", lambda name, index, mode, sv=sv: callback(sv))


with open('sentences.TXT', 'r') as myfile:
     cnt = 1
     for line in myfile:
         # var = tk.StringVar(root)
         label = tk.Label(root, textvariable=sv, relief=tk.RAISED)
         sv.set(line)
         cnt +=1
         label.pack()
         e = tk.Entry(root, textvariable=sv)
         e.pack()


root.mainloop()

我的老师告诉我不要使用 for 循环!但是如果没有for循环,那么,如何逐行打印?我希望有人能帮我解决这个问题,谢谢!

标签: pythoncsvtkinter

解决方案


您可以手动调用next文件对象以获取下一句:

import tkinter as tk

root = tk.Tk()

f = open('sentence.txt', 'r')

label = tk.Label(root,text="")
label.pack()
tk.Button(root,text="Click for next",
          command=lambda: label.config(text=next(f))).pack()

root.mainloop()

请注意,StopIteration当迭代器耗尽时,这将引发错误 - 您可以通过创建函数并添加try...except块来捕获它。


推荐阅读