![](/img/trans.png)
[英]Using Tkinter in Python 2.6 how do I make a button widget print out selected Checkbuttons in a text box?
[英]Tkinter checkbuttons inside of a Text widget and scrolling
使用此stackoverflow帖子中的代碼,我稍微修改了它以包含每個其他檢查按鈕的背景顏色,並設置寬度以填充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()
問題是,當您使用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))
.
.
text.focus() # <----------
root.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.