当前位置: 首页 > 面试题库 >

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

公良琛
2023-03-14
问题内容

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

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

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

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

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

  3. 计算多少鼠标在移动和计算newXnewY位置。

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

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


问题答案:

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

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

import tkinter as tk

class 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()


 类似资料:
  • 问题内容: 他们是否是使特定窗口在Linux上无边界的标准方法?我相信窗口边框是由您的窗口管理器绘制的,所以可能我只需要使用一个特定的窗口管理器(可以找到,我只需要知道哪个窗口管理器即可)…我希望是所有的窗口管理器都可能遵循一些标准,使我能够以编程方式执行此操作… 问题答案: 使用Xlib和old : 这些天NETWM / EWMH提示是首选,但据我所知,所有现代的窗口管理器还支持这一点。

  • 我正在尝试学习windows上的opengl编程,虽然我最初是从SDL开始的,但我已经决定放弃它,以便学习如何使用WGL自己启动OpenGL上下文。 我使用nanovg作为一个快速的图形绘制库,用SDL渲染一切都很好,但是,现在我已经移除了SDL,创建了我自己的窗口和OpenGL上下文,我发现窗口的标题栏与渲染区域重叠了。好像渲染区域的原点(0,0)在整个窗口的左上方,而不是标题栏的正下方,如果这

  • 问题内容: 我有一个3d渲染程序,该程序根据鼠标在屏幕上的位置围绕观察者旋转世界。这条线定义了地球旋转的弧度量 其中xy [0]是屏幕中心的x坐标 这意味着观察者视野的旋转量受到鼠标可以移动的距离的限制。如果我能使鼠标回到屏幕中央,则可以解决此问题。有任何想法吗? 问题答案: 好消息是有一种方法可以做到。 中间的消息是,它没有很好的记录。 坏消息是它仅在某些平台上有效。 另一个中间消息是,您至少可

  • 我正在Spring框架中使用FormHttpMessageConverter。为了通过restTemplate发送文件,我在项目中添加了FormHttpMessageConverter。 https://github.com/spring-projects/spring-framework/blob/5f4d1a4628513ab34098fa3f92ba03aa20fc4204/spring-w

  • 问题内容: 我正在尝试创建系统覆盖图。但是我一直在“拒绝权限”。我正在使用SDK版本23。 我的清单文件: 我用来创建叠加层的代码: 问题答案: 首先,没有名为的权限。是的。 其次,如果您的年龄为23岁或更高,并且您正在运行Android 6.0+设备,则您的应用一开始将不会获得此权限。致电查看您是否具有权限,如果没有,则用于将用户引导到“设置”。

  • 本文向大家介绍JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解,包括了JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS实现弹出浮动窗口。分享给大家供大家参考。具体如下: 这里介绍的JS弹出浮动窗口,支持鼠标拖动和关闭,点击链接文字后弹出层窗口,也称作是弹出式对话框吧。 关于一些参数说明: bodycontent:要在窗口中显示的内容