наследование кнопки от tkinter

подскажите как правильно организовать наследование кнопки от tkinter.Button (с добавлением иконки(улучшение стандартного tkinter.Button добавлением свойств))

пока что остановился на этом. В чем мои ошибки? как правильно организовать работу pack()?

from tkinter import *
root = Tk()

class myButton(Button):
    def __init__(self, text, width, height):
        self._text = text
        self._width = width
        self._height = height

    def text(self, _text):
        text = _text

    def width(self, _width):
        width = _width

    def height(self, _height):
        height = _height

b2 = myButton(text="Изменить", width=15, height=3)
b2.pack()

root.mainloop()

свойство print

я думал добавить еще какое-нибудь свойство к примеру print, но не получилось, почему?

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from tkinter import *
root = Tk()

class myButton(Button):
    def __init__(self, text, width, height, print):   #Испр.
        super().__init__(text=text, width=width, height=height)
        self._text = text
        self._width = width
        self._height = height
        self._print = print   #Испр.

    def text(self, _text):
        text = _text

    def width(self, _width):
        width = _width

    def height(self, _height):
        height = _height

    def print(self, _print):   #Испр.
        print(_print)   #Испр.

b2 = myButton(text="123", width=15, height=3, print = "111")   #Испр.
b2.pack()

root.mainloop()

Ответы (2 шт):

Автор решения: Xander

Ну вы же переопределили метод __init__ родительского класса, а в нём выполнялись важные действия. Соответственно, вы должны либо воспроизвести их в вашем коде, либо добавить в него вызов __init__ из родительского класса:

from tkinter import *
root = Tk()


class myButton(Button):
    def __init__(self, text, width, height):
        super().__init__(text=text, width=width, height=height)  # Вот эта строка
        self._text = text
        self._width = width
        self._height = height

    def text(self, _text):
        text = _text

    def width(self, _width):
        width = _width

    def height(self, _height):
        height = _height

b2 = myButton(text="Изменить", width=15, height=3)
b2.pack()

root.mainloop()
→ Ссылка
Автор решения: biomotor

Получилось сделать как-то так... (пытаюсь научиться переопределять классы)

from tkinter import *
root = Tk()

class myButton(Button):
    def __init__(self, text, width, height, image):
        self._image = image
        self.Photo = PhotoImage(file=self._image)
        super().__init__(text=text, width=width, height=height, image=self.Photo)
        self._text = text
        self._width = width
        self._height = height

#b2 = myButton(text="123", width=15, height=3, image="1.png") # Полно
b2 = myButton("123", 15, 3, "1.png") # Коротко
b2.pack()

root.mainloop()

и еще вопрос, если вызов не полный:

Button(text="123", width=15, height=3, image="1.png")

а короткий:

Button("123", 15, 3, "1.png")

как узнать названия параметров: text, width, height и пр... ? если вбить в гугле, https://www.tutorialspoint.com/python/tk_button.htm и прочитать options(как по данной ссылке) они будут соответствовать действительности?

→ Ссылка