2015-07-01 48 views
0

我試圖放在一起顯示一串從dict生成的標籤的窗口。我無法讓滾動條正常工作。當我調整窗口大小時,它們不會粘在框架的兩側,我無法讓畫布響應滾動命令。我需要這個窗口來支持大量的標籤。在tkinter中使用滾動條與畫布

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() 

很明顯,我是新來的。我完全有可能對這些小部件如何相互作用存在根本的誤解。任何幫助深表感謝。

回答

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) 
相關問題