gpt4 book ai didi

python - Tkinter Entry - 当字段为空时输入新值时出现错误消息

转载 作者:行者123 更新时间:2023-12-01 08:27:27 26 4
gpt4 key购买 nike

在我的程序中,为一个变量分配了一个 tkinter 变量,然后对其进行跟踪:

self.tklon = tk.DoubleVar()
self.tklon.trace('w', self.trace_callback)

在 GUI 中,我有一个 Entry-widget 来保存此变量:

self.lonEntry = tk.Entry(frame, textvariable = self.tklon)

总的来说,一切正常。但是当我删除Entry的内容以输入新值时,Entry短暂为空。它仍然触发跟踪,因此,我收到以下错误消息:

File "xxxx", line 529, in get
return self._tk.getdouble(self._tk.globalgetvar(self._name))
_tkinter.TclError: expected floating-point number but got ""

trace_callback()函数中抛出错误消息的行是:

self.lon = self.tklon.get()

就我而言,它不会造成任何进一步的伤害,但终端中连续的错误消息很烦人。

我想可能有一个解决方案

a) 当 Entry 为空时设置默认值

b) 仅当您按键盘上的 Enter 时才更新分配给 Entry 的文本变量

但我没有在 Entry-widget 中看到任何此类选项。我想不出任何有效性检查,因为没有什么比 .get() 更原始的了,它会抛出错误......

我是否错过了正确的信息?还有其他解决方法吗?难道这个问题就没有解决办法吗?

感谢您给我的任何帮助!

最佳答案

问题似乎在于 textvariable 的本质如何在 tkinter 中工作。因此,当输入字段中的值发生变化时,它将将该值应用于相关变量。这是一个双。当将不是 double 兼容字符串的值应用于该变量时,就会遇到问题。

当您在 DoubleVar() 中使用 get() 时,实际发生的情况是 double var 尝试返回 double。但是,空字符串无法转换为 double 型,因此会出错。

处理此问题的一种简单方法是使用 try/except 语句处理错误。

尝试这个想法:

import tkinter as tk


root = tk.Tk()
tklon = tk.DoubleVar()

def trace_callback(*args):
try:
print(tklon.get())
except:
print("value not a valid double")


lonEntry = tk.Entry(root, textvariable=tklon).pack()
tklon.trace('w', trace_callback)
root.mainloop()

或者,可能是更好的选择,您可以将 DoubleVar() 更改为 StringVar() 并测试字符串是否为 double 。

import tkinter as tk


root = tk.Tk()
tklon = tk.StringVar()
tklon.set(0.0)


def trace_callback(*args):
if tklon.get().isdecimal():
print("Do stuff with decimal")
else:
print("Value is not a decimal")


lonEntry = tk.Entry(root, textvariable=tklon).pack()
tklon.trace('w', trace_callback)
root.mainloop()

关于python - Tkinter Entry - 当字段为空时输入新值时出现错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54150692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com