文本小部件内的Tkinter检查按钮和滚动

时间:2012-01-17 03:04:59

标签: python tkinter

使用this stackoverflow post中的代码,我稍微改了一下,为每个其他检查按钮添加背景颜色,并设置宽度以填充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()

2 个答案:

答案 0 :(得分:1)

问题在于,当您使用Checkbuttons填充Text小部件时,您现在可以在鼠标悬停在窗口上时与Checkbuttons的事件绑定进行交互(而不是“隐藏”的Text小部件)。 “文本”窗口小部件具有鼠标滚动的绑定(按钮4和5),而“检查”按钮不会自动随附。并且(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))

答案 1 :(得分:0)

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