簡體   English   中英

Tkinter如何在B1-Motion移出小部件時禁用滾動

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

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