我的程序的目的是在文本编辑器中记录按键,并用计时器实时显示。其功能类似于手动打开文本编辑器并键入,从而提供即时反馈。
下面的代码将按键记录到文本编辑器中,但只有在程序完成后才会显示输出。如何打开txt文件并实时显示按键和计时器值?
from tkinter import *
import time
import keyboard
root = Tk()
root.title('quick_data')
session_duration = IntVar()
def startSession():
f = open("quick_data.txt", "a")
for remaining in range(1, int(session_duration.get() + 1), +1):
if (keyboard.is_pressed("a")):
r = "{:2d} s".format(remaining) + " --> response 1"
elif (keyboard.is_pressed("b")):
r = "{:2d} s".format(remaining) + " --> response 2"
else:
r = "{:2d} s".format(remaining)
f.write(r)
f.write("\n")
f.flush()
time.sleep(1)
Label(root, text="Session duration").grid(row=1, sticky=W)
Entry(root, textvariable = session_duration).grid(row=1, column=1, sticky=E)
WSignUp = Button(root, text="Start Session", command=startSession).grid(row=3, column=0, sticky=W)
root.mainloop()发布于 2021-05-11 07:42:20
您可以使用widget Text并直接写入widget。
当你在循环中运行代码时,它会阻塞tkinter。它等待函数结束后更新窗口中的内容。您需要使用root.update()来强制tkinter更新window中的内容。
from tkinter import *
import time
import keyboard
# --- functions --- # PEP8: `lower_case_names` for functions
def start_session():
for remaining in range(1, session_duration.get()+1, 1):
if (keyboard.is_pressed("a")):
r = "{:2d} s".format(remaining) + " --> response 1"
elif (keyboard.is_pressed("b")):
r = "{:2d} s".format(remaining) + " --> response 2"
else:
r = "{:2d} s".format(remaining)
text.insert('end', r + '\n')
root.update()
time.sleep(1)
# --- main ---
root = Tk()
root.title('quick_data')
session_duration = IntVar(value=5)
Label(root, text="Session duration").grid(row=1, sticky=W)
Entry(root, textvariable = session_duration).grid(row=1, column=1, sticky=E)
WSignUp = Button(root, text="Start Session", command=start_session).grid(row=3, column=0, sticky=W)
text = Text(root)
text.grid(row=4, column=0, columnspan=2)
root.mainloop()https://stackoverflow.com/questions/67478092
复制相似问题