進階向:基于Python的簡易屏幕畫筆工具

用Python打造你的專屬屏幕畫筆工具:零基礎也能輕松實現

你是否曾在觀看網課或參加遠程會議時,想要直接在屏幕上標注重點?或者作為設計師,需要快速繪制創意草圖?現在,只需幾行Python代碼,你就能輕松打造專屬的屏幕畫筆工具,無需安裝任何專業軟件!

為什么選擇Python創建屏幕畫筆?

Python作為最受歡迎的編程語言之一,擁有以下優勢:

  • 簡單易學:語法直觀,特別適合編程新手
  • 豐富的庫支持:PyAutoGUI、Pillow等庫讓屏幕操作變得簡單
  • 跨平臺:Windows、MacOS、Linux系統都能運行
  • 快速開發:短短幾十行代碼就能實現核心功能

你需要準備什么?

基礎環境

  1. Python 3.6或更高版本(推薦3.8+)
  2. 代碼編輯器(VS Code、PyCharm或IDLE都適用)

必要Python庫

pip install pyautogui pillow keyboard

  • pyautogui:用于捕捉鼠標位置和屏幕操作
  • pillow:圖像處理庫,用于保存繪圖結果
  • keyboard:監聽鍵盤事件,實現功能控制

核心功能實現思路

  1. 鼠標軌跡追蹤:記錄鼠標移動時的坐標點
  2. 實時繪制:將連續的坐標點連接成線條
  3. 顏色與粗細控制:提供多種畫筆選項
  4. 保存功能:將繪制的圖像保存為圖片文件

下面讓我們一步步實現這個有趣的工具!


核心原理圖解

屏幕畫筆工具的核心是捕捉鼠標軌跡并將軌跡轉化為可視圖形。整個過程基于三個關鍵組件:

坐標記錄器:存儲鼠標移動的坐標點序列

圖形渲染器:將坐標點連接成連續線條

  1. 事件監聽器:實時監控鼠標動作(移動/點擊)

  2. 通過瀏覽器的mousemovemousedown事件API實現監控
  3. 使用事件委托技術提高性能,減少事件綁定數量
  4. 示例:document.addEventListener('mousemove', (e) => {...})
  5. 可配置監聽靈敏度,如設置采樣間隔避免過于密集的坐標采集
  6. 支持移動端觸摸事件的適配處理
  7. 采用數組結構存儲坐標點[{x:100,y:200},...]
  8. 包含時間戳信息用于分析繪制速度
  9. 實現數據壓縮算法,減少存儲空間占用
  10. 支持撤銷/重做操作的歷史記錄功能
  11. 可導出為JSON格式便于數據交換
  12. 基于Canvas API使用beginPath()lineTo()方法繪制
  13. 支持多種線條樣式配置:顏色、粗細、虛線等
  14. 實現貝塞爾曲線平滑算法,消除鋸齒效果
  15. 響應式設計,自動適應不同屏幕尺寸
  16. 示例:實時白板、數字簽名、手寫筆記等應用場景

用數學公式表示繪圖過程: $$P_t = (x_t, y_t) \quad \text{其中} \quad t \in [0, n]$$ $$\text{繪制曲線} \quad \bigcup_{t=0}^{n-1} \overline{P_t P_{t+1}}$$


代碼實現詳解

我們使用Python的Pygame庫實現繪圖功能,以下是分步解析:

1. 環境初始化

import pygame
import sys# 初始化引擎
pygame.init()
screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
canvas = pygame.Surface(screen.get_size(), pygame.SRCALPHA)

  • pygame.FULLSCREEN:使窗口占據整個屏幕
  • SRCALPHA參數:創建支持透明度的畫布層
  • 雙緩沖機制:避免繪圖閃爍

2. 核心繪圖邏輯

drawing = False  # 畫筆狀態
points = []      # 坐標存儲
color = (255, 0, 0)  # 紅色畫筆
radius = 5       # 畫筆粗細while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()# 鼠標按下時開始記錄軌跡if event.type == pygame.MOUSEBUTTONDOWN:drawing = Truepoints = [event.pos]# 鼠標移動時持續記錄坐標elif event.type == pygame.MOUSEMOTION and drawing:points.append(event.pos)# 鼠標釋放時完成線段elif event.type == pygame.MOUSEBUTTONUP:drawing = Falsepoints = []# 實時渲染軌跡if len(points) > 1:pygame.draw.lines(canvas, color, False, points, radius)# 顯示到屏幕screen.fill((0, 0, 0))screen.blit(canvas, (0, 0))pygame.display.flip()

  • 軌跡優化:使用pygame.draw.lines連接連續點
  • 狀態機控制drawing變量確保只在按下時繪圖
  • 雙圖層設計:背景層+透明畫布層實現無痕重繪

3. 增強功能實現 添加更多實用功能讓工具更完善:

# 顏色切換(按1-3鍵)
if event.type == pygame.KEYDOWN:if event.key == pygame.K_1: color = (255,0,0)  # 紅if event.key == pygame.K_2: color = (0,255,0)  # 綠if event.key == pygame.K_3: color = (0,0,255)  # 藍# 清屏功能(按C鍵)
if event.key == pygame.K_c: canvas.fill((0,0,0,0))# 畫筆粗細調節(上下鍵)
if event.key == pygame.K_UP: radius += 1
if event.key == pygame.K_DOWN: radius = max(1, radius-1)


操作指南

基本繪圖操作

顏色切換功能

畫筆粗細調節

畫布管理

程序退出

應用場景

  1. 繪圖程序使用說明

    程序啟動與界面

  2. 程序啟動后會自動進入全屏模式,提供最大化的繪圖區域
  3. 畫布默認背景為白色,起始畫筆顏色為黑色,畫筆粗細為中等(3px)
  4. 繪圖方法:按住鼠標左鍵不放,在畫布上拖動即可繪制線條
  5. 實時預覽:繪制過程中會實時顯示當前筆跡,松開鼠標即完成繪制
  6. 通過鍵盤數字鍵快速切換畫筆顏色:
    • 1 鍵:切換為紅色畫筆
    • 2 鍵:切換為綠色畫筆
    • 3 鍵:切換為藍色畫筆
  7. 顏色切換時會有短暫的顏色提示顯示在畫布右上角
  8. 使用方向鍵調整畫筆粗細:
    • 鍵:增加畫筆粗細(每次增加1px,最大10px)
    • 鍵:減小畫筆粗細(每次減少1px,最小1px)
  9. 當前畫筆粗細會實時顯示在畫布左上角
  10. 清空畫布:按 C 鍵可一鍵清空整個畫布內容
    • 清空前會彈出確認對話框,防止誤操作
    • 清空后不可撤銷,請謹慎操作
  11. 點擊窗口右上角的關閉按鈕(×)即可退出程序
  12. 退出前若畫布有內容,會提示是否保存作品(可選保存為PNG格式)
  13. 教學演示:教師可以在課堂上實時繪制示意圖
  14. 創意涂鴉:兒童或藝術愛好者可以進行自由創作
  15. 會議記錄:快速繪制簡單的思維導圖或流程圖
  16. 設計草圖:設計師可以快速記錄靈感構思

完整源代碼
import pygame
import sysdef main():pygame.init()screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)canvas = pygame.Surface(screen.get_size(), pygame.SRCALPHA)drawing = Falsepoints = []color = (255, 0, 0)radius = 5while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()if event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:pygame.quit()sys.exit()if event.key == pygame.K_1: color = (255,0,0)if event.key == pygame.K_2: color = (0,255,0)if event.key == pygame.K_3: color = (0,0,255)if event.key == pygame.K_c: canvas.fill((0,0,0,0))if event.key == pygame.K_UP: radius += 1if event.key == pygame.K_DOWN: radius = max(1, radius-1)if event.type == pygame.MOUSEBUTTONDOWN:drawing = Truepoints = [event.pos]elif event.type == pygame.MOUSEMOTION and drawing:points.append(event.pos)elif event.type == pygame.MOUSEBUTTONUP:drawing = Falsepoints = []if len(points) > 1:pygame.draw.lines(canvas, color, False, points, radius)screen.fill((0, 0, 0))screen.blit(canvas, (0, 0))pygame.display.flip()pygame.time.delay(10)if __name__ == "__main__":main()


擴展思路
  1. 保存功能:添加pygame.image.save(canvas, "drawing.png")
  2. 橡皮擦:創建白色畫筆并設置混合模式
  3. 圖形識別:用OpenCV識別手繪幾何圖形
  4. 多用戶協作:添加網絡模塊實現共享畫板

現在你已經擁有了一個功能完整的屏幕畫筆工具!這個工具具備多種實用功能:可以自由調整畫筆顏色和粗細,支持橡皮擦功能,還能一鍵清空畫布重新開始。更棒的是,所有繪制內容都會實時保存,完全不用擔心丟失作品。

嘗試運行代碼,在屏幕上繪制你的第一個數字作品吧。你可以:

  1. 按住鼠標左鍵拖動來繪制線條
  2. 右鍵點擊調色板切換畫筆顏色
  3. 使用滾輪調整畫筆粗細
  4. 按E鍵切換橡皮擦模式
  5. 按C鍵清空畫布

編程的樂趣就在于:用簡單的代碼創造可視化的魔法。通過短短幾十行Python代碼,我們就實現了一個功能強大的繪圖工具。這就像現代版的魔法杖 - 只不過我們用代碼代替了咒語,用邏輯代替了魔法手勢。無論是繪制簡單的幾何圖形,還是創作復雜的數字繪畫,這個工具都能滿足你的創意需求。

特別適合用于:

  • 教學演示時標注重點
  • 遠程協作時可視化溝通
  • 快速記錄創意靈感
  • 兒童編程啟蒙教育
  • 制作個性化的電子賀卡

現在,釋放你的想象力,開始創作屬于你的數字藝術品吧!記得保存你的杰作,也可以分享給朋友看看你的編程成果哦。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90586.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90586.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90586.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Elasticsearch-ik分析器

CLI 安裝步驟 1、停止 Elasticsearch(如果正在運行): 在安裝插件之前,確保 Elasticsearch 沒有在運行。 命令: systemctl stop elasticsearch2、安裝插件: 使用 elasticsearch-plugin 命令安裝 IK 插件。進…

MySQL八股篇

查詢關鍵字執行先后順序FROM(及 JOIN)WHEREGROUP BYHAVINGSELECTDISTINCTORDER BYLIMIT / OFFSETCHAR 和 VARCHAR 的區別?使用場景?特性CHARVARCHAR?存儲方式??定長,存儲時填充空格至定義長度變長,存儲實際數據 長…

QT RCC 文件

RCC (Qt Resource Compiler) 是 Qt 框架中的一個工具,用于將資源文件(如圖像、音頻、翻譯文件等)編譯成二進制格式,并嵌入到應用程序可執行文件中。RCC 文件基本概念作用:將應用程序所需的資源文件編譯成 C 代碼&#…

數據湖典型架構解析:2025 年湖倉一體化解決方案

數據湖架構概述:從傳統模型到 2025 年新范式數據湖作為存儲海量異構數據的中央倉庫,其架構設計直接影響企業數據價值的釋放效率。傳統數據湖架構主要關注數據的存儲和管理,而 2025 年的數據湖架構已經演變為更加智能化、自動化的綜合性數據平…

繪圖庫 Matplotlib Search

關于Pathon的繪圖庫的認識和基本操作的學習 這里學習了兩款常用便捷的繪圖庫去學習使用Matplotlib介紹是最受歡迎的一種數據可視化包 是常用的2D繪圖庫 一般常于Numpy和Pandas使用 是數據分析中非常重要的工具可以自定義XY軸 繪制線形圖 柱狀圖 直方圖 密度圖 散點圖 更清晰的展…

Docker詳解及實戰

🎉 Docker 簡介和安裝 - Docker 快速入門 Docker 簡介 Docker是一個開源的平臺,用于開發、交付和運行應用程序。它能夠在Windows,macOS,Linux計算機上運行,并將某一應用程序及其依賴項打包至一個容器中,這…

嵌入式學習的第三十三天-進程間通信-UDP

一、網絡1.定義不同主機間進程通信主機間在硬件層面互聯互通主機在軟件層面互聯互通2.國際網絡體系結構OSI模型(7層): open system interconnect -------理論模型------定義了網絡通信中不同層的協議1977 國際標準化組織各種不同體系結構的計算機能在世…

4、Spring AI_DeepSeek模型_結構化輸出

一、前言 Spring AI 提供跨 AI 供應商(如 OpenAI、Hugging Face 等)的一致性 API, 通過分裝的ChatModel或ChatClient即可輕松調動LLM進行流式或非流式對話。 本專欄主要圍繞著通過OpenAI兼容接口調用各種大語言模型展開學習(因為大部分模型…

Spring Data Redis 從入門到精通:原理與實戰指南

一、Redis 基礎概念 Redis(Remote Dictionary Server)是開源的內存鍵值對數據庫,以高性能著稱。它支持多種數據結構(String、Hash、List、Set、ZSet),并提供持久化機制(RDB、AOF)。 …

免費版酒店押金原路退回系統——仙盟創夢IDE

項目介紹?東方仙盟開源酒店押金管理系統是一款面向中小型酒店、民宿、客棧的輕量級前臺管理工具,專注于簡化房態管理、訂單處理和押金跟蹤流程。作為完全開源的解決方案,它無需依賴任何第三方服務,所有數據存儲在本地瀏覽器中,確…

10. isaacsim4.2教程-RTX Lidar 傳感器

1. 前言RTX Lidar 傳感器Isaac Sim的RTX或光線追蹤Lidar支持通過JSON配置文件設置固態和旋轉Lidar配置。每個RTX傳感器必須附加到自己的視口或渲染產品,以確保正確模擬。重要提示: 在運行RTX Lidar仿真時,如果你在Isaac Sim UI中停靠窗口&…

QT6 源,七章對話框與多窗體(14)棧式窗體 QStackedWidget:本類里代碼很少。舉例,以及源代碼帶注釋。

(1)這不是本章節要用到的窗體組件,只是跟著標簽窗體 QTabWidget 一起學了。這也是 QT 的 UI 界面里的最后幾個容器了。而且本類也很簡單。就了解一下它。 本類的繼承關系如下 : UI 設計界面 :運行效果 :&…

魔百和M401H_國科GK6323V100C_安卓9_不分地區免拆卡刷固件包

魔百和M401H_國科GK6323V100C_安卓9_不分地區免拆卡刷固件包刷機說明:1,進機頂盒設置(密碼10086),在其他里,一直按左鍵約32下,打開調試模式2,進網絡設置,查看IP地址。3&a…

MySQL基礎02

一. 函數在 MySQL 中,函數是用于對數據進行特定處理或計算的工具,根據作用范圍和返回結果的不同,主要分為單行函數和聚合函數(又稱分組函數)。以下是詳細介紹:1.單行函數單行函數對每一行數據單獨處理&…

LabVIEW 視覺檢測SIM卡槽

針對SIM 卡槽生產中人工檢測效率低、漏檢誤檢率高的問題,設計了基于 LabVIEW 機器視覺的缺陷檢測系統。該系統通過光學采集與圖像處理算法,實現對卡槽引腳折彎、變形、漏銅等缺陷的自動檢測,誤報率為 0,平均檢測時間小于 750ms&am…

RocketMQ5.3.1的安裝

1、下載安裝 RocketMQ 的安裝包分為兩種,二進制包和源碼包。1 下載 Apache RocketMQ 5.3.1的源碼包后上傳到linux https://dist.apache.org/repos/dist/release/rocketmq/5.3.1/rocketmq-all-5.3.1-source-release.zip2 解壓編譯 $ unzip rocketmq-all-5.3.1-source…

FunASR實時多人對話語音識別、分析、端點檢測

核心功能:FunASR是一個基礎語音識別工具包,提供多種功能,包括語音識別(ASR)、語音端點檢測(VAD)、標點恢復、語言模型、說話人驗證、說話人分離和多人對話語音識別等。FunASR提供了便捷的腳本和…

opencv--day01--opencv基礎知識及基礎操作

文章目錄前言一、opencv基礎知識1.opencv相關概念1.1背景1.2特點1.3主要功能與應用1.4.opencv-python2.計算機中的圖像概念2.1圖像表示2.2圖像存儲彩色圖像二、opencv基礎操作1.圖像的讀取2.圖像的顯示3.保存圖像4.創建黑白圖及隨機像素彩圖5. 圖像切片(圖片剪裁&am…

如何撤銷Git提交誤操作

要撤銷在主分支上的 git add . 和 git commit 操作,可以按照以下步驟安全回退: 完整回退步驟: # 1. 查看提交歷史,確認要回退的commit git log --oneline# 示例輸出: # d3f4g7h (HEAD -> main) 誤操作提交 # a1b2c3…

React+Three.js實現3D場景壓力/溫度/密度分布可視化

本文介紹了一個基于React和Three.js的3D壓力可視化解決方案,該方案能夠: 加載并渲染3D壓力模型數據 提供動態顏色映射功能,支持多種顏色方案:彩虹-rainbow,冷暖-cooltowarm,黑體-blackbody,灰度-grayscale 實現固定位置的顏色圖…