引言
圖形與圖像繪制支持是一個GUI框架庫的核心模塊之一,從Java的Graphics2D到Android的Canvas類支持到PyQT5中的QPainter類支持與圖元支持,都很好的滿足了GUI庫的圖形繪制與渲染需求。
QPainter類介紹
QPainter類是PyQT5中圖形繪制類,支持圓、橢圓、矩形、圓角矩形、線段、文本、圖像、多邊形、弧形等常見幾何形狀的繪制與填充,支持顏色、旋轉(zhuǎn)、狀態(tài)復(fù)位、平移、錯切等設(shè)置操作。所有的QWidget類都繼承了paintEvent方法,繪制代碼都應(yīng)該在paintEvent方法中完成執(zhí)行。一個典型的paintEvent方法繪制代碼如下:
def paintEvent(self, paintEvent): painter = QPainter(self) painter.setPen(Qt.blue) painter.setFont(QFont("Arial", 30)) painter.drawText(rect(), Qt.AlignCenter, "OpenCV學(xué)堂")上述代碼首先獲取畫筆,然后設(shè)置顏色與字體,最后繪制文本。通過用戶創(chuàng)建Painter實例的方式繪制,繪制結(jié)束之后需要顯式銷毀,通過系統(tǒng)的painter繪制則無需這樣,對比如下: 用戶創(chuàng)建繪制
def paintEvent(self, paintEvent): p = QPainter() p.begin(self) p.drawLine(...) # drawing code p.end()
調(diào)用系統(tǒng)繪制
def paintEvent(self, paintEvent): p = QPainter(self) p.drawLine(...) # drawing code所有繪制的函數(shù)支持都是draw開頭,所有填充的函數(shù)都是fill開頭,什么繪制與填充,請看下圖:
綜合代碼演示
代碼實現(xiàn)了繪制與填充不同的幾何形狀,支持不同顏色設(shè)置,線寬設(shè)置,風(fēng)格設(shè)置等。運行結(jié)果如下圖:
添加上顯示圖像功能之后如下:
相關(guān)自定義繪制類代碼如下:
1fromPyQt5importQtWidgets 2fromPyQt5importQtGui 3fromPyQt5importQtCore 4importsys 5 6 7classMyCustomCanvas(QtWidgets.QWidget): 8def__init__(self): 9super().__init__() 10print("createmycustomcanvas") 11 12defpaintEvent(self,event): 13painter=QtGui.QPainter(self) 14#設(shè)置為反鋸齒 15painter.setRenderHint(QtGui.QPainter.Antialiasing) 16 17#填充黑色背景 18painter.fillRect(self.rect(),QtCore.Qt.black) 19 20#繪制圖像 21pic=QtGui.QPixmap("test3.png") 22painter.drawPixmap(self.rect(),pic) 23 24#設(shè)置字體與顏色,繪制文本 25pen=QtGui.QPen(QtCore.Qt.green,5,QtCore.Qt.DashLine) 26painter.setPen(pen) 27font=QtGui.QFont() 28font.setBold(True) 29font.setPointSizeF(24) 30painter.setFont(font) 31painter.drawText(QtCore.QPoint(20,50),"OpenCV學(xué)堂") 32 33#5表示線寬 34pen=QtGui.QPen(QtCore.Qt.red,5,QtCore.Qt.DashLine) 35painter.setPen(pen) 36painter.drawLine(50,100,50,400) 37 38#繪制矩形 39pen=QtGui.QPen(QtCore.Qt.yellow,5,QtCore.Qt.DotLine) 40painter.setPen(pen) 41painter.drawRect(QtCore.QRect(100,100,200,200)) 42painter.fillRect(100,100,200,200,QtCore.Qt.green) 43 44#繪制圓 45pen=QtGui.QPen(QtCore.Qt.red,5,QtCore.Qt.DotLine) 46painter.setPen(pen) 47 48#設(shè)置為填充模式 49painter.setBrush(QtGui.QBrush(QtCore.Qt.yellow,QtCore.Qt.SolidPattern)) 50 51#直接繪制 52painter.drawEllipse(QtCore.QRect(300,300,150,150)) 53 54#貝塞爾曲線 55painter.setBrush(QtGui.QBrush(QtCore.Qt.red,QtCore.Qt.SolidPattern)) 56self.drawBezierCurve(painter) 57 58defdrawBezierCurve(self,qp): 59path=QtGui.QPainterPath() 60path.moveTo(450,100) 61path.cubicTo(450,100,550,200,450,350) 62qp.drawPath(path)
審核編輯:劉清
-
JAVA
+關(guān)注
關(guān)注
19文章
2969瀏覽量
104789 -
GUI
+關(guān)注
關(guān)注
3文章
660瀏覽量
39703 -
pyqt5
+關(guān)注
關(guān)注
0文章
25瀏覽量
3403
原文標(biāo)題:PyQT5開發(fā)之自定義QWegdit實現(xiàn)圖形繪制
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論