日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python PyQt5中文教程☞【第十节】PyQt5绘图(绘制文本drawText()、画点drawPoints()、设置颜色、QPen(画笔)绘制线条、QBrush(笔刷)绘制纹理

發布時間:2025/3/20 python 44 豆豆

引用文章:http://code.py40.com/pyqt5/32.html

文章目錄

    • 繪制文本
    • 畫點
    • PyQt5顏色
    • QPen(畫筆)
    • QBrush(筆刷)

  • 總結:一發現有事件觸發就會更新QWidget對象

PyQt5繪畫系統能夠呈現矢量圖形,圖像,和大綱font-based文本。我們也可以在程序中調用系統api自定義繪圖控件。

繪圖要在paintEvent()方法中實現。在QPainter對象的begin()與end()方法間編寫繪圖代碼。它會在控件或其他圖形設備上進行低級的圖形繪制。

繪制文本

我們先以窗體內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)# 設置繪制框的名字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 創建類ex = Example()# Dontla 20200411 進入主事件循環并等待直到調用exit()為止,然后退出(主事件循環可能指所有擁有某事件屬性的對象,如繼承QWidget的Example類)sys.exit(app.exec_())

結果:

在我們的示例中,我們繪制一些Cylliric文本。文本垂直和水平對齊。

繪制工作在paintEvent的方法內部完成。

QPainter類負責所有的初級繪制。所有繪畫方法在begin()和end()方法之間。實際的繪畫被委托給drawText()方法。

setPen()和setFont()方法用于定義一個畫筆和一個字體用于繪制文本。

qb.drawText()方法將文本繪制在窗體,顯示在中心

畫點

點是可以繪制的最簡單的圖形對象。
下面例子中我們在窗體隨機繪制1000個紅點

# -*- coding: utf-8 -*- """ @File : PyQt5_畫點.py @Time : 2020/4/11 15:42 @Author : Dontla @Email : sxana@qq.com @Software: PyCharm """ import random 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, 170)self.setWindowTitle('Points')self.show()def paintEvent(self, e):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):# 產生隨機數,包括頭和尾x = random.randint(0, size.width() - 1)y = random.randint(0, size.height() - 1)qp.drawPoint(x, y)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())

qp.setPen(Qt.red)設置畫筆為紅色,我們使用了預定義的Qt.red常量

size = self.size()每次我們改變窗口的大小,生成一個 paint event 事件。我們得到的當前窗口的大小size。我們使用窗口的大小來分配點在窗口的客戶區(實時更新窗口大小?)

qp.drawPoint(x, y)通過drawpoint繪制圓點

PyQt5顏色

顏色是一個對象代表紅、綠、藍(RGB)強度值。有效的RGB值的范圍從0到255。我們可以用不同的方法定義了一個顏色。最常見的是RGB十進制或十六進制值的值。我們也可以使用一個RGBA值代表紅色,綠色,藍色,透明度。我們添加一些額外的信息透明度。透明度值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) # 貌似這是初始化創建的col的顏色(255, 182, 193)是粉色# col.setNamedColor('#FFB6C1') # 彩色矩形框的邊框顏色(感覺跟初始化有點重復了)qp.setPen(col) # 如果不執行這句就不會修改之后繪制圖行邊框的顏色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_())

結果:

我們為QPainter設置了一個筆刷(Bursh)對象并用它繪制了一個矩形。筆刷是用于繪制形狀背景的基本圖形對象。drawRect()方法接受四個參數,前兩個是起點的x,y坐標,后兩個是矩形的寬和高。這個方法使用當前的畫筆與筆刷對象進行繪制。

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):# 我們創建一個QPen對象。顏色是黑色的。寬度設置為2像素,這樣我們可以看到筆風格之間的差異。Qt.SolidLine是預定義的鋼筆樣式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)# 這里我們定義了一個畫筆風格。# 我們設置了Qt.CustomDashLine并調用了setDashPattern()方法,它的參數(一個數字列表)定義了一種風格,必須有偶數個數字;# 其中奇數表示繪制實線,偶數表示留空。數值越大,直線或空白就越大。這里我們定義了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_())

結果:

示例中我們畫六行。線條勾勒出了六個不同的筆風格。有五個預定義的鋼筆樣式。我們也可以創建自定義的鋼筆樣式。最后一行使用一個定制的鋼筆繪制風格。

QBrush(筆刷)

QBrush是一個基本的圖形對象。它用于油漆的背景圖形形狀,如矩形、橢圓形或多邊形。三種不同類型的刷可以:一個預定義的刷,一個梯度,或紋理模式。

This example draws 9 rectangles in different
brush styles.

# -*- coding: utf-8 -*- """ @File : PyQt5_QBrush(筆刷).py @Time : 2020/4/13 11:32 @Author : Dontla @Email : sxana@qq.com @Software: PyCharm """ import sys from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QBrush from PyQt5.QtCore import Qtclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 355, 280)self.setWindowTitle('Brushes')self.show()def paintEvent(self, e):qp = QPainter()qp.begin(self)self.drawBrushes(qp)qp.end()def drawBrushes(self, qp):brush = QBrush(Qt.SolidPattern)qp.setBrush(brush)qp.drawRect(10, 15, 90, 60)brush.setStyle(Qt.Dense1Pattern)qp.setBrush(brush)qp.drawRect(130, 15, 90, 60)brush.setStyle(Qt.Dense2Pattern)qp.setBrush(brush)qp.drawRect(250, 15, 90, 60)brush.setStyle(Qt.DiagCrossPattern)qp.setBrush(brush)qp.drawRect(10, 105, 90, 60)brush.setStyle(Qt.Dense5Pattern)qp.setBrush(brush)qp.drawRect(130, 105, 90, 60)brush.setStyle(Qt.Dense6Pattern)qp.setBrush(brush)qp.drawRect(250, 105, 90, 60)brush.setStyle(Qt.HorPattern)qp.setBrush(brush)qp.drawRect(10, 195, 90, 60)brush.setStyle(Qt.VerPattern)qp.setBrush(brush)qp.drawRect(130, 195, 90, 60)brush.setStyle(Qt.BDiagPattern)qp.setBrush(brush)qp.drawRect(250, 195, 90, 60)if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())

示例中繪制九個不同的矩形

結果:

我們定義了一個筆刷對象,然后將它設置給QPainter對象,并調用painter的drawRect()方法繪制矩形。

總結

以上是生活随笔為你收集整理的python PyQt5中文教程☞【第十节】PyQt5绘图(绘制文本drawText()、画点drawPoints()、设置颜色、QPen(画笔)绘制线条、QBrush(笔刷)绘制纹理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。