Как сохранить Entry как переменную, которую можно использовать в уравнении, чтобы результат был напечатан в метке с помощью tkinter
Я пытаюсь взять запись из поля ввода и использовать их в уравнении. В основном это
Entry_one - Entry_two * entry_three / 12. Но я не могу понять, как это сделать. Чтобы сделать это более понятным, вот рабочий код Python:
a = int(input('Order Amount. '))
c = int(input('Beams Left. '))
l = int(input('Beam Length. '))
a1 = a-c
a2 = a1*l
a3 = a2/12
print ('The Hourly Count Is: ',a3)
Теперь вот код, который я пытаюсь заставить делать то же самое с tkinter:
from tkinter import *
root = Tk()
root.geometry('450x450')
root.title('Hourly Production Count')
def calc_result():
subtract_var = int(total_order_ent.get()) - int(beams_left_ent.get())
beams_left_var = int(subtract_var) * int(length_ent.get())
order_output = int(beams_left_var) / 12
answer_var = order_output.get()
label = Label(root,text = answer_var).pack()
button1 = Button(root,text = 'Enter',command = calc_result,fg='black',bg= 'green').pack()
total_order_ent = Entry(root).pack()
Beams_left_ent = Entry(root).pack()
length_ent = Entry(root).pack()
label_total = Label(root,text = 'Enter Total Order Amount').pack()
label_beams_left = Label(root,text = 'Enter Amount Left To Complete').pack()
root.mainloop()
Это то, что я до сих пор. Я еще не использовал размещение сетки для виджетов, так как я просто хочу, чтобы код работал до того, как я начну работать над тем, как он выглядит, но если кто-нибудь сможет мне помочь, это будет оценено. Я искал другие вопросы и изменил другой код, попробовал его как класс и другие вещи и просто не могу заставить его работать. некоторые ошибки, которые я получаю:
line 23, in <module>
label_length = Label('Enter Beam Length').pack()
Python\Python35\lib\tkinter\__init__.py", line 2109, in _setup
self.tk = master.tk
AttributeError: 'str' object has no attribute 'tk'
2 ответа
В вашем коде нет ошибки, о которой вы говорите. Единственный возможный способ получить эту конкретную ошибку, если вы пропустите первые три строки вашей программы после импорта, и установите root
в строку. Даже если вы сделаете это, вы получите немного другую ошибку - он будет жаловаться на первое использование Button
скорее, чем Label
как в твоем вопросе.
Я думаю, вы не используете точный код, который вы думаете. Несмотря на это, эта конкретная проблема связана с тем, что вы неправильно создали корневое окно и передаете строку в качестве родителя другим виджетам.
Как только вы решите эту проблему, вам также нужно будет решить проблему, указанную в этом вопросе: Tkinter: AttributeError: NoneType объект не имеет атрибута get. Короткая версия total_order_ent = Entry(root).pack()
установит total_order_ent
в None
, что делает невозможным получить значение виджета позже.
Вы можете создать переменную и получить ее с помощью метода get в вашей функции: как объяснено в следующей документации:
from tkinter import *
root = Tk()
var_01 = StringVar()
enter_01 = Entry(root, textvariable=var_01)
enter_01.pack()
def get_var():
getvar = var_01.get()
print(getvar)
button_01 = Button(root, text='print variable', command=get_var)
button_01.pack()
root.mainloop()