【Python】tkinterのplace()を使ってウィジェットを配置する!
Pythonのtkinterでボタンやラベルなどのウィジェット(部品)を配置するには様々な方法がありますが、place()はウィジェットは配置場所を細かく調整することができます。
place()とはtkinterをインポートした後に使用することができるメソッドであり、ウィジェットに座標やサイズを指定してウィンドウに配置するようになります。
また、place()メソッドは親ウィジェットからの相対的な位置やサイズを設定して配置することもできるので、画面の大きさによって変化するレスポンシブ対応にも適しています。
今回は、Pythonのtkinterのplace()を使ってウィジェットを配置する方法について以下の内容で解説していきます。
⚫︎ ウィジェットに座標を指定して配置する場合
⚫︎ ウィジェットにサイズを指定して配置する場合
⚫︎ 親ウィジェットとの相対的な位置を指定して配置する場合
⚫︎ 親ウィジェットとの相対的なサイズを指定して配置する場合
目次
tkinterとは
tkinterとは「Tool Kit Interface」のことであり、Python標準のGUIの画面にボタンやチェックボックス、ラジオボタン、文字を表示するためのラベルなどのウィジェットを配置できるモジュールになります。
その為、ボタンを押して操作するなど簡単なものから本格的なものまで幅広い範囲でアプリケーションを作成することができます。
Pythonのtkinterの使い方について詳しく知りたい場合はこちらをご参考ください。
place()とは
place()とはtkinterをインポート後、ウィジェット(部品)を配置することができるメソッドになります。
ウィジェット(部品)を配置することができるメソッドは他にもありますが、place()は座標(X座標、Y座標)を指定してウィジェット(部品)を配置することができたり、サイズを指定してウィジェットを配置したりすることができます。
place()で配置するイメージ
place()の書き方
place()の書き方は下記となります。
sample.py
1 2 3 4 5 |
import tkinter as tk baseGround = tk.Tk() buttonA = tk.ウィジェット.place(オプション) |
パラメータ
⚫︎ オプション:
ウィジェットを配置する際のオプションを指定する
ウィジェットを配置するメソッドを呼び出した後にオプションを指定してplace()を呼び出すことでウィジェットに座標やサイズを指定して配置することができます。
また、別のオプションを指定すると親ウィジェットからの相対的な位置や相対的なサイズを指定して配置することができます。
place()でウィジェットを配置するサンプルコード
tkinterのplace()でウィジェットを座標指定で配置するサンプルコードを紹介します。
ウィジェットに座標を指定して配置する場合
ウィジェットに座標を指定して配置する場合はplace()のパラメータにxとyを指定します。
sample.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import tkinter as tk # メインウィンドウを作成 baseGround = tk.Tk() # ウィンドウのサイズを設定 baseGround.geometry('500x300') # 画面タイトル baseGround.title('ウィジェットに座標を指定して配置する') # ボタンの作成と配置 button1 = tk.Button(baseGround,text = 'OK1').place(x = 30, y = 40) button2 = tk.Button(baseGround,text = 'OK2').place(x = 90, y = 40) button3 = tk.Button(baseGround,text = 'OK3').place(x = 50, y = 80) button4 = tk.Button(baseGround,text = 'OK4').place(x = 100, y = 80) baseGround.mainloop() |
出力結果
place()をパラメータにxとyを指定することで、ウィジェットに座標を指定して配置することができます。
その為、それぞれのボタンが座標に合わせて配置されています。
ウィジェットにサイズを指定して配置する場合
ウィジェットにサイズを指定して配置する場合はplace()のパラメータにwidthとheightを指定します。
rowはGUI画面の高さを行と認識して配置することができます。
そして、rowと一緒にrowspanを指定すると、一つのウイジェットの行間を指定することができます。
sample.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import tkinter as tk # メインウィンドウを作成 baseGround = tk.Tk() # ウィンドウのサイズを設定 baseGround.geometry('500x300') # 画面タイトル baseGround.title('ウィジェットにサイズを指定して配置する') # ボタンの作成と配置 button1 = tk.Button(baseGround,text = 'OK1').place(x = 30, y = 40, width = 40, height = 50) button2 = tk.Button(baseGround,text = 'OK2').place(x = 90, y = 40, width = 40, height = 50) button3 = tk.Button(baseGround,text = 'OK3').place(x = 150, y = 100, width = 40, height = 50) button4 = tk.Button(baseGround,text = 'OK4').place(x = 250, y = 100, width = 40, height = 50) baseGround.mainloop() |
出力結果
place()のパラメータにwidthとheightを指定することで、ウィジェットにサイズを指定して配置することができます。
その為、各ボタンの横幅が40で高さが50で設定されて配置されています。
親ウィジェットとの相対的な位置を指定して配置する場合
親ウィジェットとの相対的な位置を指定して配置する場合はplace()をパラメータにrelxとrelyを指定します。
relxとrelyは親Widget(今回だとbaseGround)との位置(x, y)に対する相対的な位置を設定することができ、0.0~1.0の範囲で設定できます。
sample.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import tkinter as tk # メインウィンドウを作成 baseGround = tk.Tk() # ウィンドウのサイズを設定 baseGround.geometry('500x300') # 画面タイトル baseGround.title('親ウィジェットとの相対位置を指定して配置する') # ボタンの作成と配置 button1 = tk.Button(baseGround,text = 'OK1').place(relx=0.1, rely=0.2) button2 = tk.Button(baseGround,text = 'OK2').place(relx=0.2, rely=0.3) button3 = tk.Button(baseGround,text = 'OK3').place(relx=0.3, rely=0.4) button4 = tk.Button(baseGround,text = 'OK4').place(relx=0.4, rely=0.5) baseGround.mainloop() |
出力結果
place()のパラメータにrelxとrelyを指定することで、親ウィジェットとの相対位置を指定して配置することができます。
その為、各ボタンは「baseGroundの横幅 × relx」と「baseGroundの高さ × rely」の位置に表示されています。
親ウィジェットとの相対的なサイズを指定して配置する場合
親ウィジェットとの相対的なサイズを指定して配置する場合はplace()をパラメータにrelwidthとrelheightを指定します。
relwidthとrelheightは親Widgetのwidth(幅)とheight(高さ)に対する相対的な長さを設定することができ、0.0~1.0の範囲で設定することができます。
sample.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import tkinter as tk # メインウィンドウを作成 baseGround = tk.Tk() # ウィンドウのサイズを設定 baseGround.geometry('500x300') # 画面タイトル baseGround.title('親ウィジェットとの相対的なサイズを指定して配置する') # ボタンの作成と配置 button1 = tk.Button(baseGround,text = 'OK1').place(x=5, y=5, relwidth=0.3, relheight=0.3) button2 = tk.Button(baseGround,text = 'OK2').place(x=5, y=105, relwidth=0.3, relheight=0.3) button3 = tk.Button(baseGround,text = 'OK3').place(x=180, y=5, relwidth=0.3, relheight=0.3) button4 = tk.Button(baseGround,text = 'OK4').place(x=180, y=105, relwidth=0.3, relheight=0.3) baseGround.mainloop() |
出力結果
place()のパラメータにrelwidthとrelheightを指定することで、親ウィジェットとの相対的なサイズを指定して配置することができます。
その為、各ボタンの横幅は「300×0.3」で「90」、高さは「500×0.3」で「150」となっています。
今回のポイント
tkinterのplace()で行列を指定してウィジェットを配置
⚫︎ tkiterのplace()はウィジェットに座標やサイズを指定してを配置することができる
⚫︎ ウィジェットに座標を指定して配置する場合はplace()のパラメータにxとyを指定する
⚫︎ ウィジェットにサイズを指定して配置する場合はplace()のパラメータにwidthとheightを指定する
⚫︎ 親ウィジェットとの相対的な位置を指定して配置する場合はplace()をパラメータにrelxとrelyを指定する
⚫︎ 親ウィジェットとの相対的なサイズを指定して配置する場合はplace()をパラメータにrelwidthとrelheightを指定する
関連記事
tkinterのpack()メソッドでウィジェット(部品)を配置する方法についてはこちらをご参考ください。
tkinterのgrid()メソッドでウィジェット(部品)を配置する方法ついてはこちらをご参考ください。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。