目標:雖然類似QQ等軟件帶有截屏功能,但還是感覺自造的好
使用說明:將以下代碼保存為如:截屏.pyw 並發送到 桌面快捷方式 然后修改快捷方式的屬性 增加快捷鍵。
現在可以用快捷鍵啟動腳本截屏了。
然而:win10自帶的 “Win+Shift+S”組合鍵便可進入截屏模式
代碼:
#! /usr/bin/env python # -*- coding: utf-8 -*- import tkinter as tk import pyautogui root = tk.Tk() 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): #from tkinter import messagebox #if messagebox.askokcancel('Exit','Confirm to exit?'): root.destroy() # 綁定事件 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) root.mainloop()