что если в коде нет объявления Tk () - PullRequest
0 голосов
/ 07 января 2019

Итак, я наткнулся на фрагмент кода Python3 с графическим интерфейсом tkinter, и он не имеет ничего похожего на root = Tk(), но ЭТО РАБОТАЕТ! Я прочитал это , и это действительно полезно. Но мой вопрос: если окно tk и интерпретатор запускаются при создании моего первого виджета, как я могу добавить больше виджетов в корень, не указывая его? ака. Что мне делать, если я хочу добавить больше виджетов в ту же программу / то же окно, поскольку у меня нет такой переменной, как root для хранения объекта корневого окна?

Кстати, был класс контроллера, подобный этому:

class Controller(tk.Tk):
    def __init__ (self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        parentObj = tk.Frame(self)
        self.allFrames = {}
        ...

Означает ли это, что фрейм parentObj является слоем фрейма windows / outmost в этом приложении? Как я понимаю это определение класса здесь? Для чего здесь tk.Tk.__init__(self, *args, **kwargs)? 1011 *

1 Ответ

0 голосов
/ 07 января 2019

Controller является подклассом tk.Tk. Controller идентично tk.Tk, но с улучшениями. Таким образом, выполнение something=Controller(...) служит той же цели, что и something=tk.Tk().

Что мне делать, если я хочу добавить больше виджетов в ту же программу / то же окно,

Используйте self в качестве родителя, если внутри класса, используйте экземпляр класса, если он снаружи.

class Controller(tk.Tk):
    def __init__ (self, *args, **kwargs):
        ...
        self.some_widget = tk.Label(self, ...)

... и ...

root = Controller()
some_other_widget = tk.Label(root, ...)

Означает ли это, что фрейм parentObj является слоем фрейма windows / outmost в этом приложении?

Нет. Наибольшим «слоем» является экземпляр Controller. Это корневое окно. parentObj живет в этом окне.

Для чего здесь tk.Tk.__init__(self, *args, **kwargs)? 1030 *

Это просто стандартный способ Python для подкласса инициализировать свой родительский класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...