1. ホーム
  2. python

[解決済み] TkInterのウィジェットの.packと.configureの違い?

2022-02-09 03:01:08

質問

Python3のプログラミングを上達させるために、TkInterについて独学で学ぼうと、現在テキストを勉強中です。テキストは、必要であれば、ここにあります。 http://www.ferg.org/thinking_in_tkinter/all_programs.html

tt040.py"と書かれたセクションにサンプルコードがあり、その一部を紹介します。

    self.button1 = Button(self.myContainer1)
    self.button1["text"] = "Hello, World!"   ### (1)
    self.button1["background"] = "green"     ### (1)
    self.button1.pack()


    self.button2 = Button(self.myContainer1)
    self.button2.configure(text="Off to join the circus!") ### (2)
    self.button2.configure(background="tan")               ### (2)
    self.button2.pack()


    self.button3 = Button(self.myContainer1)
    self.button3.configure(text="Join me?", background="cyan")  ### (3)
    self.button3.pack()

この部分の解説は.

(2) button2については、基本的にbutton1と同じ処理ですが、ボタンの辞書にアクセスするのではなく、ボタンに内蔵されている"configure"メソッドを使用します。

(3) ボタン3では、configureメソッドは複数のキーワード引数を取ることができるため、1つの文で複数のオプションを設定することができます."

説明の内容は実際どうなんでしょうか?.packとの)実際の違いや、.configureメソッドの必要性は何なのか、というように。ボタンの辞書とはどういう意味ですか?

どのように解決するのですか?

Tkinterオブジェクトの属性は、Pythonの属性メカニズムで処理されません。 ではなく する <ストライク self.button1.text = "hello" ). その代わりに、tkinterはこの属性を変更する方法を2つ提供しています。

  • オブジェクトを辞書として使用する。 self.button1["text"] = "hello"
  • を使う config メソッドに名前付き引数を与えます。 self.button1.config(text="hello")

どちらも等価です。なお、このような初期化値をコンストラクタの引数に渡すことで、インスタンス化と初期化の両方を一度に行うこともできます。 self.button1 = Button(self.myContainer1, text="hello")

pack は、全く別の目的で使用されます。これはジオメトリ管理命令です。引数なしで使用される button1.pack() 配置を依頼する button1 の親ウィジェットで、先行する兄弟ウィジェット(もしあれば)の下にあります。を使用することができます。 オプション で相対位置やリサイズ動作を指定します。

tkinter には他にもグリッドとプレースというジオメトリマネージャがあります。 この応答 を比較することができます。