从tkinter中的条目小部件中获取整数值

时间:2020-04-10 10:45:26

标签: python tkinter integer tkinter-entry

我写了一些简单的代码来描述我的问题:我想从一个条目中获取一个整数值以供以后使用,我还尝试使用旋转框。这是我的代码:

from tkinter import*       
win=Tk()
win.geometry('300x200')
e=Entry(width=10)
e.pack()
y=int(e.get())
print(y*2)

我总是遇到相同的错误:

y = int(e.get())
ValueError:int()以10为底的无效文字''

我不知道为什么会这样!

2 个答案:

答案 0 :(得分:1)

ValueError:以10为底的int()的无效文字''

表示您正在尝试将字符串“”转换为整数。当然,这是无效的。您尝试将空字符串转换为整数的原因是,您不允许将任何值放入条目中。

允许这种情况发生的一种好方法是使用一个按钮,该按钮调用一个函数以获取条目中的值并进行打印。另外,您缺少在代码末尾需要的行win.mainloop()

这是您可能需要的示例代码:

from tkinter import *

win = Tk()
win.geometry('300x200')

def printVal():
    y = int(e.get())
    print(y*2)

e = Entry(width=10)
e.pack()
b = Button(text="push me to print the value in e")
b.pack()

win.mainloop()

如果条目中的值不是有效的整数,则此代码仍将返回错误,因此,如果要使其健壮,则必须对其进行处理。

答案 1 :(得分:1)

例如,在您的示例中有几个问题。您正试图在哪一刻从Entry中获得价值?

您的代码应类似于:

from tkinter import *


def validate(value):
    print (value)
    try:
        if value:
            return int(value)
    except:
        return None

def calculate():
    x = e1.get()
    x_validate = validate(x)

    if x_validate == None:
        e1.delete(0, END)
        e1.insert(0, 'you need to enter integer')
        Label1.config(text='')
    else:
        result = x_validate*2
        Label1.config(text=result)


win = Tk()

e1 = Entry(win)
e1.grid(row=0, column=0)

Button(win,text='Calculate', command = calculate).grid(row=0, column=1)
Label(win,text='Result').grid(row=1, column=0)
Label1 = Label(win)
Label1.grid(row=1, column=1)


win.mainloop()

示例,如果您输入整数并按计算

enter image description here

示例,如果您输入字符串并按计算

enter image description here