• python pynput实现鼠标点击两坐标生成截图


    脚本主要实现以下功能:

    • 按ctrl开始截图,点击两个坐标,保存截图
    • tk输出截图文本信息,文本输出内容倒序处理
    • 默认命名为A0自增。支持自定义名称,自增编号,修改自定义名称自增重新计算
    • 清空文本框内容
    1. from pynput import mouse, keyboard
    2. from PIL import ImageGrab
    3. import tkinter as tk
    4. # 使用字典来维护每个自定义名称的截图计数
    5. screenshot_counts = {}
    6. def start_screenshot(text_widget, name_entry):
    7. positions = []
    8. def on_click(x, y, button, pressed):
    9. if not pressed:
    10. # 当鼠标松开时记录位置
    11. positions.append((x, y))
    12. text_widget.insert('1.0', f'坐标为{x},{y}\n')
    13. # 如果已经记录了两个位置,就停止监听
    14. if len(positions) == 2:
    15. return False
    16. # 开始监听鼠标
    17. with mouse.Listener(on_click=on_click) as listener:
    18. listener.join()
    19. if len(positions) == 2:
    20. # 确保截图区域的坐标是正确的
    21. left = min(positions[0][0], positions[1][0])
    22. top = min(positions[0][1], positions[1][1])
    23. right = max(positions[0][0], positions[1][0])
    24. bottom = max(positions[0][1], positions[1][1])
    25. # 使用PIL的ImageGrab模块的grab函数来截图
    26. screenshot = ImageGrab.grab((left, top, right, bottom))
    27. # 获取用户输入的名称
    28. screenshot_name = name_entry.get()
    29. # 如果用户没有输入名称,使用默认的名称"A"
    30. if screenshot_name == "":
    31. screenshot_name = "A"
    32. # 检查名称是否存在于字典中,如果不存在,初始化计数值
    33. if screenshot_name not in screenshot_counts:
    34. screenshot_counts[screenshot_name] = 0
    35. # 根据名称获取对应的计数值
    36. count = screenshot_counts[screenshot_name]
    37. screenshot_name_with_count = f"{screenshot_name}{count}.png"
    38. # 保存截图
    39. screenshot.save(screenshot_name_with_count)
    40. text_widget.insert('1.0', f'截图已保存为{screenshot_name_with_count}\n')
    41. text_widget.insert('1.0', f'#--------\n')
    42. text_widget.insert('1.0', f'\n')
    43. # 增加对应名称的截图计数
    44. screenshot_counts[screenshot_name] += 1
    45. def on_release(key, text_widget, name_entry):
    46. if key == keyboard.Key.esc:
    47. # 当按下esc键时停止监听
    48. return False
    49. elif key == keyboard.Key.ctrl_l:
    50. # 当按下ctrl键时开始截图
    51. text_widget.insert('1.0', '开始截图\n')
    52. start_screenshot(text_widget, name_entry)
    53. def clear_text(text_widget):
    54. text_widget.delete(1.0, tk.END)
    55. # 创建tkinter窗口
    56. root = tk.Tk()
    57. root.geometry('145x180')
    58. text_widget = tk.Text(root, height=10, width=20)
    59. text_widget.pack()
    60. name_entry = tk.Entry(root)
    61. name_entry.pack()
    62. clear_button = tk.Button(root, text="清空文本框", command=lambda: clear_text(text_widget))
    63. clear_button.pack()
    64. # 开始监听键盘
    65. with keyboard.Listener(on_release=lambda key: on_release(key, text_widget, name_entry)) as listener:
    66. root.mainloop()

    如有帮助,请多多支持作者! 你鼓励是我最大的动力~QAQ~

  • 相关阅读:
    行泊一体迎爆发期,抢量产还是修技术护城河?
    RHCE之路防火墙,iptables
    阿里架构师:对于 Kafka 的消费者客户端详解,你都明白吗?
    普及组算法汇总
    Bootstrap-jqgrid学习(十六)
    分布式任务调度平台——XXL-JOB
    【论文合集】2022年12月医学影像期刊论文合集
    什么?漫画居然能免费看全本了,这还不学起来一起做省钱小能手
    纯电动赛道保持高增长,哪十家T-BOX供应商占据主力份额
    面试题复盘-2023/10/20
  • 原文地址:https://blog.csdn.net/qq_26086231/article/details/139872443