戳人痛处

导航

python放大镜实现[27行代码-tkinter-PIL-pynput]

如你所见,运行效果如下、

 

 附code如下;

import tkinter
from PIL import ImageGrab, ImageTk
from pynput import mouse
#博客园:戳人痛处 bili:崩析
control = mouse.Controller()
root=tkinter.Tk()
screenW=root.winfo_screenwidth()
screenH=root.winfo_screenheight()
root.geometry("500x300")
root.wm_attributes('-topmost',1)               #[0]
#博客园:戳人痛处 bili:崩析
root.overrideredirect(True)     #不显示标题栏 # [1]
#博客园:戳人痛处 bili:崩析
def run():
    global immg                             #   [2]
    x,y = control.position                  #   [3]
    xx =ImageGrab.grab((x-50,y-30,x+50,y+30))
    xxx=xx.resize((500,300))
    immg=ImageTk.PhotoImage(xxx)      #全屏抓取
    canvas.create_image(250,150,image=immg) #   [4]
    root.geometry("500x300+{}+{}".format(x+50,y+30)) #[5]
    root.after(func=run,ms=20)
root.after(func=run,ms=100)
#博客园:戳人痛处 bili:崩析
canvas=tkinter.Canvas(root,width=500,height=300)     #创建白色画布
canvas.pack(fill=tkinter.BOTH,expand=tkinter.YES)       #画布放置至窗体
root.mainloop()

代码比较简单,很容易看懂,但是全网就是找不到相关实现代码;now-time:2021-9-14-23:23:58

现在我实现后分享给你,只需注意几个点;

[0] 窗口置顶

[1]  不显示标题栏

[2] 全局化图像对象,避免销毁导致闪烁

[3] 获取鼠标坐标

[4]  画布从中心点开始绘制

[5] 不断刷新放大镜的位置

tk的after方法自调用刷新

第2种显示方式

显示效果如下

 

 贴code如下

import tkinter
from PIL import ImageGrab, ImageTk
from pynput import mouse
#博客园:戳人痛处 bili:崩析
control = mouse.Controller()
root=tkinter.Tk()
screenW=root.winfo_screenwidth()
screenH=root.winfo_screenheight()
root.geometry("500x300")
root.wm_attributes('-topmost',1)               #[0]
#博客园:戳人痛处 bili:崩析
# root.overrideredirect(True)     #不显示标题栏 # [1]
#博客园:戳人痛处 bili:崩析
def run():
    global immg                             #   [2]
    x,y = control.position                  #   [3]
    xx =ImageGrab.grab((x-50,y-30,x+50,y+30))
    xxx=xx.resize((500,300))
    immg=ImageTk.PhotoImage(xxx)      #全屏抓取
    canvas.create_image(250,150,image=immg) #   [4]
    # root.geometry("500x300+{}+{}".format(x+50,y+30)) #[5]
    root.after(func=run,ms=20)
root.after(func=run,ms=100)
#博客园:戳人痛处 bili:崩析
canvas=tkinter.Canvas(root,width=500,height=300)     #创建白色画布
canvas.pack(fill=tkinter.BOTH,expand=tkinter.YES)       #画布放置至窗体
root.mainloop()

注释代码 [1] 和 [5]即可,作用是取消鼠标跟随并显示标题栏;

 

posted on 2021-09-14 23:58  戳人痛处  阅读(408)  评论(0编辑  收藏  举报