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

回答編集履歴

2

文章の修正

2020/08/05 00:28

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -5,8 +5,8 @@
5
5
  canvas.config(scrollregion=canvas.bbox("all"))
6
6
  ```
7
7
 
8
+ ですが、現状のコードではキャンバスに何も描画されておらず、
8
- ですが、現状のコードでは canvas.bbox("all") は None になる為、
9
+ canvas.bbox("all") は None になる為、他にも修正が必要です。
9
- 他にも修正が必要です。
10
10
 
11
11
  - Checkbox は frame2 上に配置 pack() や grid() が必要です。
12
12
  - frame2 はキャンバス外に配置されているため、親を canvas に指定して

1

動作サンプルコードを追加

2020/08/05 00:28

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -16,4 +16,45 @@
16
16
 
17
17
  出来ればコードは、問題が再現する最小限のコードを作って
18
18
  そのままコピーして実行可能な形での掲載をお願いします。
19
- 他に、省略されてる部分に問題が有ることもありますし、動作確認が出来ません。
19
+ 他に、省略されてる部分に問題が有ることもありますし、動作確認が出来ません。
20
+
21
+ ----
22
+
23
+ ```python
24
+ import tkinter as tk
25
+
26
+ root = tk.Tk()
27
+ canvas = tk.Canvas(root, width=400, height=400)
28
+ frame = tk.Frame(canvas)
29
+
30
+ for row in range(40):
31
+ for column in range(20):
32
+ text = "({}, {})".format(row, column)
33
+ chk = tk.Checkbutton(frame, text=text)
34
+ chk.grid(row=row, column=column)
35
+
36
+ # スクロールバーの配置
37
+ hbar = tk.Scrollbar(root, orient=tk.HORIZONTAL)
38
+ hbar.config(command=canvas.xview)
39
+ hbar.pack(side=tk.BOTTOM, fill=tk.X)
40
+ vbar = tk.Scrollbar(root, orient=tk.VERTICAL)
41
+ vbar.config(command=canvas.yview)
42
+ vbar.pack(side=tk.RIGHT,fill=tk.Y)
43
+
44
+ canvas.create_window(0, 0, window=frame)
45
+ canvas.pack(fill=tk.BOTH, expand=True)
46
+ canvas.update_idletasks()
47
+
48
+ canvas.config(
49
+ scrollregion=canvas.bbox("all"),
50
+ xscrollcommand=hbar.set,
51
+ yscrollcommand=vbar.set)
52
+ # スクロールバー位置のリセット
53
+ canvas.xview_moveto(0)
54
+ canvas.yview_moveto(0)
55
+
56
+ print(canvas.bbox("all"))
57
+ root.mainloop()
58
+
59
+
60
+ ```