2012-01-17 73 views
3

使用在this stackoverflow post中找到的代码,我稍微改变了它以包含每个其他checkbutton的背景色并设置宽度以填充Text小部件的宽度。但是,发生这种情况时,我无法使用鼠标滚轮进行滚动。我必须抓住滚动条。Tkinter checkbuttons在Text小部件中滚动

有没有更好的方法来做到这一点,将允许正常滚动?这里是我的代码:

import Tkinter as tk 

root = tk.Tk() 
vsb = tk.Scrollbar(orient="vertical") 
text = tk.Text(root, width=40, height=20, yscrollcommand=vsb.set) 
vsb.config(command=text.yview) 
vsb.pack(side="right",fill="y") 
text.pack(side="top",fill="both",expand=True) 
for i in range(1000): 
    bg = 'grey' 
    if i % 2 == 0: 
     bg = 'white' 
    cb = tk.Checkbutton(text="checkbutton #%s" % i, bg=bg, width=35, justify=tk.LEFT) 
    text.window_create("end", window=cb) 
    text.insert("end", "\n") # to force one checkbox per line 

root.mainloop() 

回答

0
. 
. 
text.focus() # <---------- 
root.mainloop() 
+0

这似乎没有帮助吗?至少不是这个例子... – intargc 2012-01-27 18:27:08

1

的问题是,当你填写了Checkbuttons文本控件,你现在用Checkbuttons'事件绑定当你的鼠标在窗口(而不是文本交互这是“隐藏”的小部件)。而Text小部件具有用于滚动鼠标的按钮(按钮4和5),Checkbuttons不会自动附带。 (AFAIK)家长小部件不能自动设置为通过他们的孩子接收任何事件,因此您必须手动完成。以下代码将生效(在创建后cb后插入):

cb.bind('<Button-4>', lambda event: text.yview_scroll(-1, tk.UNITS)) 
cb.bind('<Button-5>', lambda event: text.yview_scroll(1, tk.UNITS))