8
5

More than 1 year has passed since last update.

Tkinterのsuper().__init__(master)について

Last updated at Posted at 2022-03-04

tkinterのsuper().__init__(master)ってなんだ

初めてtkinterでGUIアプリを作成しようとした時、参考にするサイトで

super().__init__(master)

という行を見かけました。
始めは「なんだこれ!わかんねぇ!」ってなっていたけど微妙に理解したので脳内メモがてらこの記事を書きます。
厳密にはちょいちょい違うかもしれないけど大雑把に、といういうことで、、

super()ってなんだ

super()っていうのは、

super().親クラスのメソッド

って書くことで継承した親クラスのメソッドを使えるようになる、というもの。
そして__init__()はクラスのコンストラクタ。コンストラクタというのはクラスの生成時に実行されるメソッド。

 いらんと思いつつ一応超大雑把に説明すると、

クラス
・関数群みたいな感じ
メソッド
・クラスの関数群のその一つ一つ

って感じ

つまり

super().__init__(master)

は継承した親クラスのコンストラクタに引数masterを渡して実行しているという事。

もう少しコードを思い出す

「よく見かけたコード」をもう少し思い出してみる。大体こんな感じ。

import tkinter as tk
class Window(tk.Frame):
    def __init__(self,master):
        super().__init__(master)
        self.pack()

root = tk.Tk()
window = Window(root)
root.mainloop()        

参考にしたサイトによるけど大本はこんな感じなはず。多分。

何継承してるんだ

  • Windowクラスはtk.Frameを継承している。
  • tk.FrameはtkinterのFrameというものを指している。

あれ?

ここでtkinterでFrameを使うときを思い出してみる。

tk.Frame(ウインドウオブジェクト)

みたいなこと書かなかったっけ。しかもこれ、tkinterのFrameクラスのインスタンスを作ってるってことだよな?ここでFrameクラスのコンストラクタが呼び出されてるっぽい。

つまりsuper().__init__(master)とは?

つまり、tk.Frameを継承したクラス内での

super().__init__(master)

tk.Frame(master)

と同じってことか!

masterも、ウインドウオブジェクトtk.Tk()に名前つけただけっぽいね。

おまけ

WindowクラスでのselfはFrameと思って大丈夫(っぽい)です。
上のサンプルコードの一部を

super().__init__(master,width=500,height=500,bg="beige")
self.pack()

に書き換えて、色のついた部分を見ればわかると思います。

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5