多个列表框共用一个滚动条测试
之前测试没成功,后来单独测试了各自的回调函数,查看传入的参数信息。
根据这些参数控制列表框,滚动条的位置,达到滚动条一控多。。。
#!/usr/bin/env python
# -*- coding : gb2312 -*-
from tkinter import *
class MyForm(Frame):
def __init__(self, parent, **kw):
Frame.__init__(self, parent, kw)
self.pack()
self.vbar = Scrollbar(self, orient=VERTICAL)
self.b1 = Listbox(self, width=10, yscrollcommand=self.lst_cmd)
self.b2 = Listbox(self, width=10, yscrollcommand=self.lst_cmd)
self.vbar.config(command=self.vbar_cmd)
self.vbar.pack(side=RIGHT, fill=Y)
self.b1.pack(side=LEFT, fill=BOTH, expand=1)
self.b2.pack(side=LEFT, fill=BOTH, expand=1)
for i in range(100):
self.b1.insert(END, 'A_%d' % i )
self.b2.insert(END, 'B_%d' % i )
def lst_cmd(self, *args): # 每个列表框的滚动更新所有控件
#print('args:', args) # args: ('0.03', '0.13')
lo, hi = float(args[0]), float(args[1])
self.b1.yview_moveto(lo)
self.b2.yview_moveto(lo)
self.vbar.set( lo, hi )
def vbar_cmd(self, *args): # 滚动条一个控制两个
l,h = self.vbar.get()
d = h-l
print(l,h)
if args[0] == 'moveto':
low = float( args[1] )
self.b1.yview_moveto(low)
self.b2.yview_moveto(low)
self.vbar.set( low, low+d )
return
class App:
def __init__(self):
self.root = Tk()
self.root.title('两个列表框共用一个滚动条测试')
self.myfrom = MyForm(self.root)
def Run(self):
self.root.mainloop()
app = App()
app.Run()