将 Tkinter 输入框转换为字符串的解决方法

Workaround to convert Tkinter entry box to string

我正在创建一个预算应用程序,我 运行 进入 ValueError: invalid literal for int() with base 10: ''。我知道你们中的很多人可能会评论说这个话题已经得到了回答,但我的情况还没有。我知道我不能将空字符串数据转换为整数,但是当涉及到 Tkinter 上的输入框时。在这种情况下,该值将由用户估算,但与此同时,框为空,直到用户输入响应。在某个时间点,代码在 month_amount 是局部变量。

然后我尝试将其设为全局变量,然后出现此错误。然后,当我将它切换回 calculate() 函数内的局部变量时,它给了我同样的错误。我最大的问题是我可以采取什么解决方法将输入框响应转换为 int() 数据? 我在下面添加了一段代码。

Month_entry = tk.Entry(root, font=('Arial', 12, "bold"))
Month_entry.grid(row=5, column=1, columnspan=1)
Month_entry.configure(width=68)
Month_entry.place(x=0, y=120)

def calculate():
    month_amount = int(Month_entry.get())

ValueError: invalid literal for int() with base 10: ''

没有必要的解决方法,您只需要使用标准的最佳做法。在您的情况下,您要么需要检测空字符串,要么在尝试转换空字符串时捕获错误,或者两者兼而有之。

例如,如果您想向用户报告错误,定义一个函数来执行此操作,然后捕获错误:

Month_entry = tk.Entry(root, font=('Arial', 12, "bold"))
...

def calculate():
    month = Month_entry.get()
    try:
        month_amount = int(month)
    except ValueError:
       report_error(f"month ('{month}') is not a valid number")

如果用户没有输入任何内容,另一个解决方案可能是将月份设置为默认值:

def calculate():
    month = Month_entry.get()
    if month == "":
        month = 0
    else:
        month = int(month)

或者,您可能希望将两者结合起来,以便您可以在捕获错误的同时优雅地处理空字符串。

可以说,最好的解决方案是让您在用户输入时验证数据,并且仅在所有输入都具有有效数据时才启用调用 calculate 函数的按钮。

有关如何进行条目验证的示例,请参阅 Interactively validating Entry widget content in tkinter