中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用python寫截屏小工具

發布時間:2020-10-08 02:54:25 來源:腳本之家 閱讀:209 作者:鬼骨子 欄目:開發技術

前言

今天我看了一下自己的文件夾,發現了自己寫了許多似乎很無聊的代碼。于是乎,一個想法油然而生:“生活已經很無聊了,不如再無聊一點叭”。
說干就干,那就開一個專題,我們稱之為kimol君的無聊小發明。
妙…啊~~~

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

如何使用python寫截屏小工具


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

一、技術實現

1. 相關庫

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

import pyautogui

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

2. 定義窗口

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

root = tk.Tk()
root.overrideredirect(True)  # 隱藏窗口的標題欄
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參數用于設定透明度;geometry函數用于設定窗口大小;
創建一個子窗口,用于顯示框選區域:

# 再創建1個Canvas用于圈選
cv = tk.Canvas(root)
x, y = 0, 0
xstart,ystart = 0 ,0
xend,yend = 0, 0
rec = ''

注:alhpa參數用于設定透明度;geometry函數用于設定窗口大小;
創建一個子窗口,用于顯示框選區域:

# 再創建1個Canvas用于圈選
cv = tk.Canvas(root)
x, y = 0, 0
xstart,ystart = 0 ,0
xend,yend = 0, 0
rec = ''

3. 繪制工具條

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

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退出,假裝工具條')
1234567

4. 定義事件函數

監聽鼠標和鍵盤事件,實時監控框選區域和截屏,具體的事件有:

# 綁定事件
canvas.bind("<B1-Motion>", move) # 鼠標左鍵移動->顯示當前光標位置
root.bind('<Escape>',sys_out) # 鍵盤Esc鍵->退出
root.bind("<Button-1>", button_1) # 鼠標左鍵點擊->顯示子窗口 
root.bind("<B1-Motion>", b1_Motion)# 鼠標左鍵移動->改變子窗口大小
root.bind("<ButtonRelease-1>", buttonRelease_1) # 鼠標左鍵釋放->記錄最后光標的位置
root.bind("<Button-3>",button_3) #鼠標右鍵點擊->截屏并保存圖片
root.mainloop()

監聽鼠標光標位置:

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)

創建子窗口:

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)

松開鼠標,記錄最后的光標位置:

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()

二、后續改進

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

  • 截圖的時候會有dos窗口遮擋:這個解決辦法由很多,類似后臺啟動,或者將.py編譯為可執行文件等等;
  • 使用不方便,為了截圖還的運行代碼:廢話!!!當然很不方便呀,不然怎么說是個無聊的小發明呢。但是!!!它也不是一無事處,可以考慮把它放到后臺運行。同樣可以利用快捷鍵來喚醒它并完成截圖。
  • 功能單一:這只是一個很簡單的demo,既然可以截屏了,那么我們離錄屏還遠嗎?(正如本文開頭的動圖,右上角晃晃幾個大字“ApowerREC”,不給錢休想去掉,哼~)那么,我們為何不自己寫一個呢?

寫在最后

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

到此這篇關于如何使用python寫截屏小工具的文章就介紹到這了,更多相關python截屏小工具內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

赞皇县| 河西区| 古交市| 九龙坡区| 永康市| 义马市| 常熟市| 锡林浩特市| 武穴市| 安阳县| 临漳县| 都兰县| 南雄市| 中超| 栖霞市| 峨边| 静安区| 洛南县| 东丰县| 耒阳市| 新营市| 宁化县| 新邵县| 长寿区| 蓬溪县| 白河县| 湟中县| 科技| 黄龙县| 靖边县| 神木县| 文昌市| 城口县| 佳木斯市| 平山县| 思茅市| 罗江县| 铁岭市| SHOW| 常宁市| 湟中县|