1

Тема: При підключенні команди на кнопку пропадає сама кнопка

Доброго вечора, шановні форумчани. Доньці у школі на інформатиці задали практичну роботу. Вирішив реалізувати у графічному інтерфейсі, але мізків не вистачає. Дуже прошу допомогти.

Є титульна сторінка з переліком із 7 завдань (кожному відповідає кнопка)
При натисканні на кнопку завдання повинне відкриватися віконце з його виконанням, де у форми вводяться дані згідно з завданнями та виходить результат обчислення примітивними формулами.

Я ніколи не стикався з цією мовою програмування, тому й уперся в проблемку. Завдання 1, кнопка повинна рахувати, але коли прикріплюю до неї def Calc(), то зникає сама кнопка.

Буду дуже вдячний за допомогу

python-3.11.1-amd64

from tkinter import *
import tkinter as tk

class Main(tk.Tk):

    def __init__(self,*args, **kwargs):
        tk.Tk.__init__(self,*args, *kwargs)
        self.title("Практична робота №9")
        self.geometry("900x450")
        self.resizable(False, False)

    
    

        lab1 = Label(text="Практична робота №9",font=20)         
        lab1.pack()
        lab2 = Label(text="учениці 8А класу",font=16)  
        lab2.pack()
        lab3 = Label(text="Ц***** Аріни",font=16)  
        lab3.pack()
        #Кнопка "Задача 1. Створити програму для розв’язування рівнянь"
        self.button = tk.Button(self,text="Задача 1", command=lambda: Z1())
        self.button.place(x=100,y=150)
        #Кнопка "Задача 2. Переведення величин"
        self.button1 = tk.Button(self,text="Задача 2", command=lambda: Z2())
        self.button1.place(x=100,y=180)
        #Кнопка "Задача 3. Переведення величин"
        self.button2 = tk.Button(self,text="Задача 3", command=lambda: Z3())
        self.button2.place(x=100,y=210)
        #Кнопка "Задача 4. Створити програму для знаходження площі прямокутного трикутника"
        self.button2 = tk.Button(self,text="Задача 4", command=lambda: Z4())
        self.button2.place(x=100,y=240)
        #Кнопка "Задача 5. Знайти відсоток від числа"
        self.button2 = tk.Button(self,text="Задача 5", command=lambda: Z5())
        self.button2.place(x=100,y=270)
        #Кнопка "Задача 6. Створити валютний калькулятор (за курсом НБУ)"
        self.button2 = tk.Button(self,text="Задача 6", command=lambda: Z6())
        self.button2.place(x=100,y=300)
        #Кнопка "Задача 7. Користувач робить депозитний вклад в розмірі a гривень строком на b років під 10 % річних (щороку розмір вкладу збільшиться на 10%)"
        self.button2 = tk.Button(self,text="Задача 7", command=lambda: Z7())
        self.button2.place(x=100,y=330)




class Z1(tk.Toplevel):
    



                    
    def __init__(self,*args, **kwargs):
        tk.Toplevel.__init__(self,*args, *kwargs)
        self.title("Задача 1")
        self.geometry("900x450")
        self.resizable(False, False)

    

        z1l = Label(self, text="Задача 1. Створити програму для розв’язування рівнянь.",font=20).pack()
        z1l = Label(self, text="Рівняння типу – Знаходження невідомого доданка (Х – невідомий доданок, Y – відомий доданок, С – сума)",font=14).pack()
        z1l= Label(self, text="Алгоритм:",font=12).pack()
        z1l= Label(self, text=" Ввести з клавіатури відомий доданок і суму;",font=12).pack()
        z1l= Label(self, text=" Визначити невідомий доданок;",font=12).pack()
        z1l= Label(self, text=" Вивести невідомий доданок на екран;",font=12).pack()
        z1l= Label(self, text=" Вивести рівняння на екран",font=12).pack()
        z1l= Label(self, text="",font=12).pack()

        
        


        
        #место ввода "Y"
        Label(self, text="Y = ",font=30).pack()
        EntryY=Entry(self)
        EntryY.pack()
       

        #место ввода "C"]
        Label(self, text="C = ",font=30).pack()
        EntryC=Entry(self)
        EntryC.pack()

        #место вывода значения "X"]
        Label(self, text="X = ",font=30).pack()
        EntryX=Entry(self)
        EntryX.pack()
        

        
    def calc():
        Y=EntryY.get()
        Y=int(Y)
        C=EntryC.get()
        C=int(C)
        result=str(C-Y)
        EntryX.delete(0, END)
        EntryX.insert(0, result)


                
        #кнопка "Порахувати"
        but=Button(self, text='Порахувати')#,command=Calc)
        but.pack()




if __name__ == "__main__":
     app = Main()
     app.mainloop()

2

Re: При підключенні команди на кнопку пропадає сама кнопка

В доньки мізків не вистачає, в батька мізків не вистачає... Співчуваю, що ви спадкові безвідповідальні дибіли, які не вивозять добровільно взяті на себе обов'язки. НУУУ ТУУУПИИИЄЄЄЄЄ!!111

Подякували: DEAD_MaRoZ, Firefox is dead2

3

Re: При підключенні команди на кнопку пропадає сама кнопка

Tarpan87, бан до кінця доби за п. 2.4 Правил. Прошу наступного разу бути конструктивнішим.

4

Re: При підключенні команди на кнопку пропадає сама кнопка

DEAD_MaRoZ, по-перше, в Python є консоль і там мало бути повідомлення про проблему.
А по-друге, код Python реєстрозалежний, тобто calc і Calc - це різні ідентифікатори. Функція у вас зветься з маленької літери, а прикріпити ви намагаєтеся Calc з великої, і Python не знає, що робити.
Ну і ще бачу купу проблем, але дуже схоже, що ви їх створили саме спробами якось полагодити цю.

Подякували: leofun011

5

Re: При підключенні команди на кнопку пропадає сама кнопка

Ну і для галочки: пан Tarpan87 намагався сказати, що домашню роботу задали дочці, то й робити її (зокрема, питати на форумах) має саме дочка, інакше чому вона навчиться?

Подякували: leofun011

6

Re: При підключенні команди на кнопку пропадає сама кнопка

Трошки допрацював код

rom tkinter import *
import tkinter as tk
 
class Main(tk.Tk):
 
    def __init__(self,*args, **kwargs):
        tk.Tk.__init__(self,*args, *kwargs)
        self.title("Практическая работа №9")
        self.geometry("900x450+300+200")
        self.resizable(False, False)
        self.entry = Entry(self)
        self.entry.pack(side = LEFT)
 
 
        lab1 = Label(text="Практична робота №9",font=20)         
        lab1.pack()
        lab2 = Label(text="ученицы 8А класса",font=16)  
        lab2.pack()
        lab3 = Label(text="Ц*** Арины",font=16)  
        lab3.pack()
        #Кнопка "Задача 1. Создать программу для решения уравнения"
        self.button = tk.Button(self.entry,text="Задача 1", command=lambda: Z1())
        self.button.pack(side=TOP)
        #Кнопка "Задача 2. Перевод величин"
        self.button1 = tk.Button(self.entry, text="Задача 2", command=lambda: Z2())
        self.button1.pack(side=TOP)
        #Кнопка "Задача 3. Перевод величин"
        self.button2 = tk.Button(self.entry, text="Задача 3", command=lambda: Z3())
        self.button2.pack(side=TOP)
        #Кнопка "Задача 4. Создать программу для вычисления площади прямоугольного треугольника"
        self.button2 = tk.Button(self.entry, text="Задача 4", command=lambda: Z4())
        self.button2.pack(side=TOP)
        #Кнопка "Задача 5. Найти процент от числа"
        self.button2 = tk.Button(self.entry, text="Задача 5", command=lambda: Z5())
        self.button2.pack(side=TOP)
        #Кнопка "Задача 6. Создать валютный калькулятор"
        self.button2 = tk.Button(self.entry, text="Задача 6", command=lambda: Z6())
        self.button2.pack(side=TOP)
        #Кнопка "Задача 7. Программа расчета % по депозитному вложению"
        self.button2 = tk.Button(self.entry, text="Задача 7", command=lambda: Z7())
        self.button2.pack(side=TOP)
 
 
class Z1(tk.Toplevel):
                    
    def __init__(self,*args, **kwargs):
        tk.Toplevel.__init__(self,*args, *kwargs)
        self.title("Задача 1")
        self.geometry("900x450+300+200")
        self.resizable(False, False)
 
        z1l = Label(self, text="Задача 1. Создать программу для решения уравнения",font=20).pack()
        z1l = Label(self, text="Уравнение типа – Нахождение неизвестного слагаемого (Х – неизвестное слагаемое, Y – известное слагаемое, С – сумма)",font=14).pack()
        z1l= Label(self, text="Алгоритм:",font=12).pack()
        z1l= Label(self, text=" Ввести с клавиатуры известное слагаемое и сумму;",font=12).pack()
        z1l= Label(self, text=" Определить неизвестное слагаемое;",font=12).pack()
        z1l= Label(self, text=" Вывести неизвестное слагаемое на экран;",font=12).pack()
        z1l= Label(self, text=" Вывести уравнение на экран",font=12).pack()
        z1l= Label(self, text="",font=12).pack()
        self.but=Button(self, text='Посчитать', command = self.calc)
        self.but.pack(side = BOTTOM)
        
        # далее везде self добавить
        Label(self, text="Y = ",font=30).pack()
        self.EntryY=Entry(self)
        self.EntryY.pack()
 
        #место ввода "C"]
        Label(self, text="C = ",font=30).pack()
        EntryC=Entry(self)
        EntryC.pack()
        #место вывода значения "X"]
        Label(self, text="X = ",font=30).pack()
        EntryX=Entry(self)
        EntryX.pack()
 
 
    def calc(self):
        Y=EntryY.get()
        Y=int(Y)
        C=EntryC.get()
        C=int(C)
        result=str(C-Y)
        EntryX.delete(0, END)
        EntryX.insert(0, result)
 
 
if __name__ == "__main__":
     app = Main()
     app.mainloop()

, але тепер нова проблема

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Program Files\Pyton\Lib\tkinter\__init__.py", line 1948, in __call__
    return self.func(*args)
           ^^^^^^^^^^^^^^^^
  File "C:\Users\Папа\Desktop\Практична.py", line 79, in calc
    Y=EntryY.get()
      ^^^^^^
NameError: name 'EntryY' is not defined

7

Re: При підключенні команди на кнопку пропадає сама кнопка

Ну, абсолютно ж правильно каже: EntryY не визначено. Визначено self.EntryY, відповідно

Y = self.EntryY.get()
Подякували: leofun011