当我们想要改变或者增强已存在的窗口组件时,或者准备从零开始创建自定义窗口组件时,可以使用绘图。我们通过使用PyQt4工具包提供的绘图API来绘图。
绘图在 paintEvent() 方法中进行。绘制代码在 QPainter 对象的 begin() 和 end() 之间。
绘制文本
我们从在窗口客户区绘制一些Unicode文本开始。
#!/usr/bin/python
# -*- coding: utf-8 -*-
# drawtext.py
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
    def initUI(self):
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle(‘Draw Text‘)
        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‘
    def paintEvent(self, event):
        qp = QtGui.QPainter()
        qp.begin(self)
        self.drawText(event, qp)
        qp.end()
    def drawText(self, event, qp):
        qp.setPen(QtGui.QColor(168, 34, 3))
        qp.setFont(QtGui.QFont(‘Decorative‘, 10))
        qp.drawText(event.rect(), QtCore.Qt.AlignCenter, self.text)
app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
app.exec_()
在我们的例子中,我们绘制一些西里尔字母的文本,文正水平和垂直居中对齐。
def paintEvent(self, event):
在绘制事件中绘画。
qp = QtGui.QPainter()
qp.begin(self)
self.drawText(event, qp)
qp.end()
QPainter 类负责所有的低级绘画。所有的绘制方法都在 begin() 和 end() 方法之间。这里实际的绘制是代理给了 drawText() 方法。
paint.setPen(QtGui.QColor(168, 34, 3))
paint.setFont(QtGui.QFont(‘Decorative‘, 10))
这里我们定义了画笔和字体,用来绘制文本。
paint.drawText(event.rect(), QtCore.Qt.AlignCenter, self.text)
drawText() 方法在窗口上绘制文本, 绘制事件的 rect() 方法返回需要更新的矩形。
绘制点
点是可以绘制的最简单的图形对象,是窗口上的很小的一个区域。
#!/usr/bin/python
# -*- coding: utf-8 -*-
# points.py
import sys, random
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle(‘Points‘)
    def paintEvent(self, e):
        qp = QtGui.QPainter()
        qp.begin(self)
        self.drawPoints(qp)
        qp.end()
    def drawPoints(self, qp):
        qp.setPen(QtCore.Qt.red)
        size = self.size()
        for i in range(1000):
            x = random.randint(1, size.width()-1)
            y = random.randint(1, size.height()-1)
            qp.drawPoint(x, y)
app = QtGui.QApplication(sys.argv)
ex = Example()
ex.show()
app.exec_()
在这个例子中,我们在客户区随机地绘制1000个红点。
paint.setPen(QtCore.Qt.red)
使用预定义的颜色常量,把画笔设为红色。
size = self.size()
每次我们缩放窗口,都将产生绘制事件。通过 size() 方法得到窗口的尺寸,使用窗口尺寸来把点分布到窗口的客户区。
paint.drawPoint(x, y)
使用 drawPoint() 方法绘制点。
 
 
本站文章为 宝宝巴士 SD.Team 原创,转载务必在明显处注明:(作者官方网站: 宝宝巴士 ) 
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4593894.html
原文:http://www.cnblogs.com/superdo/p/4593894.html