Получить целое число от входа - PullRequest
5 голосов
/ 17 ноября 2010

Как получить целочисленный тип из виджета Tkinter Entry?

Если я пытаюсь получить значение с помощью variable_name.get(), он говорит, что это str.Если я пытаюсь изменить тип с помощью int(variable_name.get()), он говорит, что int может принимать только строку или число.

Любая помощь будет приветствоваться!

Ответы [ 6 ]

4 голосов
/ 17 марта 2014

В конце я просто инициализировал переменную как tk.IntVar() вместо tk.StringVar()

Таким образом, вам не нужно приводить ее как целое число, оно всегда будет одним, и значение по умолчаниюиз элемента Entry теперь будет 0 вместо ''

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

1 голос
/ 25 декабря 2013

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

Я предлагаю вам попробовать добавить оператор if для проверки этого случая:

if variable.get() != '':
    other_variable = int(variable.get())

Я понимаю, что вопрос старый, но у меня это сработало, и я подумал, что поделюсь.

1 голос
/ 14 апреля 2011

Я недавно столкнулся с этой же проблемой.У меня был запущен небольшой метод:

newSave = self.EntryDict[key].get
        try: 
            int(newSave)
            bool = True
        except ValueError:
            bool = False

И я получил сообщение о том, что вы описываете, что он может принимать только строку или число.И моя проблема была в том, что у моего .get не было скобок.После того как я поставил .get () все заработало.Я думаю, что это тоже может быть вашей проблемой.Но, не видя ни одного вашего кода, я точно не знаю.

1 голос
/ 17 ноября 2010

См. Следующий пример из Tkinter:

v = StringVar()
e = Entry(master, textvariable=v)
e.pack()

v.set("a default value")
s = v.get()

v - это класс StringVar. попробуйте сделать - int (str (variable.get ()))

Но класс говорит, что variable.get должен вернуть вам строку.

Tkinter Entry имеет текстовое значение по умолчанию, которое может быть проблемой, если это не целочисленные данные.

0 голосов
/ 20 апреля 2017
int(str(variable.get()))

Я пробую это, и теперь оно работает.

0 голосов
/ 18 ноября 2010

Когда вы говорите «переменная» в своем вопросе, вы имеете в виду экземпляр StringVar или ссылку на сам виджет?

Если у вас есть ссылка на виджет, вы можете использоватьget метод записи.Это вернет строку, которую вы можете затем передать функции int:

s = e.get()
i = int(s)

Если это не решит вашу проблему, вы можете предоставить какой-нибудь рабочий код, который точно показывает проблему, с которой вы столкнулись?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...