Не могу сделать так, чтобы после ввода данных в поля ввода эта формула считала результат: d = ((abs((x2 - x1)**2 - (y2 - y1)**2))**0.5) D = round(d,2)
from tkinter import *
from math import *
from tkinter import messagebox
# Window settings
root = Tk()
root.resizable(width=False, height=False)
root.geometry('800x600')
root.title('Coordinates calculator')
root.wm_attributes('-alpha', 0.9)
root['bg'] = '#ccc'
root.iconbitmap('C:/Users/YellowTOPT/Desktop/gerb.ico')
# Function
def count(event):
x1 = latitude1.get()
y1 = longitude1.get()
x2 = latitude2.get()
y2 = longitude2.get()
d = ((abs((x2 - x1)**2 - (y2 - y1)**2))**0.5)
D = round(d, 4)
messagebox.showinfo('Результат', f'Получилось{D}')
# Event
text_latitude1 = Label(text='Широта 1', font='Comfortaa 20',
fg='#3d3d42',
bg='#ccc',)
latitude1 = Entry(root, font='Consolas 13',
fg='#eff5c9',
bg='#48494f',
relief='solid',
justify='center')
text_longitude1 = Label(text='Долгота 1', font='Comfortaa 20',
fg='#3d3d42',
bg='#ccc',)
longitude1 = Entry(root, font='Consolas 13',
fg='#eff5c9',
bg='#48494f',
relief='solid',
justify='center')
text_latitude2 = Label(text='Широта 2', font='Comfortaa 20',
fg='#3d3d42',
bg='#ccc',)
latitude2 = Entry(root, font='Consolas 13',
fg='#eff5c9',
bg='#48494f',
relief='solid',
justify='center')
text_longitude2 = Label(text='Долгота 2', font='Comfortaa 20',
fg='#3d3d42',
bg='#ccc',)
longitude2 = Entry(root, font='Consolas 13',
fg='#eff5c9',
bg='#48494f',
relief='solid',
justify='center')
check_status = Checkbutton(text='Подтвердить начало расчёта.',
font='Comfortaa 13',
bg='#ccc',
fg='#3d3d42',
activebackground='#ccc',
activeforeground='#3d3d42')
enter=Button(text='Расчёт', font='Consolas 13',
fg='#eff5c9',
bg='#48494f',
relief='solid',
activebackground='#6e6f73',
activeforeground='#eff5c9')
# Packer
text_latitude1.pack()
latitude1.pack()
text_longitude1.pack()
longitude1.pack()
text_latitude2.pack()
latitude2.pack()
text_longitude2.pack()
longitude2.pack()
check_status.pack()
enter.pack()
# Bind
enter.bind('<Button-1>', count)
root.mainloop()
Ответы (2 шт):
Автор решения: Daniele_Taby
→ Ссылка
Похоже, у вас небольшая ошибка в коде. Координаты, которые вы получаете из виджетов ввода, представляют собой строки, и вам необходимо преобразовать их в числа (с плавающей запятой), прежде чем использовать их в математических операциях.
Автор решения: Daniele_Taby
→ Ссылка
def count(event):
try:
x1 = float(latitude1.get())
y1 = float(longitude1.get())
x2 = float(latitude2.get())
y2 = float(longitude2.get())
d = ((abs((x2 - x1)**2 - (y2 - y1)**2))**0.5)
D = round(d, 4)
messagebox.showinfo('Result', f'The result is {D}')
except ValueError:
messagebox.showerror('Error', 'Please enter valid numeric values for coordinates.')
исправлений вариант
Эта модифицированная функция использует float() для преобразования входных строк в числа. Кроме того, я изменил текст сообщения на английский для лучшей читаемости.
Теперь, если пользователь вводит нечисловые значения, будет отображаться сообщение об ошибке