@journey654645

Как исправить ошибку?

Traceback (most recent call last):
File "C:\Users\Admin\PycharmProjects\pythonProject\main.py", line 63, in
x1 = - c + sqrt(c ** 2 + 4 * (d * b)) / 2 * b
TypeError: bad operand type for unary -: 'str'

Мой код
<code>
import tkinter as tk
from math import *
window = tk.Tk()
class App(tk.Tk):
    def __init__(self):
        super().__init__()
        frame = tk.Frame(self, bg="green",
                         height=100, width=100)
        frame.bind("<Button-1>", self.print_event)
<spoiler title="">label = tk.Label(text="Какое уравнение вы хотите решить?:\n1.Линейное;\n2.Квадратное")
entry = tk.Entry()
label.pack()
entry.pack()
a = entry.get()
button = tk.Button(
    text="Готово",
    width=5,
    height=1,
    bg="white",
    fg="black",
)
button.pack()
label = tk.Label(text="Введите коэфициент перед x в квадрате:")
entry = tk.Entry()
label.pack()
entry.pack()
b = entry.get()
button = tk.Button(
    text="Готово",
    width=5,
    height=1,
    bg="white",
    fg="black",
)
button.pack()
label = tk.Label(text="Введите коэфициент перед x:")
entry = tk.Entry()
label.pack()
entry.pack()
c = entry.get()
button = tk.Button(
    text="Готово",
    width=5,
    height=1,
    bg="white",
    fg="black",
)
button.pack()
label = tk.Label(text="Введите коэфициент с:")
entry = tk.Entry()
label.pack()
entry.pack()
d = entry.get()
button = tk.Button(
    text="Готово",
    width=5,
    height=1,
    bg="white",
    fg="black",
)
button.pack()
</spoiler>
x1 = - c + sqrt(c ** 2 + 4 * (d * b)) / 2 * b
x2 = - c - sqrt(c ** 2 + 4 * (d * b)) / 2 * b
label = tk.Label(text = x1)
label.pack()
label = tk.Label(text= x2 )
window.mainloop()
</code>

Traceback
тут должен быть полный текст ошибки
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
journey654645, теперь достаточно, хотя в целом есть над чем поработать.

Смотрите, что у вас получается по программе:
у вас запуск исполнения графического интерфейса стартует после вот этих строк:
x1 = - c + sqrt(c ** 2 + 4 * (d * b)) / 2 * b
x2 = - c - sqrt(c ** 2 + 4 * (d * b)) / 2 * b

но переменные, которые используются в этих строках, содержат в момент их выполнения пустые строки. Об этом, собственно, и сообщает программа в traceback.

Я подозреваю, что они не должны выполняться до того, как стартует интерфейс, пользователь введет в него данные, и уж тогда эти данные должны попасть в переменные и наконец в эти строки расчета Х-ов.

Полагаю, вам надо перестроить архитектуру программы, как именно - вам решать. Я бы вынес эти формулы в метод или функцию, добавил проверку нажатия кнопок (я что-то не нашел в вашем коде этого момента) и по нажатию - вызывал бы расчетную функцию и получал бы из неё результаты и тогда вызывал бы другой метод, который выводил бы ответы на экран. Ну, это навскидку, тут надо подумать, как лучше.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы