2012-07-19 116 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