在 Tkinter 中获取实时数据
Getting real time data in Tkinter
考虑以下代码:
from tkinter import *
screen = Tk()
e =Entry()
e.pack()
screen.mainloop()
现在如何实时显示e
条目小部件中输入的字符的长度?数据是显示在GUI还是对应终端都无所谓
这里至少有 3 种方法可以做到这一点,其中一种比另一种更好:
- 使用
StringVar
中的 trace
:
def func(*args):
print(len(var.get()))
var = StringVar()
e = Entry(screen,textvariable=var)
e.pack()
var.trace('w',func)
每次var
的值改变,都会调用func
。
- 使用
bind
每次按键释放:
def func(*args):
print(len(e.get()))
e.bind('<KeyRelease>',func)
- 使用
after(ms,func)
继续重复函数:
def func():
print(len(e.get()))
screen.after(500,func)
func()
如您所见,第一种方法更有效,因为当您 select 所有项目(使用 Ctrl+A)等。使用 after()
将是最荒谬的方法,因为它会一直打印长度,因为没有提供任何限制。
考虑以下代码:
from tkinter import *
screen = Tk()
e =Entry()
e.pack()
screen.mainloop()
现在如何实时显示e
条目小部件中输入的字符的长度?数据是显示在GUI还是对应终端都无所谓
这里至少有 3 种方法可以做到这一点,其中一种比另一种更好:
- 使用
StringVar
中的trace
:
def func(*args):
print(len(var.get()))
var = StringVar()
e = Entry(screen,textvariable=var)
e.pack()
var.trace('w',func)
每次var
的值改变,都会调用func
。
- 使用
bind
每次按键释放:
def func(*args):
print(len(e.get()))
e.bind('<KeyRelease>',func)
- 使用
after(ms,func)
继续重复函数:
def func():
print(len(e.get()))
screen.after(500,func)
func()
如您所见,第一种方法更有效,因为当您 select 所有项目(使用 Ctrl+A)等。使用 after()
将是最荒谬的方法,因为它会一直打印长度,因为没有提供任何限制。