這是我的類,它允許用戶拖動畫布。當我拖動它時,我的畫布正在改變位置
class WindowDraggable():
def __init__(self, label):
self.label = label
label.bind('<ButtonPress-1>', self.StartMove)
label.bind('<ButtonRelease-1>', self.StopMove)
label.bind('<B1-Motion>', self.OnMotion)
def StartMove(self, event):
self.x = event.x
self.y = event.y
def StopMove(self, event):
self.x = None
self.y = None
def OnMotion(self, event):
x = (event.x_root - self.x - self.label.winfo_rootx()
+ self.label.winfo_rootx())
y = (event.y_root - self.y - self.label.winfo_rooty()
+ self.label.winfo_rooty())
root.geometry("+%s+%s" % (x, y))
然而,當我點擊並按住標籤,隨後的動作進行調整,以便將光標定位在畫布的左上方的畫布的位置。你可以看到光標在這個圖像中的位置。
我想到了使用建議手動設置光標位置這樣
def StartMove(self, event):
self.x = event.x + 100
self.y = event.y + 150
來解決這個問題,但問題是標籤擴展到觸摸屏的兩側,所以出於美學原因,光標應該簡單地保持在其原始位置。我發現這個功能,認爲它有助於解決問題,但我在使用它方面有點失落。
#sets mouse-cursor position
def click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
這是我縮小的程序,只顯示與我的問題有關的基本部分。
from tkinter import *
from PIL import ImageTk, Image
#window creation
root = Tk()
root.overrideredirect(1) # eliminates frame around window
#canvas creation
canvas = Canvas(root, width=width, height=height, bd=-2)
canvas.pack()
#sets mouse-cursor position
def click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
#makes window draggable
class WindowDraggable():
def __init__(self, label):
self.label = label
label.bind('<ButtonPress-1>', self.StartMove)
label.bind('<ButtonRelease-1>', self.StopMove)
label.bind('<B1-Motion>', self.OnMotion)
def StartMove(self, event):
self.x = event.x + 100
self.y = event.y + 150
def StopMove(self, event):
self.x = None
self.y = None
def OnMotion(self, event):
x = (event.x_root - self.x - self.label.winfo_rootx()
+ self.label.winfo_rootx())
y = (event.y_root - self.y - self.label.winfo_rooty()
+ self.label.winfo_rooty())
root.geometry("+%s+%s" % (x, y))
#creates the draggable label
label = Label(root, text='drag me')
WindowDraggable(label)
label.pack(fill=BOTH, expand=1)
#end of program
root.mainloop()
您的問題提到一個畫布,但您的代碼不顯示畫布。這只是一些代碼直接從另一個SO答案複製和粘貼。你能給我們一個完整的例子來說明你的問題嗎? – 2014-11-20 17:03:53
@BryanOakley好的,這是整個代碼。我爲什麼被低估(再次)。 – user4261180 2014-11-20 17:06:56
我低估了你原來的問題,因爲你提到一個問題而不顯示任何研究工作。您發佈的代碼不是您的代碼,而是從另一個帖子中剪切和粘貼的代碼。你的問題提到了一個畫布,但代碼沒有顯示畫布。所有這些都會造成質量問題。現在你有這個問題,你有太多的代碼。執行ping的代碼與移動窗口無關,爲什麼要包含它?你應該努力制定可能出現問題的最小程序。 – 2014-11-20 18:13:21