回答編集履歴
3
修正
test
CHANGED
@@ -235,101 +235,3 @@
|
|
235
235
|
ここから先、キー操作・マウスホィール対応や他のスクロールイベントは
|
236
236
|
|
237
237
|
コメントに書いた URL のコードを参考にして下さい。
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
----
|
242
|
-
|
243
|
-
## ツリービューの要素を固定する
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
insert したアイテムは固定して、内容 values のみを変更。
|
248
|
-
|
249
|
-
※ 但し、選択中の要素を保持してる場合、参照内容が変わってしまうことには注意。
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
```python
|
254
|
-
|
255
|
-
#!/usr/bin/env python3.9
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
import tkinter as tk
|
260
|
-
|
261
|
-
from tkinter import ttk
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
N = 1000 # データの件数
|
266
|
-
|
267
|
-
PAGE_SIZE = 10 # 一度に表示する件数
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
root = tk.Tk()
|
272
|
-
|
273
|
-
tree = ttk.Treeview(root, height=PAGE_SIZE, show="headings", columns=[1])
|
274
|
-
|
275
|
-
tree.pack(fill=tk.BOTH, side=tk.LEFT, expand=tk.YES)
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
def update_tree_items(offset=0, size=PAGE_SIZE):
|
282
|
-
|
283
|
-
# 表示中の要素の内容を更新
|
284
|
-
|
285
|
-
for idx, child in enumerate(tree.get_children()):
|
286
|
-
|
287
|
-
tree.item(child, values=(offset+idx,))
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
def yview(command, amount, unit=None):
|
294
|
-
|
295
|
-
if command == "moveto":
|
296
|
-
|
297
|
-
offset = max(0, min(N-PAGE_SIZE, int(float(amount) * N)))
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
# 表示するアイテムを更新
|
302
|
-
|
303
|
-
update_tree_items(offset, PAGE_SIZE)
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
first = offset / N
|
308
|
-
|
309
|
-
last = (offset + PAGE_SIZE) / N
|
310
|
-
|
311
|
-
vbar.set(first, last)
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
vbar = ttk.Scrollbar(root, orient=tk.VERTICAL, command=yview)
|
318
|
-
|
319
|
-
vbar.pack(side=tk.RIGHT, fill=tk.Y)
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
# 予め固定数の要素を準備しておく
|
324
|
-
|
325
|
-
for _ in range(PAGE_SIZE):
|
326
|
-
|
327
|
-
tree.insert("", tk.END, values=())
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
root.after_idle(yview, "moveto", 0.0)
|
332
|
-
|
333
|
-
root.mainloop()
|
334
|
-
|
335
|
-
```
|
2
追加: 毎回削除しているのを、更新のみに変更
test
CHANGED
@@ -235,3 +235,101 @@
|
|
235
235
|
ここから先、キー操作・マウスホィール対応や他のスクロールイベントは
|
236
236
|
|
237
237
|
コメントに書いた URL のコードを参考にして下さい。
|
238
|
+
|
239
|
+
|
240
|
+
|
241
|
+
----
|
242
|
+
|
243
|
+
## ツリービューの要素を固定する
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
insert したアイテムは固定して、内容 values のみを変更。
|
248
|
+
|
249
|
+
※ 但し、選択中の要素を保持してる場合、参照内容が変わってしまうことには注意。
|
250
|
+
|
251
|
+
|
252
|
+
|
253
|
+
```python
|
254
|
+
|
255
|
+
#!/usr/bin/env python3.9
|
256
|
+
|
257
|
+
|
258
|
+
|
259
|
+
import tkinter as tk
|
260
|
+
|
261
|
+
from tkinter import ttk
|
262
|
+
|
263
|
+
|
264
|
+
|
265
|
+
N = 1000 # データの件数
|
266
|
+
|
267
|
+
PAGE_SIZE = 10 # 一度に表示する件数
|
268
|
+
|
269
|
+
|
270
|
+
|
271
|
+
root = tk.Tk()
|
272
|
+
|
273
|
+
tree = ttk.Treeview(root, height=PAGE_SIZE, show="headings", columns=[1])
|
274
|
+
|
275
|
+
tree.pack(fill=tk.BOTH, side=tk.LEFT, expand=tk.YES)
|
276
|
+
|
277
|
+
|
278
|
+
|
279
|
+
|
280
|
+
|
281
|
+
def update_tree_items(offset=0, size=PAGE_SIZE):
|
282
|
+
|
283
|
+
# 表示中の要素の内容を更新
|
284
|
+
|
285
|
+
for idx, child in enumerate(tree.get_children()):
|
286
|
+
|
287
|
+
tree.item(child, values=(offset+idx,))
|
288
|
+
|
289
|
+
|
290
|
+
|
291
|
+
|
292
|
+
|
293
|
+
def yview(command, amount, unit=None):
|
294
|
+
|
295
|
+
if command == "moveto":
|
296
|
+
|
297
|
+
offset = max(0, min(N-PAGE_SIZE, int(float(amount) * N)))
|
298
|
+
|
299
|
+
|
300
|
+
|
301
|
+
# 表示するアイテムを更新
|
302
|
+
|
303
|
+
update_tree_items(offset, PAGE_SIZE)
|
304
|
+
|
305
|
+
|
306
|
+
|
307
|
+
first = offset / N
|
308
|
+
|
309
|
+
last = (offset + PAGE_SIZE) / N
|
310
|
+
|
311
|
+
vbar.set(first, last)
|
312
|
+
|
313
|
+
|
314
|
+
|
315
|
+
|
316
|
+
|
317
|
+
vbar = ttk.Scrollbar(root, orient=tk.VERTICAL, command=yview)
|
318
|
+
|
319
|
+
vbar.pack(side=tk.RIGHT, fill=tk.Y)
|
320
|
+
|
321
|
+
|
322
|
+
|
323
|
+
# 予め固定数の要素を準備しておく
|
324
|
+
|
325
|
+
for _ in range(PAGE_SIZE):
|
326
|
+
|
327
|
+
tree.insert("", tk.END, values=())
|
328
|
+
|
329
|
+
|
330
|
+
|
331
|
+
root.after_idle(yview, "moveto", 0.0)
|
332
|
+
|
333
|
+
root.mainloop()
|
334
|
+
|
335
|
+
```
|
1
コード修正
test
CHANGED
@@ -78,7 +78,7 @@
|
|
78
78
|
|
79
79
|
|
80
80
|
|
81
|
-
def update_tree_items(offset=0, size):
|
81
|
+
def update_tree_items(offset=0, size=PAGE_SIZE):
|
82
82
|
|
83
83
|
tree.delete(*tree.get_children())
|
84
84
|
|