Python 3 : Tkinter: How to change Entry. get() 成整数

标签 python tkinter integer tkinter-entry

我正在编写一个将英制单位转换为公制单位的简单程序。但是,当我使用 Entry.get() 命令时,我需要将其转换为整数,而当我尝试这样做时

我收到这个错误:

Traceback (most recent call last):
  File "C:/Users/Bill/converter.py", line 18, in <module>
    conversion=int(e.get())
ValueError: invalid literal for int() with base 10: ''

我尝试运行我正在做的事情的一个非常基本的版本(写在下面),但仍然导致同样的错误。

import tkinter
root= tkinter.Tk()

e=tkinter.Entry(root)
e.pack()

b=tkinter.Button(root, command= lambda: print(e.get()))
b.pack()

conversion=int(e.get())
conversion= conversion* 1.8 +32
l = tkinter.Label(root, text=conversion)

top.mainloop()

我最近才重新开始编码,所以答案可能非常简单,但我错过了,但感谢您的回答。

最佳答案

问题和错误说明是空字符串 '' 无法转换为整数。

其实很多字符串是不能转换成整数的。 在您的情况下, int(e.get()) 引发错误,因为条目为空,但 int('') 引发错误。 因此,您需要在转换之前验证您的输入,以便仅当它包含整数的字符串表示时才对其进行处理。

您可以将 try-except 包装在 get_value 函数中:

def get_value(entryWidget):
    value = entryWidget.get()
    try:
        return int(value)
    except ValueError:
        return None

然后,不要将 lambda: print(e.get()) 设置为按钮的回调,而是传递 lambda: print(get_value(e))。 如果该值可以解析为一个整数,这将打印 int(e.get()) 的结果。 如果不能,这将打印 None


这是您的代码的修改版本:

import tkinter
root= tkinter.Tk()

def get_value(entryWidget):
    value = entryWidget.get()
    try:
        return int(value)
    except ValueError:
        return None


e = tkinter.Entry(root)
e.pack()

b = tkinter.Button(root, command=lambda: print(e.get()))
b.pack()

conversion = get_value(e)
if conversion is not None:
    conversion *= 1.8 + 32
l = tkinter.Label(root, text=conversion)

top.mainloop()

然而,这有点尴尬。 由于条目的内容在主循环之前被捕获,因此后者将始终为空。

在处理 GUI 时,您不能像平时那样按顺序思考。 您应该要求按钮在按下时更新标签的内容,以便显示转换结果:

import tkinter


def get_value(entryWidget):
    value = entryWidget.get()
    try:
        return int(value)
    except ValueError:
        return None

def convert(value):
    if value is None:
        return None
    else:
        return 1.8*value + 32

def set_label_text(label, entry):
    value = convert(get_value(entry))
    if value is None:
        label['text'] = "Enter an integer"
    else:
        label['text'] = value


root = tkinter.Tk()

e = tkinter.Entry(root)    
l = tkinter.Label(root, text="")
b = tkinter.Button(root, text="Convert", command=lambda: set_label_text(l, e))

e.pack()
l.pack()
b.pack()

root.mainloop()

关于Python 3 : Tkinter: How to change Entry. get() 成整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46036863/

相关文章:

python - Tkinter 快速阅读器

python - 如何使用 Python 生成随机 N 维旋转矩阵?

python - Qt Designer 是否与 Anaconda 捆绑在一起?

Python - Tkinter - 有趣的 place()

python - 在包含整数和字符串混合的数据框中查找最小/最大值

ios - 将正数转换为负数 - iOS

C# SqlDataReader for int

python : Change datatype of hdf5 array

python - Pandas 没有正确计算行数

python - 有没有办法在 Tkinter 中使用功能区工具栏?