Tkinter のウィンドウをカスタマイズする方法


Python3 マスターへの道:その2

 

Tkinter のウィンドウをカスタマイズする


 前回は、Tkinter をインポートして、ウィンドウを表示するところまで、学習しました。しかし、そのウィンドウは未だ空白、少しずつカスタマイズしていきたいところです。ということで、今回は、空白のウィンドウのカスタマイズして行きたいと思います。

1    import tkinter as tk
2    
3    root = tk.Tk()
4    
5    # 今回の新要素
6    root.title("New Title")
7    root.geometry("NumberxNumber+Number+Number")
8    root.minsize(width=Number, height=Number)
9    root.maxsize(width=Number, height=Number)
10   root.resizable(width=Ture/False, height=Ture/False)
11      
12   root.mainloop()

 今回の新要素は、.title() と .geometry()、.minsize()、.maxsize()、そして .resizable()という、5つのメソッドです。これらによって、ウィンドウがどのように表示されるのかをプログラミングしていくことができるのです。


新メソッド: .title()


6    root.title("New Title")

 このメソッドは至ってシンプル。ウィンドウに名前をつけることができるようになります。そして、コードもシンプル。.title() のかっこの中に、つけたい名前を入れるだけ。絶対的な必要性はないかもしれませんが、わかりやすくする意味では、ささっとつけられるものになっています。

 このコードを実行すると、下のように出力されました。ちゃんと、ウィンドウの上に New Title になってますね。




新メソッド: .geometry()


ウィンドウの初期表示の大きさを設定


7'   root.geometry("NumberxNumber")
7'  root.geometry(width=Number, height=Number)

 このメソッドは、ウィンドウの初期表示の大きさを設定することができます。表示方法は上の二つ。どちらも出力は同じなので、1つ目の方が簡単に見えます。実際に、幅 x 高さ という形式で書いています。ですが、初見の人からしてみれば、2つ目は、幅と高さが一目でわかりますね。どちらで書きたいかは自分次第ってことですね。

 このコードを実際に、幅=300 pixel、高さ=500 pixel で実行してみると、しっかりと、下のように縦長のウィンドウが表示されましたね。




 ちなみに、二つ目の省略された方法で実行してみたら、高さと幅の順番が逆で、横長のウィンドウが……最初は面倒がらずに、一つ目の形式の方のように明白に表記した方がいいのかもしれません。


ウィンドウの初期表示の位置を設定


7''   root.geometry("+Number+Number")

 .geometry のメソッドは、ウィンドウの初期表示の位置を設定することもできます。そして、その方法は、パソコンの画面の左上からの距離(pixel)で表示されます。そして、数字の順番は、1つ目の数字は、画面の左からの距離、2つ目の数字は、画面の上からの距離になっています。

 ここで、マイナス(-)でも試したのですが、プラス(+)と同じように表示されました。また、Mac を使っているのですが、"+0+0" のように設定しても上のバーに被らないように表示されたので、上の一番角に表示することはできないようです。

 コードのカッコの中を (+300+600) のようにして、出力してみました。








※ウィンドウが見やすいように壁紙を変更しました。

 ここで、一つお願いです。初期表示の大きさを表示した際のように、明白に表示する方法がわからなかったので、一つしか表示してません。なので、知っている方はコメントください。


初期表示の大きさと位置を同時に設定


7    root.geometry("NumberxNumber+Number+Number")

 そして、二つを .geometry の二つの機能を組み合わせるようにして、上記のように表示できます。そして、カッコ内を (300x100+300+600) のようにして、実行してみると、先ほどのウィンドウの位置に、横長のウィンドウが表示されました。




新メソッド: .minsize() と .maxsize()


8    root.minsize(width=Number, height=Number)
8'   root.minsize("NumberxNumber")
9    root.maxsize(width=Number, height=Number)
9'   root.maxsize("NumberxNumber")

 そして、次のメソッドは、ユーザーがウィンドの大きさを変えることができる範囲を設定するものです。.minsize() で最小の大きさを、.maxsize() で最大の大きさを設定しています。これは、画像で表すのは難しいので、試してみるとわかります。

 これも、.geometry() のメソッドのように表記を二つの方法でできるので、基本を覚えておけば、すぐに使えます。ウィンドウ内で、大きさが小さすぎると問題がある際などに使うことになりそうですね。

 ここで、ユーザーが全くウィンドウの大きさを変えることができないようにするには、.geometry() で設定した幅と高さを、.minsize() と .maxsize() に設定すれば大丈夫そうです。しかし、面倒ですよね。そのために、次のメソッドがあります。


新メソッド: .resizable()


10   root.resizable(width=Ture/False, height=Ture/False)
10'  root.resizable(0/1, 0/1)

 そして、今回の最後の新しいメソッド、.resizable() です。これは、ユーザーがウィンドウの大きさを変更できないように設定することができます。そして、それは、False または 0 と設定することで、できます。ここでも、二つの表記がありますね。

 ですが、ここでは、2つ目の表記をした際に、どちらかの数字に 1 または True が含まれると、その方向のみに大きさが変更できるようになるのではなく、全体のウィンドウ自体の大きさが変えることができるようになってしまいます。

 なので、一方向のみの大きさを変えることを許可する場合は、先ほどのメソッドを使うしかなさそうです……

 カッコ内をどちらも 0 に設定して実行してみると、下のように、Mac のウィンドウの大きさを画面いっぱいにする、緑色のボタンの色が消えていることがわかります。これで、大きさが変更できなくなりましたね。




最後に


 このように、今回はウィンドウの表示をカスタマイズするための、5つのメソッドを学ぶことができました。ですが、まだウィンドウの中は空白のまま。次回は、ウィンドウに何かを表示させれればいいなぁ、と思っています。


前回:Python のモジュールのインポートの異なる方法と使い分け

次回:Tkinter の配置用メソッド .pack() .gird() .place()