我可以看到如何在树中剪切和粘贴节点,或者使用按钮或键绑定上下移动它们。有没有办法在树视图周围实现拖放节点?
问问题
4266 次
3 回答
10
这是一些处理左键单击和 shift-left-click 的工作示例代码:
import Tkinter as tk
import ttk
def bDown_Shift(event):
tv = event.widget
select = [tv.index(s) for s in tv.selection()]
select.append(tv.index(tv.identify_row(event.y)))
select.sort()
for i in range(select[0],select[-1]+1,1):
tv.selection_add(tv.get_children()[i])
def bDown(event):
tv = event.widget
if tv.identify_row(event.y) not in tv.selection():
tv.selection_set(tv.identify_row(event.y))
def bUp(event):
tv = event.widget
if tv.identify_row(event.y) in tv.selection():
tv.selection_set(tv.identify_row(event.y))
def bUp_Shift(event):
pass
def bMove(event):
tv = event.widget
moveto = tv.index(tv.identify_row(event.y))
for s in tv.selection():
tv.move(s, '', moveto)
root = tk.Tk()
tree = ttk.Treeview(columns=("col1","col2"),
displaycolumns="col2",
selectmode='none')
# insert some items into the tree
for i in range(10):
tree.insert('', 'end',iid='line%i' % i, text='line:%s' % i, values=('', i))
tree.grid()
tree.bind("<ButtonPress-1>",bDown)
tree.bind("<ButtonRelease-1>",bUp, add='+')
tree.bind("<B1-Motion>",bMove, add='+')
tree.bind("<Shift-ButtonPress-1>",bDown_Shift, add='+')
tree.bind("<Shift-ButtonRelease-1>",bUp_Shift, add='+')
root.mainloop()
于 2012-11-13T01:40:15.680 回答
5
您必须自己进行设置,但这绝对是可能的。您只需要为<ButtonPress-1>
(识别要拖动的项目)、<ButtonRelease-1>
(实现拖放)和<B1-Motion>
(在拖动过程中提供反馈)进行适当的绑定
于 2012-07-20T13:53:18.240 回答
3
无法对解决方案发表评论,因此在此处添加了我的 50c:要解决通过多级树上下拖动的问题,您需要在移动时指定父 ID,如下所示:
tv.move(s, tv.identify_row(event.y), moveto)
这可能对某人有用...
于 2017-01-11T19:45:35.903 回答