[英]Tkinter how to disable scrolling when B1-Motion out of widget
所以我有一個程序,我正在制作包含文本小部件的平板電腦。 我希望能夠通過單擊並拖動它們來滾動文本小部件(因為滾動條很難通過觸摸屏使用)。
問題是,無論何時在滾動時離開文本小部件,您都會看到我與Tkinter通常如何響應的功能。
通常,如果你拖出一個文本小部件,它將向那個方向滾動,但這反對我的功能。
道歉,因為我知道這措辭很差,但如果你嘗試代碼並嘗試拖動它滾動,你會看到我的問題。
import Tkinter as Tk
last_y= None
root = Tk.Tk()
Text_widget= Tk.Text(root, height=20, width=30)
Text_widget.pack()
Text_widget.insert(Tk.END, "t\nh\ni\ns\n \na\n \nt\ne\ns\nt\n \nt\no\n \nf\ni\ng\nu\nr\ne\n \nt\nh\ni\ns\n \no\nu\nt\n\
t\nh\ni\ns\n \na\n \nt\ne\ns\nt\n \nt\no\n \nf\ni\ng\nu\nr\ne\n \nt\nh\ni\ns\n \no\nu\nt\n\
t\nh\ni\ns\n \na\n \nt\ne\ns\nt\n \nt\no\n \nf\ni\ng\nu\nr\ne\n \nt\nh\ni\ns\n \no\nu\nt\n\
t\nh\ni\ns\n \na\n \nt\ne\ns\nt\n \nt\no\n \nf\ni\ng\nu\nr\ne\n \nt\nh\ni\ns\n \no\nu\nt\n\
t\nh\ni\ns\n \na\n \nt\ne\ns\nt\n \nt\no\n \nf\ni\ng\nu\nr\ne\n \nt\nh\ni\ns\n \no\nu\nt\n")
Text_widget.config(state='disabled')
def tablet_drag_y(event):
global last_y
print 5
if last_y==None:
last_y=event.y_root
event.widget.tag_remove(Tk.SEL, "1.0", Tk.END)
return "break"
movement= (event.y_root-last_y)
event.widget.yview(Tk.SCROLL,-1*(movement), "pixels")
last_y=event.y_root
event.widget.tag_remove(Tk.SEL, "1.0", Tk.END)
return "break"
Text_widget.bind("<B1-Motion>", tablet_drag_y)
Tk.mainloop()
所以,萬一其他人試圖這樣做,我只是想正式回答,所有的功勞都歸功於解決方案。
問題出現在"<Enter>"
和"<Leave>"
事件中,因此我只需要使用return "break"
來阻止它發生的函數綁定它們。
這是我的示例代碼的更新版本,並實現了解決方案。
import Tkinter as Tk
last_y= None
root = Tk.Tk()
Text_widget= Tk.Text(root, height=20, width=30)
Text_widget.pack()
Text_widget.insert(Tk.END, "t\nh\ni\ns\n \na\n \nt\ne\ns\nt\n \nt\no\n \nf\ni\ng\nu\nr\ne\n \nt\nh\ni\ns\n \no\nu\nt\n\
t\nh\ni\ns\n \na\n \nt\ne\ns\nt\n \nt\no\n \nf\ni\ng\nu\nr\ne\n \nt\nh\ni\ns\n \no\nu\nt\n\
t\nh\ni\ns\n \na\n \nt\ne\ns\nt\n \nt\no\n \nf\ni\ng\nu\nr\ne\n \nt\nh\ni\ns\n \no\nu\nt\n\
t\nh\ni\ns\n \na\n \nt\ne\ns\nt\n \nt\no\n \nf\ni\ng\nu\nr\ne\n \nt\nh\ni\ns\n \no\nu\nt\n\
t\nh\ni\ns\n \na\n \nt\ne\ns\nt\n \nt\no\n \nf\ni\ng\nu\nr\ne\n \nt\nh\ni\ns\n \no\nu\nt\n")
Text_widget.config(state='disabled')
def tablet_drag_y(event):
global last_y
print 5
if last_y==None:
last_y=event.y_root
event.widget.tag_remove(Tk.SEL, "1.0", Tk.END)
return "break"
movement= (event.y_root-last_y)
event.widget.yview(Tk.SCROLL,-1*(movement), "pixels")
last_y=event.y_root
event.widget.tag_remove(Tk.SEL, "1.0", Tk.END)
return "break"
def cancel_normal_scroll(event):
return "break"
Text_widget.bind("<B1-Motion>", tablet_drag_y)
Text_widget.bind("<Enter>", cancel_normal_scroll)
Text_widget.bind("<Leave>", cancel_normal_scroll)
Tk.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.