使用python3。我是tkinter的新手,编写了一个带有GUI的程序,该程序接受一些输入参数并进行一些数据处理,因此它需要输入框,我可以在其中键入数字。
我一辈子都不知道如何让输入框停止滞后,即:当一个框被点击并键入时,对该输入框中文本所做的更改直到我点击窗口中的另一个按钮或文本框时才会出现。从功能上讲,这个程序仍然是这样工作的,但看不到我正在键入的内容令人恼火,其他人最终会使用这个软件。
我已经解决了一半的问题,通过添加事件绑定,按键可以触发空闲任务的更新。现在,文本在键入时会更新,但它"慢了一个字母"(键入的字母只有在键入下一个字母后才会出现),这仍然不理想。
帮助?
MWE:
from tkinter import *
###Window: 'top'
top = Tk() #make window
top.geometry("670x360") #window size
top.wm_title("Test program for TKinter")#window title
#window and label background colour
bgcol='light sea green'
top.configure(background=bgcol) #set colour
#events to refresh window
def keypress(event):
print('key pressed')
#update all idle widgets (remove text box lag)
top.update_idletasks()
def mouseentry(event):
print('mouse entered text box')
#update all idle widgets (remove text box lag)
top.update_idletasks()
##text entry box
Label(top,background=bgcol, text="").pack() #spacing label
v = StringVar()
e=Entry(top, width=50, textvariable=v)#,height=1)
e.pack()
Label(top,background=bgcol, text="").pack() #spacing label
v.set("a default value")
s = e.get()
e.bind("<Key>",keypress)
e.bind("<Enter>",mouseentry)
#Label displaying text box contents (not working right now, not important)
Label(top,background=bgcol, textvariable=s).pack() #text display label
#make buttons appear on start
top.update()
top.mainloop()
如何在键入条目小部件时更新它?真的有什么简单的事情我忽略了吗?
回答自己的问题:
无论出于何种原因,无论是通过Anaconda还是通过终端运行,Mainloop都没有在我安装python的后台(或其他地方)运行。
简单地用python3.4重新安装AnacondaIDE就解决了我的所有问题。