chihiro1364
@chihiro1364

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

tkinter.Tk()のTkについて

解決したいこと

tkinterパッケージのTk()クラスのインスタンスはメインウィンドウを作る。
と参考サイトに書かれてますが、
使わずにウィジェットを作成して実行してもメインウィンドウが開かれます。
タイトルやウィンドウサイズこそは設定出来ませんが、
もしかしてTk()は記述がなくともウィンドウ自体は作成出来てるんでしょうか?

該当するソースコード

import tkinter
button = tkinter.Button()
button.pack()

これでもウィンドウが表示出来るので、「ウィンドウを作成する」の参考サイトの文言に違和感を感じました。

参考ページ

0

1Answer

/usr/lib/python3.9/tkinter/__init__.py を読んでみました。

class Button(Widget):

    def __init__(self, master=None, cnf={}, **kw):
        Widget.__init__(self, master, 'button', cnf, kw)

master 引数を指定していないので master は None で、親クラス Widget の更に親クラスの BaseWdiget で

         if not master:
            master = _get_default_root()

という処理があり、_get_default_root関数の中で

        root = Tk()

という処理を行っていました。

なので、master引数に tkinter.Tk() を渡さなかった場合、デフォルトルートの Tk() が作られて使われる仕様になっています。

5Like

Comments

  1. @chihiro1364

    Questioner

    ありがとうございます。
    大変分かり易かったです。

Your answer might help someone💌