簡體   English   中英

文本小部件內的Tkinter檢查按鈕和滾動

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM