«Имя» в nametowidget
не является именем переменной, используемой для хранения ссылки на виджет (ie: в этом примере это , а не «button1»). Это имеет смысл, поскольку вы можете иметь несколько переменных, указывающих на один и тот же объект - как бы python узнало, какое имя вы хотите?
Имя относится к внутреннему имени виджета, используемому встроенным интерпретатором tcl / tk. Обычно это вычисляется на основе имени родителя, класса виджета и необязательного номера. Например, первый кадр, который вы создаете по умолчанию, будет иметь имя .!frame
, следующий кадр будет иметь имя .!frame2
и т. Д. Первая кнопка внутри первого кадра будет называться .!frame1.!button1
, et c.
. Вы можете увидеть имя любого виджета, распечатав его строковое представление. Например, в вашем коде вы можете сделать print(str(self.button1)
, который покажет вам, что имя на самом деле .!button
Вы не можете использовать что-либо встроенное в tkinter, чтобы преобразовать строку типа "button1"
в актуальный виджет. Однако такая переменная, как self.button1
, является атрибутом текущего объекта, поэтому вы можете использовать встроенную функцию python getattr
, чтобы получить значение атрибута с заданным именем.
В вашем случае вы можете использовать getattr(self, "button1")
, чтобы получить ссылку на фактический объект виджета.