Python. Не получается унаследоваться от стандартного класса библиотеки tkinter с помощью метода super
Собираю интерфейс будущей программы с помощью библиотеки tkinter. Пытаюсь создать специализированный класс кнопок (ButtonNum), которые бы наследовали свой интерфейс от стандартного класса Button. Так как Button тоже наследуется от других классов внутри библиотеки tkinter, я прописал в конструкторе создаваемого класса (ButtonNum) метод super().__init__(). Если я правильно понимаю назначение этого метода, то super().__init__() должен по цепочке вызвать конструкторы всех родительских для Button классов и перетащить из них нужные аргументы и методы в создаваемый мною ButtonNum. То есть на выходе по идее должен получиться дочерний класс, который содержит в себе весь функционал Button, но этого не происходит, т.к. при создании экземпляра ButtonNum, я получаю ошибку TypeError: __init__ got an unexpected keyword argument 'bg'. bg - это характерный для родительского Button аргумент, но он в ButtonNumне наследуется (хотя если унаследоваться без создания конструктора: Сlass ButtonNum(Button):, то ошибки не возникает и все работает как должно).
Помогите, пожалуйста, решить проблему и объясните, что конкретно я не понимаю в механизме наследования (по возможности)
Полный код:
from tkinter import *
class ButtonNum(Button):
def __init__(self):
super().__init__()
if __name__ == '__main__':
root = Tk()
toolbar = Frame(root, relief=SUNKEN, borderwidth=2)
toolbar.configure(bg='#d6d5e8')
button_1 = ButtonNum(toolbar, bg='#b6b5c9', text='1', height=2, width=5)
button_1.grid(column=1, row=1)
toolbar.pack(side=LEFT, fill=X)
root.mainloop()
Ответы (1 шт):
Вы создали метод __init__, принимающий только аргумент self, а потом пытаетесь передать в него другие аргументы - поэтому возникает ошибка. Нужно принять все аргументы (позиционные и именованные) и передать их в __init__ родительского класса:
class ButtonNum(Button):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)