PyQt5繪圖全攻略:QPainter、QPen、QBrush與QPixmap詳解

摘要:掌握PyQt5繪圖核心控件,輕松實現窗體繪圖、文字渲染、幾何圖形繪制及圖像加載。本文附帶完整代碼示例與效果圖,助你快速上手GUI圖形開發。

繪圖基礎:為什么需要這些控件?

在GUI開發中,繪圖功能是數據可視化、游戲開發、圖像編輯等場景的核心需求。PyQt5通過以下四大類實現繪圖:

  • QPainter:繪圖引擎,執行底層繪制操作
  • QPen:控制線條樣式(顏色/粗細/虛線等)
  • QBrush:控制填充樣式(純色/漸變/圖案)
  • QPixmap:圖像加載與渲染
    📌 關鍵特性:所有繪圖操作必須在paintEvent()事件中完成,通過begin()和end()方法包裹。

核心控件詳解與實戰

QPainter:繪圖引擎

核心能力

def paintEvent(self, event):painter = QPainter(self)painter.begin(self) # 繪制操作...painter.end() 

常用方法速查表:

方法功能示例
drawText()文字渲染painter.drawText(rect, alignment, “文本”)
drawEllipse()繪制橢圓painter.drawEllipse(x, y, w, h)
fillRect()矩形填充painter.fillRect(rect, QColor(255,0,0))

文字繪制示例

import sys
from PyQt5.QtWidgets import QApplication,QWidget
from PyQt5.QtGui import QPainter,QColor,QFont
from PyQt5.QtCore import Qtclass Drawing(QWidget):def __init__(self,parent=None):super(Drawing,self).__init__(parent)self.setWindowTitle("在窗體中繪畫出文字例子")self.resize(300,200)self.text='歡迎學習 PyQt5'def paintEvent(self,event):painter=QPainter(self)painter.begin(self)# 自定義的繪畫方法self.drawText(event,painter)painter.end()def drawText(self,event,qp):#設置筆的顏色qp.setPen(QColor(168,34,3))#設置字體qp.setFont(QFont('SimSun',20))#畫出文本qp.drawText(event.rect(),Qt.AlignCenter,self.text)if __name__ == '__main__':app=QApplication(sys.argv)demo=Drawing()demo.show()sys.exit(app.exec_())

運行效果

image

QPen:線條控制大師

6種預定義線型對比:

  • Qt.SolidLine:實線(默認)
  • Qt.DashLine:虛線
  • Qt.DotLine:點線
  • Qt.DashDotLine:點劃線
  • Qt.DashDotDotLine:雙點劃線
  • Qt.CustomDashLine:自定義模式

自定義虛線技巧:

pen = QPen(Qt.red,  3)
pen.setStyle(Qt.CustomDashLine) 
pen.setDashPattern([5,  2, 1, 2])  # 5px實線+2px空白+1px實線+2px空白 

QBrush:填充藝術家

9種經典填充模式:

# 示例:創建不同填充樣式的矩形 
patterns = [Qt.SolidPattern,      # 純色填充 Qt.Dense5Pattern,     # 密集斜線 Qt.DiagCrossPattern,  # 交叉網格 Qt.HorPattern,        # 水平線 Qt.VerPattern,        # 垂直線 Qt.BDiagPattern       # 反斜線 
]

漸變填充進階(需配合QLinearGradient):

gradient = QLinearGradient(0, 0, 100, 100)
gradient.setColorAt(0,  Qt.blue) 
gradient.setColorAt(1,  Qt.white) 
brush = QBrush(gradient)

QPixmap:圖像處理專家

核心功能對比

方法與QImage區別適用場景
load()專為顯示優化界面圖片加載
scaled()保持寬高比縮放縮略圖生成
save()支持壓縮格式截圖保存

圖像加載最佳實踐:

自適應標簽大小的圖像加載

pixmap = QPixmap("image.jpg") 
pixmap = pixmap.scaled( label.size(),  Qt.KeepAspectRatio,Qt.SmoothTransformation 
)
label.setPixmap(pixmap) 

性能優化建議

  • 雙緩沖技術:通過QPixmap緩存繪制結果,避免閃爍
  • 局部重繪:使用update(QRect)而非全局刷新
  • 資源復用:重復使用的QPen/QBrush建議設為成員變量

完整項目示例

簡易畫板實現思路:

  • 繼承QWidget重寫mouseMoveEvent
  • 使用QPainterPath記錄筆跡
  • 通過QPixmap保存畫布狀態
class SketchWidget(QWidget):def __init__(self):super().__init__()self.path  = QPainterPath()self.pen  = QPen(Qt.blue,  3, Qt.SolidLine)def mouseMoveEvent(self, event):self.path.lineTo(event.pos()) self.update() 

📢 互動提問:你在PyQt5繪圖時遇到過哪些難題?歡迎在評論區留言討論!

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

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

相關文章

C++學習:六個月從基礎到就業——多線程編程:std::thread基礎

C學習:六個月從基礎到就業——多線程編程:std::thread基礎 本文是我C學習之旅系列的第五十四篇技術文章,也是第四階段"并發與高級主題"的第一篇,介紹C11引入的多線程編程基礎知識。查看完整系列目錄了解更多內容。 引言…

【計算機網絡】TCP如何保障傳輸可靠性_筆記

文章目錄 一、傳輸可靠性的6方面保障二、分段機制三、超時重傳機制四、流量控制五、擁塞控制 提示:以下是本篇文章正文內容,下面案例可供參考 源網站 按TCP/IP 4層體系,TCP位于傳輸層,為應用層提供服務 一、傳輸可靠性的6方面保障…

2025年保姆級教程:Powershell命令補全、主題美化、文件夾美化及Git擴展

文章目錄 1. 美化 Powershell 緣起2. 安裝 oh-my-posh 和 posh-git3. 安裝文件夾美化主題【可選】 1. 美化 Powershell 緣起 背景:用了 N 年的 Windows 系統突然覺得命令行實在太難用了,沒有補全功能、界面也不美觀。所以,我決定改變它。但是…

基于Mongodb的分布式文件存儲實現

分布式文件存儲的方案有很多,今天分享一個基于mongodb數據庫來實現文件的存儲,mongodb支持分布式部署,以此來實現文件的分布式存儲。 基于 MongoDB GridFS 的分布式文件存儲實現:從原理到實戰 一、引言 當系統存在大量的圖片、…

【Linux】Linux安裝并配置Redis

目錄 1.安裝 2.啟動服務 3.配置 3.1.綁定地址 3.2.保護模式 3.3.持久化選項 3.3.1.RDB 持久化 3.3.2.AOF 持久化 3.3.3.如何選擇 1.安裝 Redis 可以從默認的 CentOS 軟件倉庫中安裝。運行以下命令來安裝 Redis sudo dnf install redis -y 響應如下 2.啟動服務 安裝完成后&…

python-數據可視化(大數據、數據分析、可視化圖像、HTML頁面)

通過 Python 讀取 XLS 、CSV文件中的數據,對數據進行處理,然后生成包含柱狀圖、扇形圖和折線圖的 HTML 報告。這個方案使用了 pandas 處理數據,matplotlib 生成圖表,并將圖表嵌入到 HTML 頁面中。 1.XSL文件生成可視化圖像、生成h…

黑馬點評相關知識總結

黑馬點評的項目總結 主要就黑馬點評項目里面的一些比較重要部分的一次總結,方便以后做復習。 基于Session實現短信登錄 短信驗證碼登錄 這部分使用常規的session來存儲用戶的登錄狀態,其中短信發送采取邏輯形式,并不配置云服務驗證碼功能。…

手搓四人麻將程序

一、麻將牌的表示 在麻將游戲中,總共有一百四十四張牌,這些牌被分為多個類別,每個類別又包含了不同的牌型。具體來說,麻將牌主要包括序數牌、字牌和花牌三大類。序數牌中,包含有萬子、條子和筒子,每種花色…

【Java高階面經:數據庫篇】17、分庫分表分頁查詢優化:告別慢查詢與內存爆炸

一、分庫分表基礎:策略與中間件形態 1.1 分庫分表核心策略 分庫分表是應對海量數據存儲和高并發訪問的關鍵架構設計,其核心在于將數據分散到不同的數據庫或表中,以突破單庫單表的性能限制。常見的分庫分表策略包括: 1.1.1 哈希…

貪心算法之跳躍游戲問題

問題背景 本文背景是leetcode的一道經典題目:跳躍游戲,描述如下: 給定一個非負整數數組 nums,初始位于數組的第一個位置(下標0)。數組中的每個元素表示在該位置可以跳躍的最大長度。判斷是否能夠到達最后…

Label Studio:開源標注神器

目錄 一、Label Studio 是什么? 二、核心功能大揭秘 2.1 多類型數據全兼容 2.2 個性化定制隨心配 2.3 團隊協作超給力 2.4 機器學習巧集成 三、上手實操超簡單 3.1 安裝部署不頭疼 3.1.1 Docker安裝 3.1.2 pip安裝 3.1.3 Anaconda安裝 3.2 快速開啟標注…

創建信任所有證書的HttpClient:Java 實現 HTTPS 接口調用,等效于curl -k

在 Java 生態中,HttpClient 和 Feign 都是調用第三方接口的常用工具,但它們的定位、設計理念和使用場景有顯著差異。以下是詳細對比: DIFF1. 定位與抽象層級 特性HttpClientFeign層級底層 HTTP 客戶端庫(處理原始請求/響應&#…

從零基礎到最佳實踐:Vue.js 系列(7/10):《常用內置 API 與插件》

引言 Vue.js 是一款輕量且強大的前端框架,因其易用性和靈活性受到廣泛歡迎。無論是初學者還是資深開發者,都可以通過其內置 API 和插件生態快速構建高效、可維護的 Web 應用。本文將從基礎用法講起,逐步深入到進階技巧,結合大量實…

線性代數:AI大模型的數學基石

🧑 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C, C#, Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C、C#等開發語言,熟悉Java常用開…

Java-System工具類深度解析

Java-System工具類深度解析 前言一、System 類概述1.1 基本定義與特點1.2 重要成員變量 二、標準輸入輸出功能2.1 標準輸入(System.in)2.2 標準輸出(System.out)2.3 標準錯誤輸出(System.err) 三、系統屬性…

刪除用戶憑證

Git 部分倉庫無法操作,部分倉庫沒問題 問題出現 我用個人電腦修改了項目,提交了git。然后第二天在公司電腦git pull的時候失敗,只有部分倉庫,git colne直接失敗,部分倉庫無問題。 解決方式 刪除git相關憑證&#xff…

19. 結合Selenium和YAML對頁面實例化PO對象改造

19. 結合Selenium和YAML對頁面實例化PO對象改造 一、架構升級核心思路 1.1 改造核心目標 # 原始PO模式:顯式定義元素定位 username (id, ctl00_MainContent_username)# 改造后PO模式:動態屬性訪問 self.username.send_keys(Tester) # 自動觸發元素定…

鴻蒙App開發學習路徑

以下是一份系統的鴻蒙(HarmonyOS)App開發學習路徑,適合從零開始逐步掌握相關技能: 1. 基礎知識儲備 1.1 理解鴻蒙系統 鴻蒙核心特性:分布式能力、一次開發多端部署、原子化服務、ArkUI框架。與Android/iOS的區別&…

spring boot啟動報錯:2002 - Can‘t connect to server on ‘192.168.10.212‘ (10061)

錯誤代碼 10061 通常表明無法建立到指定服務器的網絡連接。這個錯誤屬于 Windows Sockets 錯誤代碼,具體指的是無法建立網絡連接,通常是因為目標地址不可達。以下是一些解決此問題的步驟: 檢查 IP 地址和端口: 確保你輸入的 IP …

ARMv7的NVIC中斷優先級

1. 優先級模型 數值規則:數值越小,優先級越高(例如優先級0的異常比優先級1的異常更高);若多個異常的優先級相同,則 異常號(Exception Number) 較小的異常優先執行。固定優先級異常(不可配置):異常類型 優先級值 說明 Reset -3 最高優先級(系統復位) NMI -2 不可屏…