pyqt5講解5:窗口繪圖類控件QPainter,QPen,QBrush,QPixmap

一、QPainter

經常使用方法python

方法 描述
begin() 開始在目標設備上繪製
drawArc() 在起始角度和最終角度之間畫弧
drawEliipse() 在一個矩形內畫一個橢圓
drawLine(int x1,int y1,int x2,int y2) 繪製一條指定了端點座標的直線,而且指定當前畫筆位置爲(x2,y2)
drawPixmap() 從圖像文件中提取 Pixmap 並將其顯示在指定位置
drawPolygon() 使用座標數組繪製多邊形
drawRect(int x,int y,int w,int h) 以給定的寬度和高度從左上角座標(x,y)開始繪製一個矩形
drawText() 顯示給定座標處的文字
fillRext() 使用 QColor 參數填充矩形
setBrush() 設置畫筆風格
setPen() 設置用於繪製的筆的顏色、大小和樣式

setpen可選參數數組

參數 描述
Qt.NoPen 沒有線
Qt.SolidLine 一條簡單的線
Qt.DashLine 由一些像素分隔的短線
Qt.DotLine 由一些像素分隔得點
Qt.DashDotLine 輪流交替的點和短線
Qt.DashDotDotLine 一條短線、兩個點
Qt.MPenStyle 畫筆風格的掩碼
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author: yudengwu
# @Date : 2020/8/20

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *


class Drawing(QWidget):
    def __init__(self, parent=None):
        super(Drawing, self).__init__(parent)
        self.setWindowTitle("在窗口中繪製文字")
        self.setWindowIcon(QIcon("head.png"))
        self.resize(300, 200)
        self.text = "你好呀,總裁餘"

    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        # 自定義繪製方法
        self.draw_text(event, painter)
        painter.end()

    def draw_text(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_())

解釋:
首先定義文字
self.text = 「你好呀,總裁餘」
定義繪製事件
def paintEvent(self, event):
自定義繪製方法
def draw_text(self, event, qp):





app

繪製點線機器學習

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author: yudengwu
# @Date : 2020/8/20

import sys, math
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt

class Drawing(QWidget):
    def __init__(self, parent=None):
        super(Drawing, self).__init__(parent)
        self.resize(300, 200)
        self.setWindowTitle("在窗口中畫點")
        self.setWindowIcon(QIcon("limi.jpg"))
    def paintEvent(self, event):
        # 初始化繪圖工具
        qp = QPainter()
        qp.begin(self)
        # 自定義畫點方法
        self.drawPoints(qp)
        qp.end()

    def drawPoints(self, qp):
        qp.setPen(Qt.red)
        size = self.size()#判斷當前窗口大小

        for i in range(1000):
            # 繪製正弦圖形,週期 [-1000,1000]
            x = 100 * (- 1 + 2.0 * i / 1000) + size.width() / 2.0
            y = -50 * math.sin((x - size.width() / 2.0) * math.pi / 50) + size.height() / 2.0
            qp.drawPoint(x, y)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = Drawing()
    win.show()
    sys.exit(app.exec_())

二、QPen

QPen(鋼筆)是基本圖形對象,用於繪製直線、曲線或者給輪廓畫出矩形、橢圓形、多邊形以及其餘形狀等工具

import sys 
from PyQt5.QtWidgets import *  
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt 

class Drawing(QWidget):
	def __init__(self):
		super().__init__()
		self.initUI()

	def initUI(self):   
		self.setGeometry(300, 300, 280, 270)
		self.setWindowTitle('鋼筆樣式例子')        

	def paintEvent(self, e): 
		qp = QPainter()
		qp.begin(self)
		self.drawLines(qp)
		qp.end()

	def drawLines(self, qp):
		pen = QPen(Qt.black, 2, Qt.SolidLine)

		qp.setPen(pen)
		qp.drawLine(20, 40, 250, 40)

		pen.setStyle(Qt.DashLine)
		qp.setPen(pen)
		qp.drawLine(20, 80, 250, 80)

		pen.setStyle(Qt.DashDotLine)
		qp.setPen(pen)
		qp.drawLine(20, 120, 250, 120)

		pen.setStyle(Qt.DotLine)
		qp.setPen(pen)
		qp.drawLine(20, 160, 250, 160)

		pen.setStyle(Qt.DashDotDotLine)
		qp.setPen(pen)
		qp.drawLine(20, 200, 250, 200)

		pen.setStyle(Qt.CustomDashLine)
		pen.setDashPattern([1, 4, 5, 4])
		qp.setPen(pen)
		qp.drawLine(20, 240, 250, 240)

if __name__ == '__main__':
	app = QApplication(sys.argv)
	demo = Drawing()
	demo.show()
	sys.exit(app.exec_())

三、QBrush

QBrush(畫刷),用於填充如矩形、橢圓形或多邊形等形狀。
QBrush 有三種類型:預約義、過渡和紋理圖案。
學習

# -*- coding: utf-8 -*-
 
""" 【簡介】 繪圖中QBrush 的例子 ,繪製九個不一樣樣式的矩形。 """

import sys 
from PyQt5.QtWidgets import *  
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt 

class Drawing(QWidget): 
	def __init__(self):
		super().__init__()  
		self.initUI()

	def initUI(self):   
		self.setGeometry(300, 300, 365, 280)
		self.setWindowTitle('畫刷例子')        
		self.show()

	def paintEvent(self, e): 
		qp = QPainter()
		qp.begin(self)
		self.drawLines(qp)
		qp.end()

	def drawLines(self, qp): 
		brush = QBrush(Qt.SolidPattern)
		qp.setBrush(brush)
		qp.drawRect(10, 15, 90, 60)

		brush = QBrush(Qt.Dense1Pattern)
		qp.setBrush(brush)
		qp.drawRect(130, 15, 90, 60)

		brush = QBrush(Qt.Dense2Pattern)
		qp.setBrush(brush)
		qp.drawRect(250, 15, 90, 60)

		brush = QBrush(Qt.Dense3Pattern)
		qp.setBrush(brush)
		qp.drawRect(10, 105, 90, 60)

		brush = QBrush(Qt.DiagCrossPattern)
		qp.setBrush(brush)
		qp.drawRect(10, 105, 90, 60)

		brush = QBrush(Qt.Dense5Pattern)
		qp.setBrush(brush)
		qp.drawRect(130, 105, 90, 60)

		brush = QBrush(Qt.Dense6Pattern)
		qp.setBrush(brush)
		qp.drawRect(250, 105, 90, 60)

		brush = QBrush(Qt.HorPattern)
		qp.setBrush(brush)
		qp.drawRect(10, 195, 90, 60)

		brush = QBrush(Qt.VerPattern)
		qp.setBrush(brush)
		qp.drawRect(130, 195, 90, 60)

		brush = QBrush(Qt.BDiagPattern)
		qp.setBrush(brush)
		qp.drawRect(250, 195, 90, 60)
                         		
if __name__ == '__main__':
	app = QApplication(sys.argv)
	demo = Drawing()
	demo.show()
	sys.exit(app.exec_())

四、QPixmap

QPixmap 類用於繪圖設備的圖像顯示,可做爲一個 QPaintDevice 對象,也能夠加載到一個控件中。
QPixmap 能夠讀取的圖像文件類型有:BMP、GIF、JPG、JPEG、PNG、PBM、PGM、PPM、XBM、XPM 等。
QPixmap 類的經常使用方法以下:

字體

方法 描述
copy() 從 QRect 對象複製到 QPixmap 對象
fromIamge() 將 QImage 對象轉換爲 QPixmap 對象
grabWidget() 從給定的窗口小控件建立一個像素圖
grabWindow() 在窗口中建立數據的像素圖
load() 加載圖像文件做爲 QPixmap 對象
save() 將 QPixmap 對象保存爲文件
toImage() 將 QPixmap 對象轉換爲 QImage 對象
# -*- coding: utf-8 -*-

''' 【簡介】 PyQt5中 QPixmap 例子 '''

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

if __name__ == '__main__':
	app = QApplication(sys.argv)
	win = QWidget()
	lab1 = QLabel()
	lab1.setPixmap(QPixmap("D:\機器學習\學習草稿\duoren.jpg"))
	vbox=QVBoxLayout()
	vbox.addWidget(lab1)
	win.setLayout(vbox)
	win.setWindowTitle("QPixmap 例子")
	win.show()
	sys.exit(app.exec_())

這篇博文內容來源於書籍《pyqt5快速開發與實戰》
我只是記錄下有用的信息,方便之後複習查找。
否則學的東西又忘啦。

ui

電氣專業的計算機萌新,寫博文不容易。若是你以爲本文對你有用,請點個贊支持下,謝謝。
在這裏插入圖片描述
spa

在這裏插入圖片描述

相關文章
相關標籤/搜索