回答編集履歴

4

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

2021/02/05 09:00

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -76,7 +76,7 @@
76
76
 
77
77
  btn1 = ttk.Button(frame1, text="ボタン1")
78
78
 
79
- btn2 = ttk.Button(frame1, text="ボタン2")
79
+ btn2 = ttk.Button(frame1, text="ボタン2") # pack/grid で伸縮可能にする場合、widthは自動調整されるのでサイズ指定は上書きされ無効になります
80
80
 
81
81
  btn3 = ttk.Button(frame1, text="ボタン3")
82
82
 

3

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

2021/02/05 09:00

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -97,3 +97,63 @@
97
97
  root.mainloop()
98
98
 
99
99
  ```
100
+
101
+
102
+
103
+ ----
104
+
105
+
106
+
107
+ weight について、誤解されてそうな感じだったので追記
108
+
109
+
110
+
111
+ ```python
112
+
113
+ import tkinter as tk
114
+
115
+ from tkinter import ttk
116
+
117
+
118
+
119
+ root = tk.Tk()
120
+
121
+ frame1 = ttk.Frame(root, padding=10)
122
+
123
+ frame1.pack(fill=tk.BOTH, expand=tk.YES)
124
+
125
+
126
+
127
+ # weight の値について、レイアウト可能な領域の割合として考えてみてください
128
+
129
+ # 比率で 1:2:1 にする場合。
130
+
131
+ frame1.grid_columnconfigure(0, weight=1)
132
+
133
+ frame1.grid_columnconfigure(1, weight=2)
134
+
135
+ frame1.grid_columnconfigure(2, weight=1)
136
+
137
+
138
+
139
+ btn1 = ttk.Button(frame1, text="ボタン1")
140
+
141
+ btn2 = ttk.Button(frame1, text="ボタン2")
142
+
143
+ btn3 = ttk.Button(frame1, text="ボタン3")
144
+
145
+
146
+
147
+ # sticky EW(east-west) 指定で、サイズを左右に伸縮可能にする
148
+
149
+ btn1.grid(column=0, row=0, sticky=tk.EW)
150
+
151
+ btn2.grid(column=1, row=0, sticky=tk.EW)
152
+
153
+ btn3.grid(column=2, row=0, sticky=tk.EW)
154
+
155
+
156
+
157
+ root.mainloop()
158
+
159
+ ```

2

回答例のコードを追記

2021/02/05 08:36

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -39,3 +39,61 @@
39
39
  grid_columnconfigure では、ウィジェットが配置可能な領域の伸縮を決定し、
40
40
 
41
41
  sticky によりウィジェットがどの方向によるのかが決定されます。
42
+
43
+
44
+
45
+ ----
46
+
47
+
48
+
49
+ ```python
50
+
51
+ import tkinter as tk
52
+
53
+ from tkinter import ttk
54
+
55
+
56
+
57
+ root = tk.Tk()
58
+
59
+ frame1 = ttk.Frame(root, padding=10)
60
+
61
+ frame1.pack(fill=tk.BOTH, expand=tk.YES) # 前提として、親ウィジェットを伸縮可能にしておく
62
+
63
+ # ※grid() では位置する場合は、root.grid_[row|column]configure の設定も必要
64
+
65
+
66
+
67
+ # root ではなく、frame の grid_configure
68
+
69
+ frame1.grid_columnconfigure(0, weight=0) # 左
70
+
71
+ frame1.grid_columnconfigure(1, weight=1) # 中央のみ伸縮可能に
72
+
73
+ frame1.grid_columnconfigure(2, weight=0) # 右
74
+
75
+
76
+
77
+ btn1 = ttk.Button(frame1, text="ボタン1")
78
+
79
+ btn2 = ttk.Button(frame1, text="ボタン2")
80
+
81
+ btn3 = ttk.Button(frame1, text="ボタン3")
82
+
83
+
84
+
85
+ #配置
86
+
87
+ btn1.grid(column=0, row=0)
88
+
89
+ # sticky オプションの有無を確認してみてください。
90
+
91
+ btn2.grid(column=1, row=0, sticky=tk.EW)
92
+
93
+ btn3.grid(column=2, row=0)
94
+
95
+
96
+
97
+ root.mainloop()
98
+
99
+ ```

1

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

2021/02/05 08:28

投稿

teamikl
teamikl

スコア8760

test CHANGED
@@ -21,3 +21,21 @@
21
21
  を含む、コードをコピーして実行が可能な状態で、
22
22
 
23
23
  且つ問題の現象を再現できる最少のコードを提示してください。
24
+
25
+
26
+
27
+ ----
28
+
29
+ 追記: ウィジェットが伸びない問題に関しては、
30
+
31
+ 「レイアウト可能な領域の伸縮」「ウィジェットのサイズの伸縮」の2点があります。
32
+
33
+
34
+
35
+ grid() 引数の sticky を調べて見て下さい。.grid(sticky=tk.NSEW)
36
+
37
+
38
+
39
+ grid_columnconfigure では、ウィジェットが配置可能な領域の伸縮を決定し、
40
+
41
+ sticky によりウィジェットがどの方向によるのかが決定されます。