日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python小工具小发明_【kimol君的无聊小发明】—用python写截屏小工具

發(fā)布時間:2023/12/4 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python小工具小发明_【kimol君的无聊小发明】—用python写截屏小工具 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

今天我看了一下自己的文件夾,發(fā)現(xiàn)了自己寫了許多似乎很無聊的代碼。于是乎,一個想法油然而生:“生活已經(jīng)很無聊了,不如再無聊一點叭”。

說干就干,那就開一個專題,我們稱之為kimol君的無聊小發(fā)明。

妙…啊~~~

今天要做的東西,就是用python寫一個截屏工具。想必大家平時截屏的時候很多都是用的微信的ALT+A或者是WINDOWS自帶的截屏軟件。作為技術(shù)宅的我,怎么總是用別人的東西呢?

看我的,上圖:

效果還闊以,好歹這個小貓咪截出來也是有模有樣的~

一、技術(shù)實現(xiàn)

1. 相關(guān)庫

在python中可以實現(xiàn)截圖的庫有很多,這里我用的是pyautogui,它可以對指定區(qū)域進行截屏:

import pyautogui

而界面部分(截屏的框選等)采用了tkinter庫:

import tkinter as tk

2. 定義窗口

定義一個透明的窗口,讓它的大小與屏幕一樣:

root = tk.Tk()

root.overrideredirect(True) # 隱藏窗口的標(biāo)題欄

root.attributes("-alpha", 0.1) # 窗口透明度10%

root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight()))

root.configure(bg="black")

注:alhpa參數(shù)用于設(shè)定透明度;geometry函數(shù)用于設(shè)定窗口大小;

創(chuàng)建一個子窗口,用于顯示框選區(qū)域:

# 再創(chuàng)建1個Canvas用于圈選

cv = tk.Canvas(root)

x, y = 0, 0

xstart,ystart = 0 ,0

xend,yend = 0, 0

rec = ''

3. 繪制工具條

繪制一個工具條,方便后續(xù)增加功能。講道理目前來說這個就是個雞肋(可以省去),但是如果后續(xù)還想晚上功能的話,會很有幫助。

canvas = tk.Canvas(root)

canvas.configure(width=300)

canvas.configure(height=100)

canvas.configure(bg="yellow")

canvas.configure(highlightthickness=0) # 高亮厚度

canvas.place(x=(root.winfo_screenwidth()-500),y=(root.winfo_screenheight()-300))

canvas.create_text(150, 50,font='Arial -20 bold',text='ESC退出,假裝工具條')

4. 定義事件函數(shù)

監(jiān)聽鼠標(biāo)和鍵盤事件,實時監(jiān)控框選區(qū)域和截屏,具體的事件有:

# 綁定事件

canvas.bind("", move) # 鼠標(biāo)左鍵移動->顯示當(dāng)前光標(biāo)位置

root.bind('',sys_out) # 鍵盤Esc鍵->退出

root.bind("", button_1) # 鼠標(biāo)左鍵點擊->顯示子窗口

root.bind("", b1_Motion)# 鼠標(biāo)左鍵移動->改變子窗口大小

root.bind("", buttonRelease_1) # 鼠標(biāo)左鍵釋放->記錄最后光標(biāo)的位置

root.bind("",button_3) #鼠標(biāo)右鍵點擊->截屏并保存圖片

root.mainloop()

監(jiān)聽鼠標(biāo)光標(biāo)位置:

def move(event):

global x, y ,xstart,ystart

new_x = (event.x-x)+canvas.winfo_x()

new_y = (event.y-y)+canvas.winfo_y()

s = "300x200+" + str(new_x)+"+" + str(new_y)

canvas.place(x = new_x - xstart,y = new_y -ystart)

print("s = ", s)

print(root.winfo_x(), root.winfo_y())

print(event.x, event.y)

創(chuàng)建子窗口:

def button_1(event):

global x, y ,xstart,ystart

global rec

x, y = event.x, event.y

xstart,ystart = event.x, event.y

print("event.x, event.y = ", event.x, event.y)

xstart,ystart = event.x, event.y

cv.configure(height=1)

cv.configure(width=1)

cv.config(highlightthickness=0) # 無邊框

cv.place(x=event.x, y=event.y)

rec = cv.create_rectangle(0,0,0,0,outline='red',width=8,dash=(4, 4))

改變子窗口大小:

def b1_Motion(event):

global x, y,xstart,ystart

x, y = event.x, event.y

print("event.x, event.y = ", event.x, event.y)

cv.configure(height = event.y - ystart)

cv.configure(width = event.x - xstart)

cv.coords(rec,0,0,event.x-xstart,event.y-ystart)

松開鼠標(biāo),記錄最后的光標(biāo)位置:

def buttonRelease_1(event):

global xend,yend

xend, yend = event.x, event.y

截屏并保存圖片:

def button_3(event):

global xstart,ystart,xend,yend

cv.delete(rec)

cv.place_forget()

img = pyautogui.screenshot(region=[xstart,ystart,xend-xstart,yend-ystart]) # x,y,w,h

img.save('screenshot.png')

sys_out(None)

退出程序:

def sys_out(even):

root.destroy()

二、后續(xù)改進

這個還有很多可以改進的地方。

截圖的時候會有dos窗口遮擋:這個解決辦法由很多,類似后臺啟動,或者將.py編譯為可執(zhí)行文件等等;

使用不方便,為了截圖還的運行代碼:廢話!!!當(dāng)然很不方便呀,不然怎么說是個無聊的小發(fā)明呢。但是!!!它也不是一無事處,可以考慮把它放到后臺運行。同樣可以利用快捷鍵來喚醒它并完成截圖。

功能單一:這只是一個很簡單的demo,既然可以截屏了,那么我們離錄屏還遠嗎?(正如本文開頭的動圖,右上角晃晃幾個大字“ApowerREC”,不給錢休想去掉,哼~)那么,我們?yōu)楹尾蛔约簩懸粋€呢?

寫在最后

最后,感謝各位大大的耐心閱讀~

慢著,大俠請留步… 動起可愛的雙手,來個贊再走唄 (???←?)

總結(jié)

以上是生活随笔為你收集整理的python小工具小发明_【kimol君的无聊小发明】—用python写截屏小工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。