回答編集履歴
3
追記2 TCL を使わない方法
answer
CHANGED
@@ -30,3 +30,25 @@
|
|
30
30
|
|
31
31
|
一応、マウスクリック時にフラグを立てる等で、ループしないように工夫することは可能ですが、
|
32
32
|
他の問題を引き起こしやすいコードになる為、回避策のひとつとして案だけ提示しておきます。あまりお勧めは出来ません。
|
33
|
+
|
34
|
+
----
|
35
|
+
追記2:
|
36
|
+
|
37
|
+
ttk::treeview::Select ~ toggle は select_toggle で代用出来ました。
|
38
|
+
focus 状態の要素を所得する為、ButtonPress ではなく Release 時に登録。
|
39
|
+
|
40
|
+
```python
|
41
|
+
import tkinter as tk
|
42
|
+
from tkinter import ttk
|
43
|
+
|
44
|
+
root = tk.Tk()
|
45
|
+
tree = ttk.Treeview(root, selectmode="none", columns=("value",))
|
46
|
+
tree.bind("<ButtonRelease-1>", lambda e: tree.select_toggle(tree.focus()))
|
47
|
+
|
48
|
+
for num in range(5):
|
49
|
+
tree.insert("", tk.END, values=(num,))
|
50
|
+
|
51
|
+
tree.pack()
|
52
|
+
root.mainloop()
|
53
|
+
|
54
|
+
```
|
2
質問のコードの問題点について追記
answer
CHANGED
@@ -19,3 +19,14 @@
|
|
19
19
|
Ctrlクリックした時と同じ処理を呼び出すようにすれば、実現できると思いますが、
|
20
20
|
Select メソッドは tkinter のクラスでは提供されてません。
|
21
21
|
tcl の eval で直接 Tcl のコマンドを呼び出す実装になります。
|
22
|
+
|
23
|
+
|
24
|
+
----
|
25
|
+
追記: 質問のコードの問題点について、
|
26
|
+
|
27
|
+
ループするというのは、event_select は `<<<TreeviewSelect>>` での呼び出しでしょうか?
|
28
|
+
原因はイベントハンドラ内で同イベントが発呼されている為なので、
|
29
|
+
イベントハンドラ内でそのハンドラのトリガーとなるイベントを起こしてはいけません。
|
30
|
+
|
31
|
+
一応、マウスクリック時にフラグを立てる等で、ループしないように工夫することは可能ですが、
|
32
|
+
他の問題を引き起こしやすいコードになる為、回避策のひとつとして案だけ提示しておきます。あまりお勧めは出来ません。
|
1
未検証のコードだったため、一時撤回
answer
CHANGED
@@ -10,11 +10,6 @@
|
|
10
10
|
{ ttk::treeview::Select %W %x %y toggle }
|
11
11
|
""")
|
12
12
|
|
13
|
-
# 個別に変更する場合
|
14
|
-
tree.tk.eval(f"""
|
15
|
-
bind {tree} <ButtonPress-1> \
|
16
|
-
{ ttk::treeview::Select %W %x %y toggle }
|
17
|
-
""")
|
18
13
|
```
|
19
14
|
|
20
15
|
|