基于tkinter、pyautogui、pillow的屏幕截图工具-1

为了更好地方便自己进行计算机视觉的学习,自己特意DIY了一个屏幕截图工具,这个工具可以进行屏幕截图,在截图后能对其进行缩放、灰度化以及保存等,同时也利用opencv实现了一个简陋的屏幕录屏工具.

图片

先介绍重要的代码片段

1,如何实现在截图时绘制出的那个矩形框?

图片

一开始我的思路是用canvas创建动画来实现这个过程,通过设置一个定时函数来根据鼠标在点击后的位置更新画图,最终实现了如下代码:

import tkinter as tkimport threading
index = 0root = tk.Tk()canvas = tk.Canvas(root,bg="red")def Draw(): global index print(index) # canvas.delete("test") canvas.create_rectangle(10+index*3,10+index*3,110+index*2,110+index*2,tag="test") index += 1 if index <70: t = threading.Timer(0.05,Draw) t.setDaemon(True) t.start()
canvas.pack()t = threading.Timer(0.1,Draw)t.setDaemon(True)t.start()
root.mainloop()

最终实现如下结果:

图片

后面我有了更好的解决思路:

先是要告诉程序我要开始截图了,然后要告诉程序怎么结束截图,什么时候开始截图

先定义一个全局变量start_click = 0

然后每点击一次屏幕便对start_click取反,start_click=1-start_click,以此来区分。代码如下:

import tkinter as tkimport threadingstart_click = 0start_coor = Noneend_coor = Nonecoor = Nonedef mouseprocess(event):  global start_click  if start_click:    print(event)    canvas.delete('rec')    canvas.create_rectangle(start_coor[0],start_coor[1],event.x,event.y,tag="rec")
def mouse(event): global start_click global start_coor global end_coor coor = (event.x,event.y) start_click = 1 - start_click if start_click: start_coor = coor print("初始点击",start_coor) canvas.delete("rec")
else: end_coor = coor print("结束点击",end_coor)    canvas.create_rectangle(start_coor[0],start_coor[1],end_coor[0],end_coor[1],tag="rec")root = tk.Tk()canvas = tk.Canvas(root,bg="red")canvas.bind(sequence="<ButtonPress-1>",func=mouse)canvas.bind(sequence="<Motion>",func=mouseprocess)canvas.pack()root.mainloop()

canvas.bind(sequence=”<Motion>”,func=mouseprocess),即在canvas中绑定鼠标移动函数mouseprocess,通过构造mouseprocess来绘制鼠标移动时的矩形

效果:

图片

同时要记得删除之前绘制的图形,不然会这样:

图片

2,截图时采用canvas展示图片区域来进行截取,如何让窗口全屏?

  def set_fullscreen(self,master):    #设置全屏的方式 这个不显示标题什么的 满足了自己当时的构思    master.attributes("-fullscreen",True)    # master.wm_state('zoomed') #这个方式会带有标题

3,tkinter中如何设置菜单?

 def set_menu(self,menu_dic):    #menu_dic格式: {'top_menu':'xxx','second_menu':{'name1':'cmd1','name2':'cmd2'}}    operate_menu = tk.Menu(self.menubar,tearoff=0)    self.menubar.add_cascade(label=menu_dic['top_menu'],menu=operate_menu)    for key in menu_dic.get('second_menu').keys():      operate_menu.add_command(label=key,command=menu_dic['second_menu'].get(key))

4,子类如何继承父类?

图片

 2019-06-02 22:27

阅读原文

简介:开源CAE技术爱好者,编程爱好者,计算力学,欢迎志同道合的朋友一起交流。欢迎关注微信公众号:挨踢的土木佬
(2)
打赏 喜欢就点个赞支持下吧 喜欢就点个赞支持下吧

声明:本文来自“挨踢的土木佬”,分享链接:https://www.zyxiao.com/p/308876    侵权投诉

网站客服
网站客服
内容投稿 侵权处理
分享本页
返回顶部