2012-07-19 80 views
0

我遇到問題的方式,右鍵獲取其選擇。我不擅長座標,所以我不知道如何扭轉我選擇的方式。我想滾動列表框選擇鼠標的方式,而不是像現在這樣。我只是喜歡它在向下/向上移動鼠標時選擇列表框中的下一個項目。Python Tkinter:列表框拖動選擇

from Tkinter import * 

def _select(y): 
    row = lb.nearest(y) 
    lb.selection_clear(0, END) 
    lb.selection_set(row) 

def _b2motion(x, y): 
    lb.scan_dragto(x, y) 
    _select(y) 
    return 'break' 


root = Tk() 

sb = Scrollbar(root) 
lb =Listbox(root, width=20,yscrollcommand=sb.set) 

lb.bind('<B3-Motion>', lambda e: _b2motion(e.x, e.y)) 
sb.config(command=lb.yview) 

lb.grid(row=0,column=0) 
sb.grid(row=0,column=1,sticky=N+S) 


for x in range(50): 
    lb.insert(END, x) 

mainloop() 

回答

1

如果您在運動框中翻轉y上的標誌,將改變滾動的方向。除以如果你需要它慢一個整數,我喜歡3.

def _b2motion(x, y): 
    lb.scan_dragto(x, (-y/3)) #here 
    _select(y) 
    return 'break' 

我不知道你的問題的其餘部分...你想複製與右側的按鈕左側的按鈕做什麼呢?

+0

我真的很喜歡我如何減慢滾動速度,但我的問題是當你點擊程序的底部右鍵點擊的大跳躍 – Crispy 2012-07-23 20:07:32

+2

@Crispy看起來這是不可避免的使用'scan_dragto'。嘗試'lb.yview_scroll((y/100),'units')',而不是滾動窗口。再次,100是一個縮放 – Squid1361 2012-07-24 16:56:19

+0

哈哈終於,這是完美的。非常感謝 – Crispy 2012-07-24 19:04:58