我認爲這是一個很常見的問題,但我找不到答案。Python Tkinter - 滾動鼠標位置的畫布
我試圖做一個窗口,根據鼠標位置滾動:如果鼠標靠近屏幕頂部,它滾動到頂部,如果它靠近右邊框,它滾動到對等等。下面是代碼:
from tkinter import *
from tkinter import ttk
root = Tk()
h = ttk.Scrollbar(root, orient = HORIZONTAL)
v = ttk.Scrollbar(root, orient = VERTICAL)
canvas = Canvas(root, scrollregion = (0, 0, 2000, 2000), width = 600, height = 600, yscrollcommand = v.set, xscrollcommand = h.set)
h['command'] = canvas.xview
v['command'] = canvas.yview
ttk.Sizegrip(root).grid(column=1, row=1, sticky=(S,E))
canvas.grid(column = 0, row = 0, sticky = (N,W,E,S))
h.grid(column = 0, row = 1, sticky = (W,E))
v.grid(column = 1, row = 0, sticky = (N,S))
root.grid_columnconfigure(0, weight = 1)
root.grid_rowconfigure(0, weight = 1)
canvas.create_rectangle((0, 0, 50, 50), fill = 'black')
canvas.create_rectangle((500, 500, 550, 550), fill = 'black')
canvas.create_rectangle((1500, 1500, 1550, 1550), fill = 'black')
canvas.create_rectangle((1000, 1000, 1050, 1050), fill = 'black')
def xy_motion(event):
x, y = event.x, event.y
if x < 30:
delta = -1
canvas.xview('scroll', delta, 'units')
if x > (600 - 30):
delta = 1
canvas.xview('scroll', delta, 'units')
if y < 30:
delta = -1
canvas.yview('scroll', delta, 'units')
if y > (600 - 30):
delta = 1
canvas.yview('scroll', delta, 'units')
canvas.bind('<Motion>', xy_motion)
root.mainloop()
的問題是,滾動運動是運動功能,只有當有鼠標移動工作(如果你停止移動鼠標,滾動停止過)。我想使它成爲一種方式,即使鼠標沒有移動(但仍然在「滾動區域」),窗口將保持滾動,直到它結束。
我認爲明顯的方式將被改變if語句(例如從第30行)到while語句,就像這樣:
while x < 30:
但是當鼠標到達該位置的程序凍結(等待對於while循環來完成我認爲)。
有什麼建議嗎?
在此先感謝。
UPDATE
這裏是與工作碼(或可能的一個)的答案。我不知道用答案更新問題本身是否正確,但我認爲這對其他人有用。
x, y = 0, 0
def scroll():
global x, y
if x < 30:
delta = - 1
canvas.xview('scroll', delta, 'units')
elif x > (ws - 30):
delta = 1
canvas.xview('scroll', delta, 'units')
elif y < 30:
delta = -1
canvas.yview('scroll', delta, 'units')
elif y > (ws - 30):
delta = 1
canvas.yview('scroll', delta, 'units')
canvas.after(100, scroll)
def xy_motion(event):
global x, y
x, y = event.x, event.y
scroll()
canvas.bind('<Motion>', xy_motion)
請讓我知道它是否正確。感謝大家的討論和建議。 Theselinkswere也有用。
我不是Tkinter的專家,但[this](http://old.nabble.com/Cursor-coordinates-td26644652.html)可能有幫助 – inspectorG4dget
我可以找到這個幫助,除了變量'ws '沒有定義。根據上下文,我假設它是座標 –