gpt4 book ai didi

python - 拖动 Tkinter 的窗口句柄?

转载 作者:行者123 更新时间:2023-12-01 06:07:24 32 4
gpt4 key购买 nike

首先,这是我当前的代码,其中的重要部分:

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

我想要完成的是;使窗口可通过 handle 拖动,在本例中为label。我无法真正描述它现在的行为,但它确实移动了窗口,只是不跟随鼠标。

请耐心等待,因为我是 Python 的新手。感谢任何帮助:)重写该类是可以的,我知道它写得真的很糟糕。

最佳答案

这是一个小例子:

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)时,此示例可以完美地工作。

我猜您来自另一种编程语言,所以我会在使用过程中给您一些提示:

  • Python 不会以 ; 结束语句(虽然语法有效,但没有理由这样做)。
  • 方法名称应一致 look_like_thislookLikeThis
  • 变量不需要声明。如果您想创建实例变量,请在 __init__ 中创建(并且绝对不要在方法外部,除非您需要类变量)。

关于python - 拖动 Tkinter 的窗口句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7455573/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com