Podejście obiektowe w tkinter

WPROWADZENIE

Aplikację graficzną można zbudować korzystając z podejścia obiektowego. Odpowiednią klasę można zdefiniować ogólnie, ale prawdopodobnie najbardziej elastyczne podejście to dziedziczenie z klasy Frame.


# second1.py
import tkinter as tk

class Application(tk.Frame):

    def __init__(self, master=None, title="Application"):
        tk.Frame.__init__(self, master)
        self.master = master
        self.master.title(title)
        self.grid()   # self to master
        self.create_widgets()

    def create_widgets(self):
        self.label = tk.Label(self, text="Hello")
        self.label.grid()   # label to self

if __name__ == "__main__":

    root = tk.Tk()
    app = Application(root)
    #print(app.label["text"])   # Hello
    root.mainloop()   # lub app.mainloop()

# root
#  |
# app (Frame)
#  |
# Label

# Klasa 'Application' może być stosowana w oknach Toplevel.

root = tk.Tk()
app1 = Application(root, title="root")
top = tk.Toplevel(root)
app2 = Application(top, title="top")
root.mainloop()

#       root
#      /    \
#   app1    top
#    /        \
# Label       app2
#               \
#              Label