Как сохранить 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()
Другие вопросы по тегам