Проблемы с наследованием ООП

mironodim

Новичок
Пользователь
Янв 9, 2024
2
0
1
ОС: Windows 10 Версия Python 3.12 . Используемые библиотеки: Tkinter. Здравствуйте, пишу калькулятор, калькулятор состоит из двух режимов, обычного и расширенного, в обычном режиме(наследуется от родительского) вызываю опрелеленный метод родительского класса получается все как надо, переключаюсь в расширенный режим, там так же этот метод вызывается, хотя я его явно не вызываю. Может, кто нибудь здесь ответит на этот вопрос?

Python:
from tkinter import *
from tkinter.scrolledtext import ScrolledText

class Calculator(Tk):
    # Создание класса для перехода между режимами калькулятора, логика калькулятора, и виджеты калькулятора
    # переход между режимами калькулятора
    def __init__(self, *args, **kwargs):
        Tk.__init__(self, *args, **kwargs)
        box_container = Frame(self)
        box_container.pack(side="top", fill="both", expand=True)
        box_container.grid_rowconfigure(0, weight=1)
        box_container.grid_columnconfigure(0, weight=1)

        self.modes = {}
        for K, geometry, title, in zip((RegularCalculatorMode, AdvancedCalculatorMode),
                                       ('274x380+500+100', '630x620+380+10'), ("Калькулятор обычный режим ",
                                                                               "Калькулятор расширенный режим")):
            pages = K.__name__
            box = K(parent=box_container, controller=self)
            self.modes[pages] = (box, geometry, title)
            box.grid(row=0, column=0, sticky="nsew")
        self.show_frame("RegularCalculatorMode")

    def show_frame(self, RegularCalculatorMode):
        box, geometry, title = self.modes[RegularCalculatorMode]
        self.update_idletasks()
        self.geometry(geometry)
        self.title(title)
        self.resizable(0, 0)
        box.tkraise()
        
    #создание дисплея для обычного калькулятора
    def entry_display(self):
        self.entry_display = Entry(width=22,highlightthickness=4,highlightbackground='black',font=('Arial', 15,'bold'),justify='right')
        self.entry_display.insert('0','0')
        self.entry_display.place(x=10,y=20)

    #создание дисплея для расширенного калькулятора
    def text_display(self, height, x, y, width, chars=0):
        self.text_display = ScrolledText(self, font=('Arial', 20, 'bold'), width=width, height=height,
                                         highlightthickness=4, highlightbackground='black')
        self.text_display.tag_configure('tag-right', justify='right')
        self.text_display.insert('end', chars, 'tag-right')
        self.text_display.place(x=x, y=y)
        
    # создание кнопки меню, переход между режимами калькулятора
    def buttom_menu(self, x, y, command):
        button_menu = Button(self, bg='red', text='≡', width=4, font=('Arial', 10,'bold'), bd=5, fg='black',
                             command=command)
        button_menu.place(x=x, y=y)
        
    
class RegularCalculatorMode(Frame, Calculator):
    # создание класса обычного режима калькулятора
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        self.controller = controller
        self.entry_display()
        self.buttom_menu(10, 90, lambda: controller.show_frame("AdvancedCalculatorMode"))
        

class AdvancedCalculatorMode(Frame, Calculator):
    # создание класса расширенного режима калькулятора
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        self.controller = controller
        self.text_display(4, 10, 10, 16, 0)
        self.buttom_menu(10, 170, lambda: controller.show_frame("RegularCalculatorMode"))



if __name__ == "__main__":
    calk = Calculator()
    calk.mainloop()
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 668
475
83
вы у ScrolledText указали родителя, а у Entry нет, в этом проблема...
 

mironodim

Новичок
Пользователь
Янв 9, 2024
2
0
1
Да, все получилось, спасибо большое👍🤝🤝🤝
 

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