получение целочисленного значения из виджета записи в tkinter - PullRequest
0 голосов
/ 10 апреля 2020

Я написал простой код, описывающий мою проблему: я хочу получить целочисленное значение из записи, чтобы использовать его позже. Я также попытался использовать спин-бокс. Вот мой код:

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 ]

1 голос
/ 10 апреля 2020

есть несколько проблем в вашем примере, например. в какой момент вы пытаетесь получить значение из 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

1 голос
/ 10 апреля 2020

ValueError: недопустимый литерал для int () с основанием 10 ''

означает, что вы пытаетесь преобразовать строку "" в целое число. Это, конечно, неверно. Причина, по которой вы пытаетесь преобразовать пустую строку в целое число, заключается в том, что вы не разрешаете помещать какое-либо значение в запись.

Хороший способ добиться этого - использовать кнопку, которая вызывает функцию, чтобы получить значение в записи и распечатать его. Кроме того, вам не хватает строки 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()

Этот код будет по-прежнему возвращать ошибки, если значение в записи не является допустимым целым числом, поэтому, если вы хотите, чтобы оно было устойчивым, вам придется поиграться с ним.

...