2015-12-03 6 views
0

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

def copy(Orn, Orc, Stage): 
    for a in range(1, 10): 
     for b in range(1,Stage): 

import Tkinter as T 
top= T.Tk() 
L1=T.Label(text="Order Number").grid(row=0, column=0) 
E1=T.Entry().grid(row=0,column=1) 
L2=T.Label(text="Number of Compounds").grid(row=1,column=0) 
E2=T.Entry().grid(row=1,column=1) 
L3=T.Label(text="Number of Stages").grid(row=2,column=0) 
E3=T.Entry().grid(row=2, column=1) 
B1=T.Button(text="Extract", command=copy(E1, E2, E3)).grid(row=3,column=0) 
top.mainloop() 

Я получаю ошибку range() integer end argument expected, got NoneType. Как получить значение начального быть целым числом? Я также попытался:

e3=E3.get() 

, как было показано, в чьем-то подобный вопрос, но я получаю сообщение об ошибке: NoneType object has no attribute get. Что мне не хватает?

ответ

0

Вы вернетесь в использовании E3.get(), чтобы получить значение виджета Entry. Но ошибка NoneType object has no attribute get является результатом размещения вашего оператора Grid в той же строке, что и создание вашего виджета. Всегда разделяйте их. Поэтому используйте

E3 = T.Entry() 
E3.grid(row=2,column=1) 

В противном случае он устанавливает значение вашего виджета в None, потому что это то, что возвращает инструкция Grid.

+0

Большое вам спасибо, что подводит меня к следующей ошибке, которую я получаю. 'e3 = int (E3.get())' дает мне 'недопустимый литерал для int() с базой 10.' Я попробовал «float», и я получаю «невозможно преобразовать строку в float». – zw1ck

+0

@ zw1ck Я не совсем уверен, что попадает в поле, но эта ошибка, вероятно, связана с тем, что в строке есть пробел. Используйте .strip(), чтобы избавиться от любого пробела, а затем преобразовать его в int. –

+0

Я не уверен, где происходит целочисленное преобразование, но это, скорее всего, связано с 'command'. При назначении функций виджетам вы должны отбрасывать '()' и использовать 'command = function', однако, если вы хотите передать переменные, вам нужно использовать' lambda', например 'command = lambda: function (a, b, c) '. Если вы этого не сделаете, используйте 'command = function()' или 'command = function (a, b, c)', тогда он будет вызываться вместо назначенного. Вот почему вы получаете ошибку, потому что вы не можете преобразовать пустую строку в int (поскольку запись пуста). –

Смежные вопросы