Canvas 水平滚动,同时在垂直滚动中排列多个列表框

Canvas 水平滚动,同时在垂直滚动中排列多个列表框,canvas,Canvas,请注意,我设法将所有listbox绑定为使用垂直滚动条垂直滚动,但找不到它不滚动H的原因 root=Tk() frame=Frame(root,width=300,height=300) frame.pack(expand=True, fill=BOTH) #.grid(row=0,column=0) canvas=Canvas(frame,bg='#FFFFFF',width=500,height=500,scrollregion=(0,0,1500,1500)) def on_mouse

请注意,我设法将所有listbox绑定为使用垂直滚动条垂直滚动,但找不到它不滚动H的原因

root=Tk()
frame=Frame(root,width=300,height=300)
frame.pack(expand=True, fill=BOTH) #.grid(row=0,column=0)
canvas=Canvas(frame,bg='#FFFFFF',width=500,height=500,scrollregion=(0,0,1500,1500))


def on_mouse_wheel(event):

    # automate Listbox creation
    for i in range(10):
        lb[i].yview("scroll", event.delta // 50, "units")
    return "break"
这将生成列表框,并在滚动时获取值:


谢谢大家!

正如我所想的,这肯定是因为我无法发出正确的滚动命令,使用xview只能与文本小部件一起工作,使用canvas scroll(在创建画布内部框架后)也不会滚动所有listbox(我不想滚动listbox内的数据,但所有这些数据都在一起,因为我有20个),当然我可以使行更细,但如果我添加更多的列表框,这仍然是一个问题。问题可能是因为我在每个listbox上都使用了pack方法,正如我所想的,这肯定是因为我无法发出正确的命令来滚动,使用xview只能与文本小部件一起工作,使用canvas scroll(在框架内创建canvas之后)也不会滚动所有listbox(我不想滚动列表框内的数据,但所有这些数据都在一起,因为我有20个),当然我可以使行更细,但如果我添加更多列表框,这仍然是一个问题。问题可能是因为我在每个列表框上使用了pack方法
data = read_from_database()

x = 0
for index, dat in enumerate(data):
    x = len(dat)
print(x)
lb = {}
for i in range(10):
    listbox = Listbox(canvas, width=14, relief="sunken")
    listbox.pack(side="left", fill="y", expand=False)
    lb[i] = listbox
    for index, dat in enumerate(data):
        lb[i].insert(index, dat[i])
        lb[i].bind("<MouseWheel>", on_mouse_wheel)




def on_vsb(*args):

    # # automate Listbox yview method creation
    for i in range(10):
        lb[i].yview(*args)
hbar=Scrollbar(frame,orient=HORIZONTAL)
hbar.pack(side=BOTTOM,fill=X)
hbar.config(command=canvas.xview)
vbar=Scrollbar(canvas,orient=VERTICAL, command=on_vsb)
vbar.pack(side=RIGHT,fill=Y)
canvas.config(width=500,height=500)
canvas.config(xscrollcommand=hbar.set)
canvas.pack(side=LEFT,expand=True,fill=BOTH)
root.mainloop()