首先,这是我目前的代码,它的基本部分:
class WindowDraggable():
x = 1
y = 1
def __init__(self,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):
deltaX = event.x - self.x
deltaY = event.y - self.y
self.x = root.winfo_x() + deltaX
self.y = root.winfo_y() + deltaY
root.geometry("+%sx+%s" % (self.x,self.y))
#root is my window:
root = Tk()
#This is how I assign the class to label
WindowDraggable(label)
#All imports
from Tkinter import *
from PIL import Image, ImageTk
import sys
import re
我想要完成的是;通过句柄使窗口可拖动,在本例中为label
。我无法真正描述它现在的行为,但它确实会移动窗口,而不是跟随鼠标。
请耐心等待我,因为我是Python的新手。任何帮助都表示赞赏:)重写一堂课是可以的,我知道它写的很糟糕。
答案 0 :(得分:2)
这是一个小例子:
from Tkinter import *
root = Tk()
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))
label = Label(root, text='drag me')
WindowDraggable(label)
label.pack()
root.mainloop()
你几乎没有,但你必须补偿标签本身的偏移量。请注意,我的示例不会补偿窗口边框。您将不得不使用特定工具来解决这个问题(所以这个示例在使用overrideredirect(1)
时非常有效。
我的猜测是你来自另一种编程语言,所以当我在这里时,我会给你一些提示:
;
结束语句(虽然有效的语法,没有理由这样做)。look_like_this
或lookLikeThis
。__init__
中创建一个实例变量(除非你想要一个类变量,否则绝对不在方法之外)。