python PyQt5中文教程☞【第十节】PyQt5绘图(绘制文本drawText()、画点drawPoints()、设置颜色、QPen(画笔)绘制线条、QBrush(笔刷)绘制纹理
引用文章:http://code.py40.com/pyqt5/32.html
文章目錄
- 繪制文本
- 畫點
- PyQt5顏色
- QPen(畫筆)
- QBrush(筆刷)
- 總結(jié):一發(fā)現(xiàn)有事件觸發(fā)就會更新QWidget對象
PyQt5繪畫系統(tǒng)能夠呈現(xiàn)矢量圖形,圖像,和大綱font-based文本。我們也可以在程序中調(diào)用系統(tǒng)api自定義繪圖控件。
繪圖要在paintEvent()方法中實現(xiàn)。在QPainter對象的begin()與end()方法間編寫繪圖代碼。它會在控件或其他圖形設(shè)備上進(jìn)行低級的圖形繪制。
繪制文本
我們先以窗體內(nèi)Unicode文本的繪制為例。繪制一個俄羅斯文字的文本
# -*- coding: utf-8 -*- """ @File : PyQt5_繪制文本.py @Time : 2020/4/11 10:28 @Author : Dontla @Email : sxana@qq.com @Software: PyCharm """ # -*- coding: utf-8 -*-import sys from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QColor, QFont from PyQt5.QtCore import Qt# Dontla 20200411 繼承了QWidget的一個類 class Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.text = u'\u041b\u0435\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\ \u0435\u0432\u0438\u0447 \u0422\u043e\u043b\u0441\u0442\u043e\u0439: \n\ \u0410\u043d\u043d\u0430 \u041a\u0430\u0440\u0435\u043d\u0438\u043d\u0430'# 繪制的位置與框的寬高self.setGeometry(300, 300, 280, 170)# 設(shè)置繪制框的名字self.setWindowTitle('Draw text')# 顯示繪制的框self.show()def paintEvent(self, event):qp = QPainter()qp.begin(self)self.drawText(event, qp)qp.end()def drawText(self, event, qp):qp.setPen(QColor(168, 34, 3))qp.setFont(QFont('Decorative', 10))qp.drawText(event.rect(), Qt.AlignCenter, self.text)if __name__ == '__main__':# Dontla 20200411 必須的app = QApplication(sys.argv)# Dontla 20200411 創(chuàng)建類ex = Example()# Dontla 20200411 進(jìn)入主事件循環(huán)并等待直到調(diào)用exit()為止,然后退出(主事件循環(huán)可能指所有擁有某事件屬性的對象,如繼承QWidget的Example類)sys.exit(app.exec_())結(jié)果:
在我們的示例中,我們繪制一些Cylliric文本。文本垂直和水平對齊。
繪制工作在paintEvent的方法內(nèi)部完成。
QPainter類負(fù)責(zé)所有的初級繪制。所有繪畫方法在begin()和end()方法之間。實際的繪畫被委托給drawText()方法。
setPen()和setFont()方法用于定義一個畫筆和一個字體用于繪制文本。
qb.drawText()方法將文本繪制在窗體,顯示在中心
畫點
點是可以繪制的最簡單的圖形對象。
下面例子中我們在窗體隨機繪制1000個紅點
qp.setPen(Qt.red)設(shè)置畫筆為紅色,我們使用了預(yù)定義的Qt.red常量
size = self.size()每次我們改變窗口的大小,生成一個 paint event 事件。我們得到的當(dāng)前窗口的大小size。我們使用窗口的大小來分配點在窗口的客戶區(qū)(實時更新窗口大小?)
qp.drawPoint(x, y)通過drawpoint繪制圓點
PyQt5顏色
顏色是一個對象代表紅、綠、藍(lán)(RGB)強度值。有效的RGB值的范圍從0到255。我們可以用不同的方法定義了一個顏色。最常見的是RGB十進(jìn)制或十六進(jìn)制值的值。我們也可以使用一個RGBA值代表紅色,綠色,藍(lán)色,透明度。我們添加一些額外的信息透明度。透明度值255定義了完全不透明,0是完全透明的,例如顏色是無形的。
# -*- coding: utf-8 -*- """ @File : PyQt5_顏色.py @Time : 2020/4/13 9:05 @Author : Dontla @Email : sxana@qq.com @Software: PyCharm """ import sys from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QColor, QBrushclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 350, 100)self.setWindowTitle('Colours')self.show()def paintEvent(self, e):qp = QPainter()qp.begin(self)self.drawRectangles(qp)qp.end()def drawRectangles(self, qp):col = QColor(255, 182, 193) # 貌似這是初始化創(chuàng)建的col的顏色(255, 182, 193)是粉色# col.setNamedColor('#FFB6C1') # 彩色矩形框的邊框顏色(感覺跟初始化有點重復(fù)了)qp.setPen(col) # 如果不執(zhí)行這句就不會修改之后繪制圖行邊框的顏色qp.setBrush(QColor(200, 0, 0))qp.drawRect(10, 15, 90, 60)qp.setBrush(QColor(255, 80, 0, 160))qp.drawRect(130, 15, 90, 60)qp.setBrush(QColor(25, 0, 90, 200))qp.drawRect(250, 15, 90, 60)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())結(jié)果:
我們?yōu)镼Painter設(shè)置了一個筆刷(Bursh)對象并用它繪制了一個矩形。筆刷是用于繪制形狀背景的基本圖形對象。drawRect()方法接受四個參數(shù),前兩個是起點的x,y坐標(biāo),后兩個是矩形的寬和高。這個方法使用當(dāng)前的畫筆與筆刷對象進(jìn)行繪制。
QPen(畫筆)
QPen是一個基本的圖形對象。用于繪制線條、曲線和輪廓的矩形、橢圓、多邊形或其他形狀。
# -*- coding: utf-8 -*- """ @File : PyQt5_QPen(畫筆).py @Time : 2020/4/13 10:35 @Author : Dontla @Email : sxana@qq.com @Software: PyCharm """import sys from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QColor, QPen from PyQt5.QtCore import Qtclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 280, 270)self.setWindowTitle('Pen styles')self.show()def paintEvent(self, e):qp = QPainter()qp.begin(self)self.drawLines(qp)qp.end()def drawLines(self, qp):# 我們創(chuàng)建一個QPen對象。顏色是黑色的。寬度設(shè)置為2像素,這樣我們可以看到筆風(fēng)格之間的差異。Qt.SolidLine是預(yù)定義的鋼筆樣式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)# 這里我們定義了一個畫筆風(fēng)格。# 我們設(shè)置了Qt.CustomDashLine并調(diào)用了setDashPattern()方法,它的參數(shù)(一個數(shù)字列表)定義了一種風(fēng)格,必須有偶數(shù)個數(shù)字;# 其中奇數(shù)表示繪制實線,偶數(shù)表示留空。數(shù)值越大,直線或空白就越大。這里我們定義了1像素的實線,4像素的空白,5像素實線,4像素空白。。。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)ex = Example()sys.exit(app.exec_())結(jié)果:
示例中我們畫六行。線條勾勒出了六個不同的筆風(fēng)格。有五個預(yù)定義的鋼筆樣式。我們也可以創(chuàng)建自定義的鋼筆樣式。最后一行使用一個定制的鋼筆繪制風(fēng)格。
QBrush(筆刷)
QBrush是一個基本的圖形對象。它用于油漆的背景圖形形狀,如矩形、橢圓形或多邊形。三種不同類型的刷可以:一個預(yù)定義的刷,一個梯度,或紋理模式。
This example draws 9 rectangles in different
brush styles.
示例中繪制九個不同的矩形
結(jié)果:
我們定義了一個筆刷對象,然后將它設(shè)置給QPainter對象,并調(diào)用painter的drawRect()方法繪制矩形。
總結(jié)
以上是生活随笔為你收集整理的python PyQt5中文教程☞【第十节】PyQt5绘图(绘制文本drawText()、画点drawPoints()、设置颜色、QPen(画笔)绘制线条、QBrush(笔刷)绘制纹理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python PyQt5 QtCore.
- 下一篇: pycharm调试过程中出现跳过某行的现