窗口繪圖類控件
創(chuàng)新互聯(lián)公司為企業(yè)級(jí)客戶提高一站式互聯(lián)網(wǎng)+設(shè)計(jì)服務(wù),主要包括成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、app軟件定制開發(fā)、小程序設(shè)計(jì)、宣傳片制作、LOGO設(shè)計(jì)等,幫助客戶快速提升營(yíng)銷能力和企業(yè)形象,創(chuàng)新互聯(lián)各部門都有經(jīng)驗(yàn)豐富的經(jīng)驗(yàn),可以確保每一個(gè)作品的質(zhì)量和創(chuàng)作周期,同時(shí)每年都有很多新員工加入,為我們帶來大量新的創(chuàng)意。
在PyQt5中,一般可以通過QPainter、QPen和QBrush這三個(gè)類來實(shí)現(xiàn)繪圖的功能。
QPainter
QPainter類在QWidget上執(zhí)行繪圖操作,它是一個(gè)繪制工具,為大部分圖形界面提供了高度優(yōu)化的函數(shù),是QPainter類可以繪制從簡(jiǎn)單的直線到復(fù)雜的餅圖。
繪制操作在QWidget.painEvent()中完成,繪制方法必須放在QtGui.QPainter對(duì)象的begin()和end()之間。QPainter類在控件或其他繪圖設(shè)備上執(zhí)行較低級(jí)別的圖形繪制功能。
方法
方法 描述
begin() 開始在目標(biāo)設(shè)備上繪制
drawArc() 在起始角度和最終角度之間畫弧
drawEllipse() 在一個(gè)矩形內(nèi)畫一個(gè)橢圓
drawLine(int x1,int y1,int x2,int y2) 繪制一條指定了端點(diǎn)坐標(biāo)的線。
drawPixmap() 從圖像文件中提取Pixmap并將其顯示在指定的位置
drawPolygon() 使用坐標(biāo)數(shù)組繪制多邊形
drawReact() 給定寬度w和高度h從左上角(x,y)繪制一個(gè)矩形
drawText() 顯示給定坐標(biāo)處的文字
fillRect() 使用QColor參數(shù)填充矩形
setBrush() 設(shè)置畫筆風(fēng)格
setPen() 設(shè)置用于繪制的筆的顏色、大小和樣式
還可以設(shè)置畫筆風(fēng)格(PenStyle),這是一個(gè)枚舉類,可以由QPainter類繪制。
枚舉類型 描述
Qt.NoPen 沒有線,比如QPainter.drawRect()填充,但沒有繪制任何邊界線
Qt.SolidLine 一個(gè)簡(jiǎn)單的線
Qt.DashLine 由一些像素分隔的短線
Qt.DotLine 由一些像素分割點(diǎn)
Qt.DashDotLine 輪流交替的點(diǎn)和短線
Qt.DashDotDotLine 一個(gè)短線、兩個(gè)點(diǎn)
Qt.MPenStyle 畫筆風(fēng)格的掩碼
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QColor, QFont
from PyQt5.QtCore import Qt
class Drawing(QWidget):
def __init__(self, parent = None):
super(Drawing, self).__init__(parent)
self.setWindowTitle("在窗口中繪制文字")
self.resize(300,200)
self.text = '歡迎學(xué)習(xí) 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_())
# -*- coding: utf-8 -*-
import sys, math
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.resize(300,200)
self.setWindowTitle("在窗口中畫點(diǎn)")
def paintEvent(self, event):
qp = QPainter(self)
qp.begin(self)
self.drawPoints(qp)
qp.end()
def drawPoints(self,qp):
qp.setPen(Qt.red)
size = self.size()
for i in range(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)
demo = Drawing()
demo.show()
sys.exit(app.exec_())
QPen
QPen是一個(gè)基本的圖形對(duì)象,用于繪制直線、曲線或者輪廓畫出矩形、橢圓形、多邊形以及其他形狀。
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Drawing(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300,300,280,270)
self.setWindowTitle("鋼筆樣式例子")
def paintEvent(self, QPaintEvent):
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_())
使用Qt.CustomDashLine創(chuàng)建線條樣式,然后調(diào)用setDashPattern()方法使用數(shù)字列表定義樣式,數(shù)字列表的個(gè)數(shù)必須是偶數(shù),在本例中數(shù)字列表[1,4,5,4]它的個(gè)數(shù)是4,奇數(shù)位代表一段橫線,偶數(shù)為代表兩端橫線之間的空余距離。
QBrush
QBrush是一個(gè)基本的圖形對(duì)象,用于填充如矩形、橢圓形或多邊形等形狀。QBrush有三種類型:預(yù)定義、過渡和紋理圖案。 無錫看婦科的醫(yī)院 http://www.ytsgfk120.com/
# -*- coding: utf-8 -*-
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, QPaintEvent):
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類用于繪圖設(shè)備的圖像顯示,可以作為一個(gè)QPaintDevice對(duì)象,也可以加載到一個(gè)控件中,通常是標(biāo)簽或者按鈕,用于在標(biāo)簽或按鈕上顯示圖像。
QPixmap可以讀取的圖像文件類型有BMP、GIF、JPG、JPEG、PNG、PBM、PGM、PPM、XBM、XPM等。
常用的方法
方法 描述
copy() 從QRect對(duì)象復(fù)制到QPixmap對(duì)象
fromImage() 將QImage對(duì)象轉(zhuǎn)換為QPixmap對(duì)象
gradWidget() 從給定的窗口小控件創(chuàng)建一個(gè)像素圖
load() 加載圖像文件作為QPixmap對(duì)象
save() 將QPixmap對(duì)象保存為文件
toImage() 將QPixmap對(duì)象轉(zhuǎn)換為QImage對(duì)象
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
if __name__ == '__main__':
app = QApplication(sys.argv)
win = QWidget()
labl = QLabel()
labl.setPixmap(QPixmap("./images/python.jpg"))
vbox = QVBoxLayout()
vbox.addWidget(labl)
win.setLayout(vbox)
win.setWindowTitle("QPixmap例子")
win.show()
sys.exit(app.exec_())
標(biāo)題名稱:PyQt5——窗口繪圖類控件
文章轉(zhuǎn)載:http://www.rwnh.cn/article12/jipcgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、網(wǎng)站營(yíng)銷、外貿(mào)建站、靜態(tài)網(wǎng)站、用戶體驗(yàn)、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)