teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

追記 pack/grid で伸縮可能にする場合のwidth 指定について

2021/02/05 09:00

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -37,7 +37,7 @@
37
37
  frame1.grid_columnconfigure(2, weight=0) # 右
38
38
 
39
39
  btn1 = ttk.Button(frame1, text="ボタン1")
40
- btn2 = ttk.Button(frame1, text="ボタン2")
40
+ btn2 = ttk.Button(frame1, text="ボタン2") # pack/grid で伸縮可能にする場合、widthは自動調整されるのでサイズ指定は上書きされ無効になります
41
41
  btn3 = ttk.Button(frame1, text="ボタン3")
42
42
 
43
43
  #配置

3

weight について、誤解されてそうな感じだったので追記

2021/02/05 09:00

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -47,4 +47,34 @@
47
47
  btn3.grid(column=2, row=0)
48
48
 
49
49
  root.mainloop()
50
+ ```
51
+
52
+ ----
53
+
54
+ weight について、誤解されてそうな感じだったので追記
55
+
56
+ ```python
57
+ import tkinter as tk
58
+ from tkinter import ttk
59
+
60
+ root = tk.Tk()
61
+ frame1 = ttk.Frame(root, padding=10)
62
+ frame1.pack(fill=tk.BOTH, expand=tk.YES)
63
+
64
+ # weight の値について、レイアウト可能な領域の割合として考えてみてください
65
+ # 比率で 1:2:1 にする場合。
66
+ frame1.grid_columnconfigure(0, weight=1)
67
+ frame1.grid_columnconfigure(1, weight=2)
68
+ frame1.grid_columnconfigure(2, weight=1)
69
+
70
+ btn1 = ttk.Button(frame1, text="ボタン1")
71
+ btn2 = ttk.Button(frame1, text="ボタン2")
72
+ btn3 = ttk.Button(frame1, text="ボタン3")
73
+
74
+ # sticky EW(east-west) 指定で、サイズを左右に伸縮可能にする
75
+ btn1.grid(column=0, row=0, sticky=tk.EW)
76
+ btn2.grid(column=1, row=0, sticky=tk.EW)
77
+ btn3.grid(column=2, row=0, sticky=tk.EW)
78
+
79
+ root.mainloop()
50
80
  ```

2

回答例のコードを追記

2021/02/05 08:36

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -18,4 +18,33 @@
18
18
  grid() 引数の sticky を調べて見て下さい。.grid(sticky=tk.NSEW)
19
19
 
20
20
  grid_columnconfigure では、ウィジェットが配置可能な領域の伸縮を決定し、
21
- sticky によりウィジェットがどの方向によるのかが決定されます。
21
+ sticky によりウィジェットがどの方向によるのかが決定されます。
22
+
23
+ ----
24
+
25
+ ```python
26
+ import tkinter as tk
27
+ from tkinter import ttk
28
+
29
+ root = tk.Tk()
30
+ frame1 = ttk.Frame(root, padding=10)
31
+ frame1.pack(fill=tk.BOTH, expand=tk.YES) # 前提として、親ウィジェットを伸縮可能にしておく
32
+ # ※grid() では位置する場合は、root.grid_[row|column]configure の設定も必要
33
+
34
+ # root ではなく、frame の grid_configure
35
+ frame1.grid_columnconfigure(0, weight=0) # 左
36
+ frame1.grid_columnconfigure(1, weight=1) # 中央のみ伸縮可能に
37
+ frame1.grid_columnconfigure(2, weight=0) # 右
38
+
39
+ btn1 = ttk.Button(frame1, text="ボタン1")
40
+ btn2 = ttk.Button(frame1, text="ボタン2")
41
+ btn3 = ttk.Button(frame1, text="ボタン3")
42
+
43
+ #配置
44
+ btn1.grid(column=0, row=0)
45
+ # sticky オプションの有無を確認してみてください。
46
+ btn2.grid(column=1, row=0, sticky=tk.EW)
47
+ btn3.grid(column=2, row=0)
48
+
49
+ root.mainloop()
50
+ ```

1

追記 レイアウト領域とウィジェットの伸縮について

2021/02/05 08:28

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -9,4 +9,13 @@
9
9
  - root.mainloop()
10
10
 
11
11
  を含む、コードをコピーして実行が可能な状態で、
12
- 且つ問題の現象を再現できる最少のコードを提示してください。
12
+ 且つ問題の現象を再現できる最少のコードを提示してください。
13
+
14
+ ----
15
+ 追記: ウィジェットが伸びない問題に関しては、
16
+ 「レイアウト可能な領域の伸縮」「ウィジェットのサイズの伸縮」の2点があります。
17
+
18
+ grid() 引数の sticky を調べて見て下さい。.grid(sticky=tk.NSEW)
19
+
20
+ grid_columnconfigure では、ウィジェットが配置可能な領域の伸縮を決定し、
21
+ sticky によりウィジェットがどの方向によるのかが決定されます。