Не могу сделать так, чтобы после ввода данных в поля ввода эта формула считала результат: 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() для преобразования входных строк в числа. Кроме того, я изменил текст сообщения на английский для лучшей читаемости.

Теперь, если пользователь вводит нечисловые значения, будет отображаться сообщение об ошибке

→ Ссылка