ウィジェットを配置するには、pack,grid,placeの3つのメソッドがありますが、ここではplaceについて説明します。
placeではウィジェットの位置を座標を指定して配置します。
初期状態では下記のように親(配置先)の左上を原点として、ウィジェットの左上の座標(初期状態の場合、anchorにより変更可)を指定します。
以下に簡単なサンプルを示します。
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master = None):
super().__init__(master)
self.master.title("ウィジェットの配置(place)") # ウィンドウタイトル
self.master.geometry("300x200") # ウィンドウサイズ(幅x高さ)
#--------------------------------------------------------
# ボタンの作成
button = tk.Button(self.master, text = "ボタン")
# 座標を指定して配置
button.place(x = 100, y = 50)
#--------------------------------------------------------
if __name__ == "__main__":
root = tk.Tk()
app = Application(master = root)
app.mainloop()
(実行画面)
構文
ウィジェット.place(オプション1 = 設定値, オプション2 = 設定値,・・・)
オプション
オプション名 | 説明 |
x | 配置するX座標を指定します。 |
y | 配置するY座標を指定します。 |
relx | 配置先の座標を配置先の幅に対して相対的な位置を0.0~1.0の値で指定します。 0.0:左端、1.0:右端 |
rely | 配置先の座標を配置先の高さに対して相対的な位置を0.0~1.0の値で指定します。 0.0:上端、1.0:下端 |
anchor | ウィジェットを配置する座標の基準位置を指定します。 【設定値】tk.N, tk.NE, tk.E, tk.SE, tk.S, tk.SW, tk.W, tk.NW, tk.CENTER 【初期値】tk.NW |
width | ウィジェットの幅を画素数で指定します。 |
height | ウィジェットの高さを画素数で指定します。 |
relwidth | ウィジェットの幅を配置先の幅に対して相対的な値(0.0~1.0)で指定します。 |
relheight | ウィジェットの高さを配置先の高さに対して相対的な値(0.0~1.0)で指定します。 |
anchor
anchorの基準位置はウィジェットに対して以下のようになります。
サンプル
各種オプション設定を使ったサンプルを示します。
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master = None):
super().__init__(master)
self.master.title("ウィジェットの配置(place)") # ウィンドウタイトル
self.master.geometry("300x400") # ウィンドウサイズ(幅x高さ)
#--------------------------------------------------------
# ボタンの作成
button1 = tk.Button(self.master, text = "ボタン1")
button1.place(x = 30, y = 20)
button2 = tk.Button(self.master, text = "ボタン2")
button2.place(x = 80, y = 70, anchor = tk.CENTER) # 指定座標の基準位置変更
button3 = tk.Button(self.master, text = "ボタン3")
button3.place(x = 30, y = 90, width = 100, height = 40) # ウィジェットのサイズ指定
button4 = tk.Button(self.master, text = "ボタン4")
button4.place(relx = 0.5, rely = 0.4, anchor = tk.CENTER) # 相対座標指定
button5 = tk.Button(self.master, text = "ボタン5")
button5.place(relx = 0.5, relwidth = 0.8, y = 200, anchor = tk.CENTER) # ウィジェットのサイズを相対的に指定
#--------------------------------------------------------
if __name__ == "__main__":
root = tk.Tk()
app = Application(master = root)
app.mainloop()
(実行画面)