当前位置: 首页 > wzjs >正文

建立网站就是制作网页吗网站开发有哪几类

建立网站就是制作网页吗,网站开发有哪几类,调用wordpress搜索代码,拖拽网站开发在日常工作中,截图是一个非常常见的需求。虽然 Windows 自带截图工具,但有时我们需要更精确的截图方式,比如选取特定区域、快速保存截图并进行预览。本篇博客将介绍一个使用 Python 结合 Tkinter 和 PyAutoGUI 开发的精确截图工具。 C:\pytho…

在日常工作中,截图是一个非常常见的需求。虽然 Windows 自带截图工具,但有时我们需要更精确的截图方式,比如选取特定区域、快速保存截图并进行预览。本篇博客将介绍一个使用 Python 结合 Tkinter 和 PyAutoGUI 开发的精确截图工具。
C:\pythoncode\new\manageimages.py

运行结果

在这里插入图片描述
在这里插入图片描述

全部代码

import tkinter as tk
from tkinter import ttk
import pyautogui
import numpy as np
from PIL import Image, ImageTk, ImageGrab
import os
from datetime import datetime
import timeclass ImprovedScreenshotTool:def __init__(self):# Create the main windowself.root = tk.Tk()self.root.title("精确截图工具")self.root.geometry("400x200")self.root.resizable(False, False)# Center the windowself.center_window()# Create a frame for the controlscontrol_frame = ttk.Frame(self.root)control_frame.pack(pady=10, fill=tk.X)# Create and place the screenshot buttonself.screenshot_btn = ttk.Button(control_frame, text="开始截图",width=20,command=self.prepare_screenshot)self.screenshot_btn.pack(pady=10)# Status labelself.status_label = ttk.Label(control_frame, text="就绪")self.status_label.pack(pady=5)# Preview frameself.preview_frame = ttk.LabelFrame(self.root, text="最近截图预览")self.preview_frame.pack(pady=10, padx=10, fill=tk.BOTH, expand=True)self.preview_label = ttk.Label(self.preview_frame)self.preview_label.pack(fill=tk.BOTH, expand=True)# Variables for region selectionself.start_x = 0self.start_y = 0self.end_x = 0self.end_y = 0# Save directorypictures_dir = os.path.join(os.path.expanduser("~"), "Pictures")if os.path.exists(pictures_dir):self.save_dir = pictures_direlse:self.save_dir = os.path.join(os.path.expanduser("~"), "Desktop")# Make sure the directory existsif not os.path.exists(self.save_dir):os.makedirs(self.save_dir)# Last saved fileself.last_saved_file = Nonedef center_window(self):# Get screen width and heightscreen_width = self.root.winfo_screenwidth()screen_height = self.root.winfo_screenheight()# Calculate positionx = (screen_width - 400) // 2y = (screen_height - 200) // 2# Set window positionself.root.geometry(f"400x200+{x}+{y}")def prepare_screenshot(self):# Update statusself.status_label.config(text="准备截图...")self.root.update()  # Force UI update# Minimize windowself.root.withdraw()# Wait a moment for UI to updateself.root.after(500, self.take_screenshot)def take_screenshot(self):# Create overlay window for selectionoverlay = ScreenshotOverlay(self)self.root.wait_window(overlay.overlay)# If cancelled, just return to normalif not hasattr(self, 'screenshot_region') or not self.screenshot_region:self.root.deiconify()self.status_label.config(text="已取消截图")return# Get the selection coordinatesx1, y1, x2, y2 = self.screenshot_region# Convert to proper coordinates (top-left, bottom-right)left = min(x1, x2)top = min(y1, y2)right = max(x1, x2)bottom = max(y1, y2)# Ensure minimum sizeif right - left < 5 or bottom - top < 5:self.root.deiconify()self.status_label.config(text="选择区域太小")return# Take screenshottry:# Wait a moment to ensure overlay is gonetime.sleep(0.3)# Capture the screen regionscreenshot = pyautogui.screenshot(region=(left, top, right-left, bottom-top))# Generate filenametimestamp = datetime.now().strftime("%Y%m%d_%H%M%S")filename = os.path.join(self.save_dir, f"screenshot_{timestamp}.png")# Save the screenshotscreenshot.save(filename)self.last_saved_file = filename# Update previewself.update_preview(screenshot)# Update statusself.status_label.config(text=f"截图已保存: {os.path.basename(filename)}")except Exception as e:self.status_label.config(text=f"截图错误: {str(e)}")# Show the main window againself.root.deiconify()def update_preview(self, image):# Resize for preview if neededpreview_width = 360preview_height = 100width, height = image.sizeratio = min(preview_width/width, preview_height/height)new_size = (int(width * ratio), int(height * ratio))resized = image.resize(new_size, Image.LANCZOS)# Convert to PhotoImagephoto = ImageTk.PhotoImage(resized)# Update labelself.preview_label.config(image=photo)self.preview_label.image = photo  # Keep a referencedef run(self):self.root.mainloop()class ScreenshotOverlay:def __init__(self, parent):self.parent = parent# Create fullscreen overlay windowself.overlay = tk.Toplevel()self.overlay.attributes('-fullscreen', True)self.overlay.attributes('-alpha', 0.3)self.overlay.attributes('-topmost', True)# Make it semi-transparent with dark backgroundself.overlay.configure(bg='black')# Add a canvas for drawingself.canvas = tk.Canvas(self.overlay,bg='#1a1a1a',highlightthickness=0,cursor="crosshair")self.canvas.pack(fill=tk.BOTH, expand=True)# Variables for trackingself.start_x = Noneself.start_y = Noneself.rect_id = Noneself.magnifier_id = Noneself.coords_text_id = None# Instructions textself.canvas.create_text(self.overlay.winfo_screenwidth() // 2,50,text="单击并拖动鼠标选择截图区域 | 按ESC取消",fill="white",font=("Arial", 16))# Bind eventsself.canvas.bind("<ButtonPress-1>", self.on_press)self.canvas.bind("<B1-Motion>", self.on_drag)self.canvas.bind("<ButtonRelease-1>", self.on_release)self.overlay.bind("<Escape>", self.on_cancel)# Take a full screenshot for the magnifierself.screen_image = pyautogui.screenshot()self.screen_array = np.array(self.screen_image)def on_press(self, event):# Record start positionself.start_x = event.xself.start_y = event.y# Create rectangleself.rect_id = self.canvas.create_rectangle(self.start_x, self.start_y, self.start_x, self.start_y,outline="#00ff00", width=2, fill="")# Create magnifier circleself.magnifier_id = self.canvas.create_oval(event.x - 50, event.y - 50,event.x + 50, event.y + 50,outline="#ffffff", width=2, fill="#333333")# Create coordinate displayself.coords_text_id = self.canvas.create_text(event.x, event.y - 60,text=f"({event.x}, {event.y})",fill="#ffffff",font=("Arial", 10))def on_drag(self, event):# Update rectangleself.canvas.coords(self.rect_id,self.start_x, self.start_y,event.x, event.y)# Update magnifier positionself.canvas.coords(self.magnifier_id,event.x - 50, event.y - 50,event.x + 50, event.y + 50)# Update coordinate displayself.canvas.coords(self.coords_text_id,event.x, event.y - 60)self.canvas.itemconfig(self.coords_text_id,text=f"({event.x}, {event.y}) | 大小: {abs(event.x - self.start_x)}x{abs(event.y - self.start_y)}")# Draw selection area with fill (using a valid color format)self.canvas.itemconfig(self.rect_id, fill="#22ff22"  # Changed to a valid semi-transparent green)def on_release(self, event):# Store the selection coordinates in the parentself.parent.screenshot_region = (self.start_x, self.start_y, event.x, event.y)# Close the overlayself.overlay.destroy()def on_cancel(self, event):# Reset parent's screenshot regionself.parent.screenshot_region = None# Close overlayself.overlay.destroy()if __name__ == "__main__":app = ImprovedScreenshotTool()app.run()

1. 工具介绍

该工具具有以下功能:

  • 自定义截图区域:通过鼠标拖动选择截图区域。
  • 自动保存截图:截图会自动保存到 Pictures 文件夹或桌面。
  • 截图预览:最近一次截图会在工具界面中进行预览。
  • 用户友好的操作提示:提供状态提示,让用户清楚当前操作。

2. 主要技术栈

本工具基于以下 Python 库实现:

  • tkinter:用于构建 GUI 界面。
  • pyautogui:用于屏幕截图。
  • PIL (Pillow):用于图像处理和预览。
  • numpy:用于优化图像处理。
  • datetimeos:用于管理文件存储。

3. 代码结构解析

3.1 主窗口的创建

import tkinter as tk
from tkinter import ttk
import pyautogui
import numpy as np
from PIL import Image, ImageTk
import os
from datetime import datetime
import timeclass ImprovedScreenshotTool:def __init__(self):self.root = tk.Tk()self.root.title("精确截图工具")self.root.geometry("400x200")self.root.resizable(False, False)self.center_window()self.create_widgets()self.setup_save_directory()def center_window(self):screen_width = self.root.winfo_screenwidth()screen_height = self.root.winfo_screenheight()x = (screen_width - 400) // 2y = (screen_height - 200) // 2self.root.geometry(f"400x200+{x}+{y}")

功能解析:

  • 创建 Tk 窗口,设置标题、大小并居中。
  • center_window 方法用于获取屏幕尺寸并计算窗口居中位置。

3.2 创建 GUI 组件

    def create_widgets(self):control_frame = ttk.Frame(self.root)control_frame.pack(pady=10, fill=tk.X)self.screenshot_btn = ttk.Button(control_frame, text="开始截图", width=20, command=self.prepare_screenshot)self.screenshot_btn.pack(pady=10)self.status_label = ttk.Label(control_frame, text="就绪")self.status_label.pack(pady=5)self.preview_frame = ttk.LabelFrame(self.root, text="最近截图预览")self.preview_frame.pack(pady=10, padx=10, fill=tk.BOTH, expand=True)self.preview_label = ttk.Label(self.preview_frame)self.preview_label.pack(fill=tk.BOTH, expand=True)

功能解析:

  • 创建按钮 开始截图,绑定 prepare_screenshot 方法。
  • 状态标签用于提示当前状态。
  • preview_frame 用于显示最近截图的预览。

3.3 截图逻辑

    def prepare_screenshot(self):self.status_label.config(text="准备截图...")self.root.update()self.root.withdraw()self.root.after(500, self.take_screenshot)

功能解析:

  • 按下截图按钮后,状态标签显示 “准备截图…”。
  • withdraw() 让主窗口最小化,避免干扰截图。
  • after(500, self.take_screenshot) 让窗口延迟 0.5 秒后调用 take_screenshot
    def take_screenshot(self):overlay = ScreenshotOverlay(self)self.root.wait_window(overlay.overlay)if not hasattr(self, 'screenshot_region') or not self.screenshot_region:self.root.deiconify()self.status_label.config(text="已取消截图")returnx1, y1, x2, y2 = self.screenshot_regionleft, top = min(x1, x2), min(y1, y2)right, bottom = max(x1, x2), max(y1, y2)if right - left < 5 or bottom - top < 5:self.root.deiconify()self.status_label.config(text="选择区域太小")returntime.sleep(0.3)screenshot = pyautogui.screenshot(region=(left, top, right-left, bottom-top))filename = os.path.join(self.save_dir, f"screenshot_{datetime.now().strftime('%Y%m%d_%H%M%S')}.png")screenshot.save(filename)self.last_saved_file = filenameself.update_preview(screenshot)self.status_label.config(text=f"截图已保存: {os.path.basename(filename)}")self.root.deiconify()

功能解析:

  • ScreenshotOverlay 负责创建全屏幕覆盖窗口,允许用户选择截图区域。
  • 获取选定区域的坐标,并检查区域大小是否有效。
  • pyautogui.screenshot(region=(left, top, width, height)) 实现精准截图。
  • 保存截图并更新预览区域。

3.4 截图选择区域的实现

class ScreenshotOverlay:def __init__(self, parent):self.parent = parentself.overlay = tk.Toplevel()self.overlay.attributes('-fullscreen', True)self.overlay.attributes('-alpha', 0.3)self.overlay.attributes('-topmost', True)self.overlay.configure(bg='black')self.canvas = tk.Canvas(self.overlay, bg='#1a1a1a', highlightthickness=0, cursor="crosshair")self.canvas.pack(fill=tk.BOTH, expand=True)self.canvas.bind("<ButtonPress-1>", self.on_press)self.canvas.bind("<B1-Motion>", self.on_drag)self.canvas.bind("<ButtonRelease-1>", self.on_release)self.overlay.bind("<Escape>", self.on_cancel)

功能解析:

  • 创建全屏幕透明窗口,允许用户使用鼠标选择截图区域。
  • 监听鼠标点击 (on_press)、拖动 (on_drag)、释放 (on_release) 事件。

文章转载自:

http://QivAyukl.mrLgy.cn
http://B0J0eOV8.mrLgy.cn
http://MicKpNWC.mrLgy.cn
http://K6HXKaSC.mrLgy.cn
http://GgmCQ2Sx.mrLgy.cn
http://vSjqdGzv.mrLgy.cn
http://u0i3ca6S.mrLgy.cn
http://Ngy7QScA.mrLgy.cn
http://TwAlHpOU.mrLgy.cn
http://0Zod8zVb.mrLgy.cn
http://fNtQg8ai.mrLgy.cn
http://HDAfvUse.mrLgy.cn
http://4yn9CcM1.mrLgy.cn
http://vQelF2cL.mrLgy.cn
http://xVEcoy3p.mrLgy.cn
http://YIwMHELC.mrLgy.cn
http://Bgs3Ssa7.mrLgy.cn
http://8vimF2is.mrLgy.cn
http://CXomeXwp.mrLgy.cn
http://aLy0qdCJ.mrLgy.cn
http://vJ48IZxl.mrLgy.cn
http://WgvIRM5i.mrLgy.cn
http://MigLUrbA.mrLgy.cn
http://my3Gde8j.mrLgy.cn
http://0dDdtMjp.mrLgy.cn
http://Y62zm68r.mrLgy.cn
http://PY6Etn9Z.mrLgy.cn
http://UDOzZI04.mrLgy.cn
http://gnz6L60v.mrLgy.cn
http://s1oAjZqH.mrLgy.cn
http://www.dtcms.com/wzjs/634603.html

相关文章:

  • 如何在手机上开自己的网站网站建设 客户定位
  • 网站建设与网页设计专业的江阴做公司网站有哪些
  • 站酷网如何接单构建平台还是搭建平台
  • 做餐饮如何加入外卖网站格力网站建设需求分析
  • 智能网站建设哪家好做暧暧网站在线观看
  • 做网站要学什么c语言asp.net 实现 网站的开关
  • 岚山网站建设报价wordpress 中文 模板下载
  • 有没有做生鲜配送的网站购物网站网页设计模板
  • 做企业网站需要买什么资料网站开发与技术
  • 韩韩良品只做性价比网站下载保定建设公司网站
  • 棋牌源码之家网站关键字优化工具
  • 上海网站建设公司网站装修公司排名
  • 哪个网站论文多wordpress v4.9.5
  • 青岛市建设监督管理局网站企业建设网站 入账
  • 兰溪做网站太原小程序制作电话
  • 网站怎么制作客户关系管理的重要性
  • 漯河专业做网站的公司长沙网站开发微联讯点官网
  • 怎么建设推广网站公司注册地址可以变更吗
  • 青岛网站优化公司哪家好网站建设环境搭建心得体会
  • 网站页面创意如何做网站的的关键词
  • 自己制作一个网站的软件协会宣传网站开发方案
  • 微信小视频网站开发WordPress文字按钮变色
  • 新西兰网站建设网站建设 福田
  • 新公司怎么做网站什么是网站挂马
  • 公司网站建设优帮云做直播导航网站
  • 成都彭州网站建设陶瓷 网站模板
  • 昌平网站开发公司太原网络推广公司哪家好
  • 网站赚钱系统人工智能设计网站
  • 合肥学习做网站wordpress documentation
  • 网站建设公司网站源码莱芜论坛话题