У нас есть несколько вещей, которые нужно исправить.
Сначала давайте сделаем import tkinter as tk
вместо использования *
Таким образом, мы не перезаписываем другие операции импорта.
Далее давайте очистим ваши переменные,Нам не нужно называть все.Просто то, что мы собираемся вызвать позже.
Далее нам нужно переместить angles = fir_angle.get() + sec_angle.get()
в вашу функцию, чтобы мы могли получить значения в тот момент, когда они необходимы.
Далее нам нужнопереименуйте вашу функцию в «function» - это имя внутреннего метода, и это вызовет проблемы.
Далее давайте исправим ваши операторы if.Мы можем просто проверить список значений и использовать format()
для текста.
Позволяет добавить некоторую обработку ошибок с помощью try / исключением.
Вы заметите, что я использую config()
для обновленияметки вместо того, чтобы пытаться размещать метки друг над другом.
import tkinter as tk
root = tk.Tk()
root.title('Complement angles calculator')
root.geometry('400x400+0+0')
fir_angle = tk.IntVar()
sec_angle = tk.IntVar()
tk.Label(root, text='Complement angles calculator', font=('arial', 20), fg='steelblue').pack()
tk.Label(root, text='First angle : ', font=('arial', 20), fg='black').place(x=10, y=80)
tk.Entry(root, width=15, textvariable=fir_angle, bg='#ffffff').place(x=185, y=92)
tk.Label(root, text='Second angle : ', font=('arial', 20), fg='black').place(x=10, y=120)
tk.Entry(root, width=15, textvariable=sec_angle, bg='#ffffff').place(x=220, y=132)
lbl1 = tk.Label(root, font=('arial', 15))
lbl1.place(x=155, y=250)
lbl2 = tk.Label(root, font=('arial', 15))
lbl2.place(x=50, y=300)
def func(): # do not call functions 'function' its a built in method
try:
angles = fir_angle.get() + sec_angle.get()
lbl1.config(text='Resault :')
if angles in [90, 180, 360]:
lbl2.config(text='These are {}° Complement angles'.format(angles))
else:
lbl2.config(text='These are &$#@ Complement angles')
except:
lbl1.config(text='Error :')
lbl2.config(text='Invalid values in entry fields')
tk.Button(root, text='Are these Complement angles ?', font=('arial', 15), command=func).place(x=50, y=175)
root.mainloop()
Я бы также рекомендовал использовать grid()
или pack()
вместо place()
для виджетов, так как его легче поддерживатьВаш код по мере роста.
Вот пример использования grid()
:
import tkinter as tk
root = tk.Tk()
root.title('Complement angles calculator')
root.geometry('400x300+0+0')
fir_angle = tk.IntVar()
sec_angle = tk.IntVar()
tk.Label(root, text='Complement angles calculator',
font=('arial', 20), fg='steelblue').grid(row=0, column=0, columnspan=2, sticky='w')
tk.Label(root, text='First angle: ', font=('arial', 20), fg='black').grid(row=1, column=0, sticky='e')
tk.Entry(root, width=15, textvariable=fir_angle, bg='#ffffff').grid(row=1, column=1)
tk.Label(root, text='Second angle: ', font=('arial', 20), fg='black').grid(row=2, column=0, sticky='e')
tk.Entry(root, width=15, textvariable=sec_angle, bg='#ffffff').grid(row=2, column=1)
lbl1 = tk.Label(root, font=('arial', 15))
lbl1.grid(row=4, column=0, columnspan=2, pady=(20, 0))
lbl2 = tk.Label(root, font=('arial', 15))
lbl2.grid(row=5, column=0, columnspan=2)
def func(): # do not call functions 'function' its a built in method
try:
angles = fir_angle.get() + sec_angle.get()
lbl1.config(text='Resault :')
if angles in [90, 180, 360]:
lbl2.config(text='These are {}° Complement angles'.format(angles))
else:
lbl2.config(text='These are &$#@ Complement angles')
except:
lbl1.config(text='Error :')
lbl2.config(text='Invalid values in entry fields')
tk.Button(root, text='Are these Complement angles ?', font=('arial', 15),
command=func).grid(row=3, column=0, columnspan=2)
root.mainloop()
Результаты: - Не уверен, почему это изображение такое большое.Фактическое изображение маленькое.
![enter image description here](https://i.stack.imgur.com/j0QNQ.png)