TypeError: unsupported operand type(s) for -: 'function' and 'str'

Novichok

Новичок
Пользователь
Янв 4, 2021
19
1
3
Если человек набирает 50, то он побеждает. Но как всегда ошибка! Да ещё их много! Пока я искал ошибку, чуть не .... Спасите!!!
Да код большой... Сори! Опыта мне ещё не хватает, но знали бы вы сколько мне лет, то простили...
Python:
from tkinter import *
from tkinter import messagebox
import tkinter as tk
from tkinter import ttk

root = Tk()
root.title("Вычислитель")
root.geometry("250x160")

root1 = Tk()
root1.title("Числа")
root1.geometry("300x500")

app = tk.Tk()
app.geometry('269x165')

labelTop = tk.Label(app,
                    text="Действие")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app,
                            values=[
                                "Разделить",
                                "Умножить",
                                "Прибавить",
                                "Вычесть"],
                            state="readonly")

comboExample.grid(column=0, row=1)
comboExample.current(2)

print(comboExample.current(), comboExample.get())


labelTop1 = tk.Label(app,
                    text="Число")
labelTop1.grid(column=1, row=0)
comboExample1 = ttk.Entry(app)
comboExample1.grid(column=1, row = 1)

RRR= ttk.Label(text="==================================")
RRR.place(x = 0, y = 45 )

labelTop = tk.Label(app,
                    text="Действие")
labelTop.place(x=45, y = 70)

i = StringVar()
comboExample6 = ttk.Combobox(app,
                            values=[
                                "Разделить",
                                "Умножить",
                                "Прибавить",
                                "Вычесть"],
                            state="readonly")

comboExample6.place(x=0, y=95)

labelTop2 = tk.Label(app,
                    text="Число")
labelTop2.place(x=185, y=70)
comboExample3 = ttk.Entry(app)
comboExample3.place(x=143, y = 95)

ппп = Button(app, text = "Создать", width=8, background="#999", foreground="#fff", font=("Verdana", 14, "bold"), command=lambda: i())
ппп.place(x= 80, y = 120)

i = 0




def i():
    comboExample12 = comboExample1.get()
    выполнить = str(comboExample.get()) + str(comboExample12)
    Прибавить = Button(root, text=выполнить, width=15, background="#999", foreground="#fff", font=("Verdana", 14, "bold"),
                   command=lambda: gh())
    или = Label(root, text="\nИЛИ\n", font=("Arial Bold", 12))

    comboExample11 = comboExample6.get()
    выполнить1 = str(comboExample11) + str(comboExample3.get())
    Умножить = Button(root, text=выполнить1, width=15, background="#999", foreground="#fff", font=("Verdana", 14, "bold"),
                  command=lambda: hg())


    def gh():
        global i
        if comboExample == "Разделить":
            i = i / comboExample1.get()
            if i == 50:
                число1 = Label(root1, text="Вы делили на"+ comboExample1 + "и у вас получилось 50! Победа!")
                число1.pack()
                messagebox.showinfo("Ура!", "Вы решили задачу! Ваше число - 50")
            else:
                print("Вы делили на " + comboExample1 + " 1 к числу!", " Ваше число", i)
            число = Label(root1, text="Вы делили на " + comboExample1 + "!" + " Ваше число - " + str(i))
            число.pack()
        elif comboExample == "Умножить":

            i = i * comboExample1.get()
            if i == 50:
                число1 = Label(root1, text="Вы умножили на "+comboExample1+" и у вас получилось 50! Победа!")
                число1.pack()
                messagebox.showinfo("Ура!", "Вы решили задачу! Ваше число - 50")
            else:
                print("Вы умножили число на "+comboExample1+"!", " Ваше число", i)
            число = Label(root1, text="Вы умножили цифру 1 к числу !" + " Ваше число - " + str(i))
            число.pack()
        elif comboExample == "Прибавить":

            i = i + comboExample1.get()
            if i == 50:
                число1 = Label(root1, text="Вы прибавили 1 и у вас получилось 50! Победа!")
                число1.pack()
                messagebox.showinfo("Ура!", "Вы решили задачу! Ваше число - 50")
            else:
                print("Вы прибавили цифру 1 к числу!", " Ваше число", i)
            число = Label(root1, text="Вы прибавили цифру 1 к числу !" + " Ваше число - " + str(i))
            число.pack()
        else:
            i = i - comboExample1.get()
            if i == 50:
                число1 = Label(root1, text="Вы вычли "+comboExample1 +" и у вас получилось 50! Победа!")
                число1.pack()
                messagebox.showinfo("Ура!", "Вы решили задачу! Ваше число - 50")
            else:
                print("Вы вычли цифру "+comboExample1+" к числу!", " Ваше число", i)
            число = Label(root1, text="Вы вычли цифру "+comboExample1+" к числу !" + " Ваше число - " + str(i))
            число.pack()


    def hg():
        if comboExample6 == "Разделить":
            i = i / comboExample3.get()
            if i == 50:
                число1 = Label(root1, text="Вы делили на" + comboExample3 + "и у вас получилось 50! Победа!")
                число1.pack()
                messagebox.showinfo("Ура!", "Вы решили задачу! Ваше число - 50")
            else:
                print("Вы делили на " + comboExample3 + " 1 к числу!", " Ваше число", i)
                число = Label(root1, text="Вы делили на " + comboExample3 + "!" + " Ваше число - " + str(i))
                число.pack()
        elif comboExample6 == "Умножить":

                i = i * comboExample6.get()
                if i == 50:
                    число1 = Label(root1,
                                       text="Вы умножили на " + comboExample3 + " и у вас получилось 50! Победа!")
                    число1.pack()
                    messagebox.showinfo("Ура!", "Вы решили задачу! Ваше число - 50")
                else:
                    print("Вы умножили число на " + comboExample3 + "!", " Ваше число", i)
                    число = Label(root1, text="Вы умножили цифру "+comboExample3+" на число !" + " Ваше число - " + str(i))
                    число.pack()
        elif comboExample6 == "Прибавить":

                i = i + comboExample3.get()
                if i == 50:
                    число1 = Label(root1, text="Вы прибавили "+comboExample3+" и у вас получилось 50! Победа!")
                    число1.pack()
                    messagebox.showinfo("Ура!", "Вы решили задачу! Ваше число - 50")
                else:
                    print("Вы прибавили цифру "+comboExample3+" к числу!", " Ваше число", i)
                    число = Label(root1, text="Вы прибавили цифру "+comboExample3+" к числу !" + " Ваше число - " + str(i))
                    число.pack()
        else:
                i = i - comboExample3.get()
                if i == 50:
                    число1 = Label(root1, text="Вы вычли " + comboExample3 + " и у вас получилось 50! Победа!")
                    число1.pack()
                    messagebox.showinfo("Ура!", "Вы решили задачу! Ваше число - 50")
                else:
                    print("Вы вычли цифру " + comboExample3 + " к числу!", " Ваше число", i)
                    число = Label(root1,
                                  text="Вы вычли цифру " + comboExample3 + " к числу !" + " Ваше число - " + str(i))
                    число.pack()
    Прибавить.pack()
    или.pack()
    Умножить.pack()

root.mainloop()

python 3.8 Windows 10 Pro
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 618
469
83
в ошибке сказано что вы пытаетесь применить математическое действие (минус) между функцией и строкой, этого делать нельзя...

i - это у вас функция, если вы думаете что i у вас число и вы его определили здесь i = 0, это не так, вы переопределили имя i тут def i(),
и вы пытаетесь с этой функцией сделать математические операции, так нельзя...

имена переменных русскими словами, это конечно работает, но так не принято...

и многое другое...

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

Novichok

Новичок
Пользователь
Янв 4, 2021
19
1
3
в ошибке сказано что вы пытаетесь применить математическое действие (минус) между функцией и строкой, этого делать нельзя...

i - это у вас функция, если вы думаете что i у вас число и вы его определили здесь i = 0, это не так, вы переопределили имя i тут def i(),
и вы пытаетесь с этой функцией сделать математические операции, так нельзя...

имена переменных русскими словами, это конечно работает, но так не принято...

и многое другое...


это похвально, что с малого возраста вы пытаетесь что то сделать...
но мой совет, почитайте книгу по питону, любую, с упражнениями в конце глав...
это вам поможет понять много вещей...
Спасибо! Вы мне очень сильно помогли! Ошибка тупая... Сам знаю. Сейчас я уже дописал программу! Спасибо!
Волшебный .get()
 

Форум IT Специалистов