1

我正在用 Python 3 编写一个打字练习游戏,它利用了 tkinter。到目前为止,我的代码能够让用户输入内容并使用按钮打印他们输入的内容:

import random
from tkinter import *
root=Tk()
a=Canvas(root, width=500, height=500)
a.pack()
paralist = []
x=random.randint(1,10)
file = open("groupproject.txt")
line = file.readline()
for line in file:
    paralist.append(line.replace("\n", ""));

a.create_text(250,50, text = "Typing Fun", width = 500, font = "Verdana", fill = "purple")
a.create_text(250,300, text = paralist[x], width = 500, font = "Times", fill = "purple")

a = Entry(root, width = 100)
a.pack()
a.focus_set()

def callback():
    s = a.get()
    print (s)

b = Button(root, text="Enter", command=callback)
b.pack()

root.mainloop()

我的文本文件基本上是 10 个单行句子。

我想在输入时将用户在条目小部件中输入的每个字符存储在变量(或列表或数组)中(不按回车键。)

非常感谢您提前提供的帮助!!:D

4

1 回答 1

1

条目小部件可以绑定到关联的 Tkinter 字符串变量(StringVar类),这将导致StringVar实例在条目内容更改时自动更新。以下是原始代码中相关的修改行:

...
a = Entry(root, width = 100)
a_var = StringVar()
a["textvariable"] = a_var
...

现在调用变量get()上的方法a_var将为您提供条目内容,并将字符串传递给其set()方法将更新条目。

更进一步,这些关联变量允许您在每次变量因条目更改而更改时执行函数/方法。如果您想在用户键入时采取一些操作,这将很有帮助,例如将条目内容与您的一个例句进行比较。在函数定义附加以下行callback以添加此功能:

a_var.trace_variable("w", callback)
于 2013-06-02T14:37:03.607 回答