tkinterではwidget(例:Frame、Canvas)を配置するには3つの方法 grid, pack, placeがあります。
今回はplaceに焦点を当ててwidgetの配置方法についてまとめていきます。
前準備
place()
の使い方について見る前にtemplate.py
とapp.py
を用意します。この2つのプログラムを使ってplace()
の使い方についてまとめていきます。
template.py
template.py
はアプリケーションの雛形として用意しました。ここでは、アプリケーションのタイトル、起動時のアプリケーションの位置、アプリケーションの拡大拡小の設定、アプリケーションのアイコンについて設定をすることができます。設定はtemplate.py
を継承したクラスでするようにしてあります。
関連記事 - はじめてのtkinter ウィンドウを作って表示させる
app.py
template.py
のTemplateクラスを継承しています。今回は特にアプリケーションのタイトル、位置、拡大拡小、アイコンの設定については行いません。createWidgets()
でWidgetの作成、attachWidgets()
で作成したWidgetをウィンドウに配置していきます。
placeの使い方
今回はCanvasをplace()
を使って配置してみます。
そのためにまずはcreateWidgets()
でCanvasを用意します。
関連記事 - Canvasを使ってみる。
Widgetの配置位置(x, y)
createWidgets()
でCanvasを作成したので、今度はattachedWidgets()
で作成したCanvasをplace()
を使ってウィンドウに貼り付けます。
app.py
を実行します。
$ python app.py
次のようなウィンドウが起動します。

place()
で指定したxとyですが、デフォルトでは親Widgetの左上が0となり基準の位置となる点になります。ここでいう親Widgetとはメインウィンドウ(tk.Tk)のことで作成したCanvasはメインウィンドウの子Widgetにあたります。
位置の設定方法ですが、xの場合右側だと正、左側だと負の値を設定します。yの場合は下側が正、上側だと負の値を設定します。
試しに以下のようにxとyを変えてみます。
上のようにxとyの値を変えると下のようなウィンドウが起動します。

さきほど、デフォルトでは親Widgetの左上が0になると言いましたが、place()
のオプションのひとつanchor
の設定を変えることで、基準の位置となる点は変わってきます。
Widgetのサイズ(width, height)
Canvasを生成するときに幅と髙さを設定していましたが、place()
のオプションでもwidth(幅)とheight(高さ)を指定することが可能です。
上のプログラムを実行すると、下のようにplace()
で設定した幅と高さになりました。

相対的なサイズと位置
最後にサイズ(relwidth, relheight)と相対位置(relx, rely)について見ていきます。
プログラムに少し変更を加えます。
createWidgets()
とattachedWidgets()
を上のように変更してみました。
メインウィンドウにCanvasを貼り付け、そこにボタンを貼り付けています。

関連記事 - ボタンを作る
relwidth
とrelheight
は親Widgetのwidth(幅)とheight(高さ)に対する相対的な長さを設定することができます。設定できる値の範囲は0.0~1.0です。
上のようにrelwidth
とrelheight
を設定して実行すると下のようなウィンドウが起動します。

例えば、relwidth
の値を1.0にするとボタンの親WidgetであるCanvasの幅と同じ長さになるのでボタンが左端から右端までCanvas上に配置されるようになります。
relx
とrely
は親Widgetの位置(x, y)に対する相対的な位置を設定することができます。設定できる値の範囲は0.0~1.0です。
上のようにrelx
とrely
を設定して実行すると下のようなウィンドウが起動します。
おわり
place
の使い方について簡単に紹介しました。Widgetの配置方法には他にもgrid
とpack
があるので、いずれ紹介したいと思います。
とりあえず今回はここまで。
参考記事 - Python - Tkinter place() Method - Tutorialspoint