【问题标题】:Workaround to convert Tkinter entry box to string将 Tkinter 输入框转换为字符串的解决方法
【发布时间】:2021-08-06 22:27:33
【问题描述】:

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

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

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.get() 的结果保存在一个变量中。然后使用if 语句检查它是否为空字符串。如果不是,您可以尝试在其上使用int()
  • 在用户在所有条目中输入内容之前,您不应该调用calculate()。您是否有一个带有command=calculate() 的按钮(它调用函数立即,而不是等待按钮被点击)而不是command=calculate
  • 您能否详细说明一下,谢谢?你的意思是让month_amount = Month_entry.get()?我会用 if 语句做什么,这正是我主要困惑的地方。
  • 我不明白你在问什么。您似乎知道无法将空字符串转换为整数,那么为什么不检查输入字符串或捕获错误呢?您的代码负责清理用户输入。
  • 我确实有一个立即调用该函数的计算按钮。我会调整它,看看我是否得到同样的错误。

标签: python python-3.x tkinter tkinter-entry


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-10-22
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多