The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Tkinter - не пойму в какой момент виджет был размещен в окне, !*! xintrea, 06-Апр-23, 13:39  [смотреть все]
В нижеприведенном коде есть создание переменной app. Она является экземпляром класса Example, который в свою очередь является расширением от класса Frame.

Так вот, я не пойму в какой момент эта переменная привязывается к окну root, чтобы работать внутри него. Никакой связи между root и app я не наблюдаю. Но тем не менее пример работает.

Как это происходит? Сам код:


from tkinter import Tk, Frame, Checkbutton
from tkinter import BooleanVar, BOTH

class Example(Frame):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.master.title("Флажки")
        self.pack(fill=BOTH, expand=True)
        self.var = BooleanVar()

        cb = Checkbutton(self, text="Показать заголовок", variable=self.var, command=self.onClick)
        cb.select()
        cb.place(x=50, y=50)

    def onClick(self):
        if self.var.get():
            self.master.title("Флажки")
        else:
            self.master.title("")


def main():
    root = Tk()
    root.geometry("250x150+300+300")
    app = Example()
    root.mainloop()


if __name__ == '__main__':
    main()

  • Tkinter - не пойму в какой момент виджет был размещен в окне, !*! Eddhie, 12:56 , 11-Апр-23 (1)
    Наверное, отыскивает первый экземпляр Tk(), который считается главным. Можно уточнить это, передав в конструктор явно, тогда станет возможным манипулировать с root прямо в классе Example:

    class Example(Frame):
        def __init__(self, root):
            super().__init__(root)
            root.geometry("250x150+300+300")
            self.initUI()

    def main():
        root = Tk()    
        app = Example(root)
        root.mainloop()

  • Tkinter - не пойму в какой момент виджет был размещен в окне, !*! Брат Анон, 10:30 , 18-Апр-23 (2) +1
    1) Переменная var привязывается к cb, а не окну верхнего уровня.
    2) Никакой прямой связи между root и app нет. структура примера -- неправильная. Объект Example -- не должен наследоваться от Frame (он должен его включать, ровно так же как и корневое окно).
    3) Переменная var начинает работать как и всё остальное с момента вызова root.mainloop()



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру