Какая ошибка возникает при использовании метода insert и что нужно сделать, чтобы ее исправить?

  • 18 августа 2023 г. 16:46
Ответы на вопрос 2
Ошибка, которая может возникнуть при использовании метода `insert`, - это ошибка отсутствия атрибута. Она возникает, если пытаться вызвать метод `insert` на объекте, который не имеет такого метода.

Чтобы исправить эту ошибку, необходимо убедиться, что объект, на котором вызывается метод `insert`, является объектом класса, который имеет такой метод.
Тут возникает вопрос о том, для чего используется этот метод? Ты говоришь, что он используется другим классом. Хорошо, но для какой задачи другой класс использует этот метод? Мне непонятно, почему ты создаешь элементы управления внутри метода put_widgets(). Судя по всему, если твой класс представляет собой группу элементов управления, то он должен создавать дочерние элементы уже в своем конструкторе и сохранять ссылки на них в приватные поля класса. Методы класса должны обращаться именно к этим полям. Учитывайте, что локальная переменная внутри метода (как, например, Ent_numberBox) существует только во время вызова этого метода и не должна содержать ничего, что будет доступно после завершения этого метода, если это не возвращаемое значение. Вот пример более понятной и чистой реализации:

import tkinter as tk

class InputBox(tk.Frame):
    def __init__(self, master, **kwargs):
        super().__init__(master, **kwargs)
        self.__value = tk.StringVar()
        self.__entry = tk.Entry(self, justify=tk.RIGHT, width=22, textvariable=self.__value)
        self.__entry.pack(side=tk.RIGHT, padx=10, pady=15)
        self.__helptext = tk.Label(self, bg=self['background'], height=3, text="Введите мат. выражение:")
        self.__helptext.pack(side=tk.LEFT)
    
    def get_value(self) -> str:
        return self.__value.get()
    
    def set_value(self, value: str) -> None:
        self.__value.set(value)
        
    def append(self, symbol: str) -> None:
        self.__value.set(self.__value.get() + symbol)

if __name__ == '__main__':
    root = tk.Tk()
    box = InputBox(root)
    box.pack(side=tk.TOP, expand=True, fill=tk.BOTH)
    box.set_value('Hello')
    box.append(', world!')
    root.mainloop()

В этом примере я предположил, что твой класс представляет собой поле ввода и нам нужно иметь возможность получить введенное значение, поэтому добавил метод get_value(). Также ты сказал, что нужно изменять это значение извне, из другого класса. Поэтому добавил метод set_value(). Также, если это часть калькулятора, нам часто придется добавлять символы в конец строки. Для этого удобно использовать отдельный метод append(). Важно, чтобы каждый метод решал только одну задачу.
Похожие вопросы