多个列表框共用一个滚动条测试

之前测试没成功,后来单独测试了各自的回调函数,查看传入的参数信息。

根据这些参数控制列表框,滚动条的位置,达到滚动条一控多。。。


#!/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()


评论
©appall | Powered by LOFTER