Python 使用tkinter从文件中读取行

Python 使用tkinter从文件中读取行,python,csv,tkinter,Python,Csv,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.

我已经做了一个打字指导项目,现在我想做一个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循环,那么,如何逐行打印呢?
我希望有人能想出办法帮我解决这个问题,谢谢

您可以在文件对象上手动调用
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
块来捕获它。

您可以使用
readline()
获取文件中的下一句话。