在tkinter中使用带有画布的滚动条

时间:2015-07-01 14:50:22

标签: python tkinter

我试图整理一个窗口,显示从dict生成的一堆标签。我无法让滚动条正常工作。当我调整窗口大小时,它们不会粘在框架的两侧,我无法让画布响应滚动命令。我需要窗口来支持大量标签。

from Tkinter import *
from math import floor

bits = {}

#the dict is then built

class Bitbox(Canvas):
def __init__(self, parent, bitdict, *args, **kwargs):
    Canvas.__init__(self, parent, background="black")
    self.bitdict = bitdict
    self.parent = parent
    self.lbllist = []

    n=0
    for i in bitdict.keys():
        label = Label(self, text=i, bg='black', fg='green')
        n += 1
        label.grid(row = ((n-1)%30), column=int(floor((n-1)/30)))
        self.lbllist.append(label)


def main():

    root = Tk()
    frame = Frame(root)
    frame.grid(sticky=N+S+E+W)
    bts = Bitbox(frame, bits)
    bts.grid(row=0, column=0)
    vbar = Scrollbar(frame, orient=VERTICAL)
    vbar.grid(row=0, column=1, sticky=N+S)
    vbar.config(command=bts.yview)
    hbar = Scrollbar(frame, orient=HORIZONTAL)
    hbar.grid(row=1, column=0, columnspan=2, sticky=W+E)
    bts.config(xscrollcommand=hbar.set)
    hbar.config(command=bts.xview)
    bts.config(yscrollcommand=vbar.set)
    bts.config(scrollregion=(0,0,500,1000))

    root.mainloop()
显然,我对这一切都很陌生。我完全有可能对这些小部件如何相互作用产生根本性的误解。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

让滚动条对鼠标做出反应将鼠标绑定到滚动条,如下所示:

def on_mousewheel(event):
    bts.yview_scroll(-1*(event.delta/120), "units")


def main():
    global bts

    #your code...

    root.bind_all("<MouseWheel>",on_mousewheel)