

tk.Frameの使い方について、よく以下のような記述が紹介されています。

[code]

    import tkinter as tk
    
    class Application(tk.Frame):
        def __init__(self, master=None):
            super().__init__(master)
            self.master.geometry("300x200")
            frame = tk.Frame(self.master)
            frame.pack()
            canvas = tk.Canvas(frame, width=500, height=500, background="white")
            canvas.create_oval(200, 100, 10, 20, fill='black')
            canvas.pack()
    
    if __name__ == "__main__":
        root = tk.Tk()
        app = Application(master=root)
        app.mainloop()
    
[/code]

class Application(tk.Frame)  
の部分でtk.Frameの継承を行ってるんだと思いますが、  
ここの恩恵がどこで得られているのかわからず。

途中でframe =
tk.Frame(self.master)のように別でインスタンス化しているのであれば、継承しなくとも以下のような記述でも同じことができると思うのですが、継承する意味があるのか、どうも理解ができない状況です。

[code]

    import tkinter as t
    
    root = t.Tk()
    
    class APP:
        def __init__(self,widget):
            self.widget = widget
            self.inttt()
    
        def inttt(self):
            frame = t.Frame(self.widget)
            frame.pack()
    
            canvas = t.Canvas(frame,width=200,height=500,bg="white")
            canvas.pack()
    
    app = APP(root)
    
[/code]

どなたか上記の違いがわかるかたはいらっしゃいますか？  
よろしくお願いします。


CC BY-SA 4.0
2023-05-03T12:01:19.280
94732
2023-05-09T08:49:30.897
2023-05-03T15:05:37.233
3060
58150
question
python tkinter
pythonのtk.Frameの使い方について


`tk.Frame` クラスを継承している場合、以下の様に書くこともできます。

[code]

    import tkinter as tk
    
    class Application(tk.Frame):
        def __init__(self, master=None):
            super().__init__(master)
            self.master.geometry("300x200")
            self.pack()
            self.canvas = tk.Canvas(self, width=500, height=500, background="white")
            self.canvas.create_oval(200, 100, 10, 20, fill='black')
            self.canvas.pack()
    
    if __name__ == "__main__":
        root = tk.Tk()
        app = Application(master=root)
        app.mainloop()
    
[/code]


CC BY-SA 4.0
2023-05-03T12:23:56.720
94733
2023-05-03T12:23:56.720
47127
94732
answer


tk.Frameを継承しなくてはならない理由はほぼないと思います。

参考事例では、継承クラスがApplicationというクラス名だったのでしょうか？  
クラス名から機能が判断できないので、参考にするにはちょっと考えものです。

もし継承させたFrameクラスに、共通のウィジット配置やマウスイベントをバインドするなど機能的な共通点を記述して使いまわすならば、恩恵はわかりやすいと思います。

継承Frameクラスを用いて、GUI上にいくつかFrameを並べ、似たような機能を付与するなどです。


CC BY-SA 4.0
2023-05-09T08:49:30.897
94790
2023-05-09T08:49:30.897
32891
94732
answer