键入时,Tkinter条目小部件滞后。如何实时更新键入的文本?

时间:2015-06-29 10:04:10

标签: user-interface python-3.x tkinter event-handling widget

使用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()

如何在键入时更新条目小部件?有什么东西真的很简单,我忽略了吗?

1 个答案:

答案 0 :(得分:0)

回答自己的问题:

无论出于何种原因,Mainloop都没有在我的python安装的后台(或其他东西)中运行,无论是通过Anaconda还是通过终端运行。

使用python3.4简单地重新安装Anaconda IDE修复了我的所有问题。