python - 如何将 tkinter 输入小部件中的每个字符与外部文本文件中的行进行比较?

标签 python python-3.x tkinter

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

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 个一行句子。

我想将用户在输入小部件中键入的每个字符存储在变量(或列表或数组)中(无需按 Enter 键)。

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

最佳答案

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

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

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

更进一步,这些关联的变量允许您在每次变量由于条目更改而发生更改时执行函数/方法。如果您想在用户键入时执行某些操作(例如将条目内容与示例句子之一进行比较),这会很有帮助。在回调函数定义之后添加以下行以添加此功能:

a_var.trace_variable("w", callback)

关于python - 如何将 tkinter 输入小部件中的每个字符与外部文本文件中的行进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16883409/

相关文章:

python - 直接调用 fixture "setUp"。 Fixtures 不应该被直接调用

python - 获得 kolmogorov-smirnov 检验所需的临界值

python - 捕获键盘不允许改变焦点

python - 如何从列表 : python 中检索特定值

python - 如何在 python 中使用纬度和经度数据绘制 map 并突出显示 map 中的几个纬度和经度点?

python - ws4py.websocket : Closing connection from client long delay

python - 如何将标准输出重定向到 Tkinter 文本小部件

Python 模块位置

python - 如何在 tkinter Entry 小部件中插入临时文本?

python - Tk/Tkinter : Detect application lost focus