Python: 实现鼠标点击tkinter窗口任意位置拖动

这篇具有很好参考价值的文章主要介绍了Python: 实现鼠标点击tkinter窗口任意位置拖动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引子

近期在用python的tkinter库开发一个GUI,在开发接近尾声时候,同事发现一个问题:因GUI窗口较大,在他的笔记本上不能全部展示,而且只能通过点击顶部状态栏才能拖动,这样即使鼠标已经在屏幕最顶部,也无法看到窗口底部的控件。

一个解决方法就是:窗口及控件可以自适应改变。但时间紧迫,进而采用第二个方案:鼠标可以点击tkinter窗口任意位置进行拖动,这样就能通过拖动,看到窗口的任意位置了!

如下例:

import tkinter as tk
'''
鼠标点击tkinter窗口任意位置进行拖动
'''
class uGUIHandler():
    def __init__(self):
        self.window = tk.Tk()

        self.x, self.y = 0, 0
        self.window_size = '800x700'

        # 设置隐藏窗口标题栏和任务栏图标
        self.window.overrideredirect(True)
        # 设置窗口大小、位置 长x宽+距离屏幕左边距离x+距离屏幕上边距离y
        self.window.geometry(f"{self.window_size}+700+20")
        # 设定背景颜色
        self.window.configure(bg="LightCyan")

        # 窗口移动事件
        self.window.bind("<B1-Motion>", self.move)
        # 单击事件
        self.window.bind("<Button-1>", self.get_point)
        # 双击事件
        self.window.bind("<Double-Button-1>", self.close)

    def move(self, event):
        """窗口移动事件"""
        new_x = (event.x - self.x) + self.window.winfo_x()
        new_y = (event.y - self.y) + self.window.winfo_y()
        s = f"{self.window_size}+{new_x}+{new_y}"
        self.window.geometry(s)

    def get_point(self, event):
        """获取当前窗口位置并保存"""
        self.x, self.y = event.x, event.y

    def run(self):
        self.window.mainloop()

    def close(self, event):
        self.window.destroy()


if __name__ == "__main__":
    init_window = uGUIHandler()
    init_window.run()

至此问题得以解决。从这个例子里,还得到获取当前鼠标位置的方法。望读者代码中挖掘哦~

除此外,对tkinker窗口的鼠标相关的事件还有:文章来源地址https://www.toymoban.com/news/detail-502400.html

<Button-1>   鼠标左键
<Button-2>   鼠标中间键(滚轮)
<Button-3>   鼠标右键
<Double-Button-1>   双击鼠标左键
<Double-Button-3>   双击鼠标右键
<Triple-Button-1>   三击鼠标左键
<Triple-Button-3>   三击鼠标右键
<B1-Motion>   鼠标左键滑动
<B2-Motion>   鼠标滚轮移动
<B3-Motion>   鼠标右键滑动

到了这里,关于Python: 实现鼠标点击tkinter窗口任意位置拖动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Qt】Qt无边框窗口(鼠标点击自定义标题栏)可拖动

    隐藏掉标题栏后,默认情况下窗口无法被鼠标拖动的,需要自己处理鼠标事件,移动窗口达到拖动效果,但是又不想要鼠标点击整个窗口都可以拖动,只需要鼠标点击自定义的标题栏时可拖动 具体步骤如下: 类外初始化 通过鼠标点击事件,判断鼠标是否在标题栏,如果是,

    2024年02月12日
    浏览(30)
  • 实现Qwidget窗口填满整个主窗口,并跟随鼠标的拖动自动缩放

    实现Qwidget窗口填满整个主窗口,并跟随鼠标的拖动自动缩放 新建一个窗口,我想在这个窗口上放一个QWidget,并且这个QWidget能够布满整个窗口,还可以随着随鼠标的拖动自动缩放 1、首先给大家介绍一个好用的组件库:qt-material-widgets (1)开源地址(基于QWidgets) 基于Qt Qui

    2024年02月10日
    浏览(39)
  • C# winform中无标题栏窗口如何实现鼠标拖动?

    在C#中,可以通过重写窗体的鼠标事件来实现无标题栏窗体的拖动。 具体步骤如下: 禁用窗体的默认标题栏:在窗体属性中设置FormBorderStyle为None。 重写鼠标事件:在窗体类中重写MouseDown、MouseMove和MouseUp事件。 定义变量存储鼠标点击时的坐标。 在MouseDown事件中记录鼠标的位

    2024年02月02日
    浏览(31)
  • Python模拟鼠标点击与实时获取鼠标位置

    鼠标点击会用到pymouse库。 在cmd中运行,使用镜像下载 编译器在运行时可能会报错,会出现No module named win32api问题,这是由于Python是没有自带访问windows系统API的库的,需要下载。 在cmd中运行,使用镜像下载pywin32。 time.sleep(num),num值可以自己进行设置,单位为秒。 程序运行

    2024年02月11日
    浏览(33)
  • wps演示时图片任意位置拖动

    宏插件地址: 链接: https://pan.baidu.com/s/1bUantSdIJxR_3nMAjT7kXw?pwd=6666 提取码: 6666 wps11.1版本: 链接: https://pan.baidu.com/s/1ieHj6BHAk3LxhTIFK7zg2w?pwd=6666 提取码: 6666 文件-帮助-关于wps 开发工具-图像。如果没有,则需要安装宏插件(使用1中的链接即可) 开发工具-宏安全性,选择低,才能运

    2024年02月07日
    浏览(28)
  • 使用python向窗口发送鼠标点击命令

    今天遇到一个问题。公司让用电脑在网页上看个视频。网页有个判断:一段时间没有鼠标活动,视频就会暂停。于是就想,能否隔一段时间就模拟鼠标点击一下视频暂停,再点一下继续播放。省得它自己停止播放。这样我就可以让网页窗口在后台,我去干别的。 研究了一下,

    2024年02月12日
    浏览(28)
  • QT`实现鼠标超时未点击,窗口自动关闭

    QT 实现鼠标超时未点击,窗口自动关闭 前言 有的时候我们需要某些窗口实现超时自动关闭,但是Qt窗口一般是多部件堆叠而成,如果常规处理,对每一个部件进行鼠标点击事件处理显然不太合理,我个人参考了网上前辈的处理方法,通过直接重新实现 QApplication::notify 函数来

    2024年02月10日
    浏览(34)
  • uniapp - 实现可拖动悬浮按钮功能,支持手指拖曳放到页面任意位置(详细示例源码及注释,复制粘贴快速植入)全端兼容H5/app/小程序!

    百度搜的代码都太难用了而且有bug。。。 本文详细讲解在uniapp中实现一个可拖动的悬浮按钮,并且兼容在 H5/app/小程序中完美运行, 你可以直接复制源码,复制到你的项目中,附带 全局组件注册 的方法(要不每个页面都需要引一次), 如下图所示,你自己修改样式就行了,

    2023年04月08日
    浏览(31)
  • selenium+python:点击元素、alert弹框、鼠标操作(左键点击、右键点击、双击、鼠标悬浮)、下拉选项框、窗口切换等操作的处

    driver=webdriver.Chrome() driver.maximize_window() driver.get(\\\"https://www.baidu.com/\\\") 在进行页面操作时,需要用鼠标进行左键点击、右键点击、双击、鼠标悬浮(比如鼠标移到某个位置就会出现一些元素)、鼠标拖动等操作,这时需要导入ActionChains模块 perform() 执行所有ActionChains 中存储的行为

    2024年02月05日
    浏览(52)
  • 鼠标拖动窗口延迟

    本人使用鼠标为罗技鼠标,其他鼠标也可以参考操作 困扰本人很长时间的问题,在大部分窗口也不会出现此问题因此也没强烈影响到我,但是每次打开到会出现延迟的窗口时还是会令我讨厌 在经过我查询了很多和我类似的问题才最终解决,所以我来分享一下我的解决方法 在

    2024年02月10日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包