網站首頁 編程語言 正文
這是工作期間同事想要個截完圖之后可以顯示并且永遠前置的截圖小工具(即不會被其他程序覆蓋)直接上代碼:
# # -*- coding: utf-8 -*-
import tkinter as tk
import pyautogui
import tkinter
from PIL import ImageTk
from PIL import Image
root = tk.Tk()
root.wm_attributes('-topmost', 1)
root.overrideredirect(True) # 隱藏窗口的標題欄
# root.attributes("-alpha", 0.3) # 窗口透明度70 %
root.attributes("-alpha", 0.4) # 窗口透明度60 %
# root.geometry("300x200+10+10") # 設置窗口大小與位置
root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight()))
root.configure(bg="blue")
# 當工具條
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退出,假裝工具條')
# 再創建1個Canvas用于圈選
cv = tk.Canvas(root)
x, y = 0, 0
xstart, ystart = 0, 0
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
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.place(x=event.x, y=event.y)
# 鼠標左鍵按下并移動
def b1_Motion(event):
global x, y
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)
# 鼠標左鍵松開
def buttonRelease_1(event):
global x, y, xstart, ystart
x, y = event.x, event.y
print("event.x, event.y = ", event.x, event.y)
Pstart = [0, 0]
cv.place_forget()
img = pyautogui.screenshot(region=[xstart, ystart, x - xstart, y - ystart]) # x,y,w,h
img.save('screenshot.png')
# 退出
def sys_out(even):
root.destroy()
func()
# 綁定事件
canvas.bind("<B1-Motion>", move)
# 綁定事件到Esc鍵,當按下Esc鍵就會調用sys_out函數,彈出對話框
root.bind('<Escape>', sys_out)
root.bind("<Button-1>", button_1)
root.bind("<B1-Motion>", b1_Motion)
root.bind("<ButtonRelease-1>", buttonRelease_1)
img_png = None
def func():
root1 = tk.Tk()
root1.wm_attributes('-topmost', 1)
img_open = Image.open("screenshot.png")
global img_png
img_png = ImageTk.PhotoImage(img_open)
label_img = tk.Label(root1, image = img_png)
label_img.pack()
root.mainloop()
具體用法是運行程序、選中區域(支持多次選定,以最后一次選定為主)、按esc完成截圖同時彈出永遠前置的截圖照片窗體。
我打包了發給同事同事說很好用,就是差個快捷鍵。
其實也很簡單,只須打包成exe程序后右擊屬性中設置快捷鍵即可~
原文鏈接:https://blog.csdn.net/m0_62814033/article/details/124599877
相關推薦
- 2022-06-15 python中?conda?虛擬環境管理和jupyter內核管理_python
- 2021-12-05 判斷網頁時瀏覽器打開還是釘釘打開
- 2022-03-11 CentOS?8安裝Docker的詳細教程_docker
- 2022-05-02 winform關閉窗體FormClosing事件用法介紹_C#教程
- 2024-03-14 SpringBoot中事務
- 2022-10-06 C#中List<T>存放元素的工作機制_C#教程
- 2023-01-03 Android?輸入框被擋問題完美解決方案_Android
- 2022-12-14 React?Fiber與調和深入分析_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支