2012-07-19 228 views
1

我可以看到如何剪切和粘贴树中的节点或使用按钮或键绑定上下移动节点。有没有一种方法可以在树视图中实现拖放节点?tkinter treeview - 拖放?

回答

2

你必须自己设置它,但它绝对有可能。您将只需要作出适当的绑定<ButtonPress-1>(识别物品被拖动),<ButtonRelease-1>(实现下降),以及<B1-Motion>(拖曳期间提供反馈)

10

下面是处理左键点击一些工作示例代码和移位,左击:

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() 
+0

“bUp”的用途是什么?我删除了它,它似乎以相同的方式工作。编辑:我已经删除除了bMove以外的所有东西,它似乎仍然工作。 – Sithling 2017-05-24 10:34:21

2

无法离开的解决方案发表意见所以这里加了我50: 来解决问题通过多层次树拖动上下,你需要指定父ID移动时,如每行下面:

tv.move(s,tv.ide ntify_row(event.y),moveto)

这可能对某人有用......

+0

一旦你达到50分,你将可以发表评论。这样做的目的是让钓鱼者远离网站,并确保新用户遵守答复指南。你的答案看起来不错。 – 2017-01-11 20:07:09