Tkinter:鼠标拖动无边界的窗口,例如。覆盖直接(1)

【字号: 日期:2022-06-03浏览:31作者:雯心
如何解决Tkinter:鼠标拖动无边界的窗口,例如。覆盖直接(1)?

是的,Tkinter提供了足够的功能来执行此操作,并且不,没有更简单/更高级的方法来实现您想要的操作。您几乎有正确的想法。

这不是一个唯一的示例,但这不是唯一的方法:

import tkinter as tkclass App(tk.Tk): def __init__(self): tk.Tk.__init__(self) self.floater = FloatingWindow(self)class FloatingWindow(tk.Toplevel): def __init__(self, *args, **kwargs): tk.Toplevel.__init__(self, *args, **kwargs) self.overrideredirect(True) self.label = tk.Label(self, text='Click on the grip to move') self.grip = tk.Label(self, bitmap='gray25') self.grip.pack(side='left', fill='y') self.label.pack(side='right', fill='both', expand=True) self.grip.bind('<ButtonPress-1>', self.start_move) self.grip.bind('<ButtonRelease-1>', self.stop_move) self.grip.bind('<B1-Motion>', self.do_move) def start_move(self, event): self.x = event.x self.y = event.y def stop_move(self, event): self.x = None self.y = None def do_move(self, event): deltax = event.x - self.x deltay = event.y - self.y x = self.winfo_x() + deltax y = self.winfo_y() + deltay self.geometry(f'+{x}+{y}')app=App()app.mainloop()解决方法

关于如何创建事件绑定的任何建议,例如,允许用户用鼠标拖动无边界的窗口。用overridedirect(1)?创建的窗口

用例:我们想创建一个浮动的工具栏/调色板窗口(无边框),供用户在桌面上拖动。

这就是我的想法(伪代码):

window.bind( ’<Button-1>’,onMouseDown ) 捕获鼠标的初始位置。

window.bind( ’<Motion-1>’,onMouseMove ) 跟踪鼠标一旦开始移动的位置。

计算多少鼠标在移动和计算newX,newY位置。

使用window.geometry( ’+%d+%d’ % ( newX,newY ) )到移动窗口。

Tkinter是否提供足够的功能以允许我执行手头的任务?还是有更容易/更高层次的方法来实现我想做的事情?

相关文章: