引言
圖形與圖像繪制支持是一個GUI框架庫的核心模塊之一,從Java的Graphics2D到Android的Canvas類支持到PyQT5中的QPainter類支持與圖元支持,都很好的滿足了GUI庫的圖形繪制與渲染需求。
QPainter類介紹
QPainter類是PyQT5中圖形繪制類,支持圓、橢圓、矩形、圓角矩形、線段、文本、圖像、多邊形、弧形等常見幾何形狀的繪制與填充,支持顏色、旋轉、狀態復位、平移、錯切等設置操作。所有的QWidget類都繼承了paintEvent方法,繪制代碼都應該在paintEvent方法中完成執行。一個典型的paintEvent方法繪制代碼如下:
def paintEvent(self, paintEvent): painter = QPainter(self) painter.setPen(Qt.blue) painter.setFont(QFont("Arial", 30)) painter.drawText(rect(), Qt.AlignCenter, "OpenCV學堂")上述代碼首先獲取畫筆,然后設置顏色與字體,最后繪制文本。通過用戶創建Painter實例的方式繪制,繪制結束之后需要顯式銷毀,通過系統的painter繪制則無需這樣,對比如下: 用戶創建繪制
def paintEvent(self, paintEvent): p = QPainter() p.begin(self) p.drawLine(...) # drawing code p.end()
調用系統繪制
def paintEvent(self, paintEvent): p = QPainter(self) p.drawLine(...) # drawing code所有繪制的函數支持都是draw開頭,所有填充的函數都是fill開頭,什么繪制與填充,請看下圖:
綜合代碼演示
代碼實現了繪制與填充不同的幾何形狀,支持不同顏色設置,線寬設置,風格設置等。運行結果如下圖:
添加上顯示圖像功能之后如下:
相關自定義繪制類代碼如下:
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#設置為反鋸齒 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#設置字體與顏色,繪制文本 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學堂") 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#設置為填充模式 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
+關注
關注
19文章
2960瀏覽量
104565 -
GUI
+關注
關注
3文章
650瀏覽量
39553 -
pyqt5
+關注
關注
0文章
25瀏覽量
3394
原文標題:PyQT5開發之自定義QWegdit實現圖形繪制
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論