Tkinter 如果单击覆盖的定向窗口并移动它(窗口),如何获得更好的窗口位置?

Tkinter 如果单击覆盖的定向窗口并移动它(窗口),如何获得更好的窗口位置?,tkinter,Tkinter,当我点击窗口(在我的例子中,当我点击self.top\u frame和self.app\u name)移动它时,窗口位置将更改为0 x和y坐标。如果我想移动窗口,窗口会移到右侧。 我可以修复它,使窗口不会移动到右侧(或从我的光标) 从tkinter导入* 从tkinter导入ttk #从控件导入回调 #随机输入 类主窗口: 定义初始化(自): #列表 #颜色列表[0]框架主背景[1]导航栏[2]边框颜色[3]状态栏[4]说明字体 self.color_lst=[“#363e4a”、“#1d212

当我点击窗口(在我的例子中,当我点击
self.top\u frame
self.app\u name
)移动它时,窗口位置将更改为0 x和y坐标。如果我想移动窗口,窗口会移到右侧。 我可以修复它,使窗口不会移动到右侧(或从我的光标)

从tkinter导入*
从tkinter导入ttk
#从控件导入回调
#随机输入
类主窗口:
定义初始化(自):
#列表
#颜色列表[0]框架主背景[1]导航栏[2]边框颜色[3]状态栏[4]说明字体
self.color_lst=[“#363e4a”、“#1d2128”、“#8b9ebf”、“#2b303b”、“#45505f”]
#按钮列表[0]主页[1]键盘[2]音乐[3]计时器[4]设置栏[5]退出[6]最小化
self.btn_list=[“\u2263”、“\u2328”、“\u266B”、“\u23F1”、“\u2348”、“\u26CC”、“\u268A”]
#控件列表[0][1][2][3][4]移动设置栏
self.controls=[“”、“”、“”、“”、self.setting\u move]
#窗口设置、背景、透明、几何体
self.root=Tk()
self.root.geometry(“1150x800”)
self.root.minsize(400400)
self.root.overrideredirect(1)#尝试以下操作:

将tkinter作为tk导入
类DragTableWindow(tk.tk):
定义初始化(自):
self.draggable=True
super()。\uuuu init\uuuuu()
自补偿x=0
self.\u offsety=0
self.bind(“,self.clickwin)
self.bind(“,self.dragwin)
def最顶层(自):
self.attributes(“-top”,True)
尝试:
self.attributes(“-type”,“splash”)#Linux
除:
self.overrideredirect(True)#Windows
def dragwin(自身、事件):
如果self.draggable:
x=self.winfo_pointerx()-self.\u offsetx
y=self.winfo\u pointery()-self.\u offsety
自几何体(“++%d++%d”%(x,y))
def clickwin(自我、事件):
如果self.draggable:
self._offsetx=event.widget.winfo_rootx()-self.winfo_rootx()+event.x
self._offsety=event.widget.winfo_rooty()-self.winfo_rooty()+event.y
root=DraggableWindow()
root.mainloop()
我很久以前就做了这个-忘记了它是如何工作的细节。当我再次发现它是如何工作的时,我将对此进行更新并给出解释


要使窗口不可拖动,请将
.draggable
更改为
False
。你可能还想看看。它支持调整大小和调整Alt选项卡。

确定此处的固定版本:

从tkinter导入*
从tkinter导入ttk
#从控件导入函数
#随机输入
类主窗口:
定义初始化(自):
#窗口设置、背景、透明、几何体
self.root=Tk()
self.root.geometry(“1150x800”)
self.root.minsize(400400)

self.root.overrideredirect(1)#我想你必须补偿鼠标位置,这样我想你可以从事件中减去鼠标x和y。root坐标或类似的东西不,我想我理解了,事件是鼠标移动,所以它得到鼠标的根位置并移动窗口是的,但是有可能改变它,用我的功能?或者我需要写另一个函数吗?我尝试了一些事情,但这并没有解决我的问题。@我正在努力。但现在已经修好了@如果你们中有人想玩它,TheLizzard已经帮了他的忙:)@JoeMo你介意用对你有用的代码编辑这个答案吗?这样将来的人们可以直接发现它的帮助。
self.draggable
是否被设置为
False
?如果没有,那么它有什么用?@CoolCloud调用者可以将其设置为
False
。我知道有些人讨厌调用方可以像那样更改内部类属性,但我喜欢这样。那就是为什么当我在C++中编程时,我把所有的东西都当作公共的。调用者应该阅读文档,只有在他们知道自己在做什么的情况下才能更改变量。(我一直在和人们争论这个问题)我没有使用C++或者知道什么叫调用方:P,假设它是运行代码的人,可以设置一些类似“代码>根”的词。我还在学习python的基础知识(lol)@CoolCloud您的假设是正确的,是的,调用者可以使用
root.draggable=False
来禁用拖动窗口。另外,我认为您对python非常精通。