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