Search
Write a publication
Pull to refresh

PyQt4 — простейшее рисование

Отрисовка текста


#!/usr/bin/python

# drawtext.py

import sys
from PyQt4 import QtGui, QtCore

class DrawText(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)

self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Draw Text')

self.text = u'Hello from Python'

def paintEvent(self, event):
paint = QtGui.QPainter()
paint.begin(self)
paint.setPen(QtGui.QColor(168, 34, 3))
paint.setFont(QtGui.QFont('Decorative', 10))
paint.drawText(event.rect(), QtCore.Qt.AlignCenter, self.text)
paint.end()

app = QtGui.QApplication(sys.argv)
dt = DrawText()
dt.show()
app.exec_()


Текст выровнен по вертикали и горизонтали.

def paintEvent(self, event):
Для прорисовки создали функцию

paint = QtGui.QPainter()
paint.begin(self)
...
paint.end()

Класс QPainter отвечает за всю прорисовку. Все рисование должно быть между методами begin() и end().

paint.setPen(QtGui.QColor(168, 34, 3))
paint.setFont(QtGui.QFont('Decorative', 10))

Здесь мы определяем тип пера и шрифт, который мы используем, чтобы сделать текст.

paint.drawText(event.rect(), QtCore.Qt.AlignCenter, self.text)
Метод drawText() рисует текст в окне
image

Рисование точек


#!/usr/bin/python

# points.py

import sys, random
from PyQt4 import QtGui, QtCore

class Points(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)

self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Points')

def paintEvent(self, event):
paint = QtGui.QPainter()
paint.begin(self)
paint.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)
paint.drawPoint(x, y)
paint.end()

app = QtGui.QApplication(sys.argv)
dt = Points()
dt.show()
app.exec_()

В нашем примере мы рисуем случайно 1000 красных точек.

paint.setPen(QtCore.Qt.red)
Устанавливаем перо в красный цвет

size = self.size()
Генерируется каждый раз, когда мы изменяем размер окна

paint.drawPoint(x, y)
Рисуем точки методом drawPoint()
image

Цвета


Цвета мы можем задать в виде значения RGB (в диапозоне от 0 до 255), в шестнадцатеричной системе, ну или же в RGBA (red, green, blue, alpha). Значение alpha 255 определяет полную не прозрачность, 0 для полной прозрачности.

#!/usr/bin/python

# colors.py

import sys, random
from PyQt4 import QtGui, QtCore

class Colors(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)

self.setGeometry(300, 300, 350, 280)
self.setWindowTitle('Colors')

def paintEvent(self, event):
paint = QtGui.QPainter()
paint.begin(self)

color = QtGui.QColor(0, 0, 0)
color.setNamedColor('#d4d4d4')
paint.setPen(color)

paint.setBrush(QtGui.QColor(255, 0, 0, 80))
paint.drawRect(10, 15, 90, 60)

paint.setBrush(QtGui.QColor(255, 0, 0, 160))
paint.drawRect(130, 15, 90, 60)

paint.setBrush(QtGui.QColor(255, 0, 0, 255))
paint.drawRect(250, 15, 90, 60)

paint.setBrush(QtGui.QColor(10, 163, 2, 55))
paint.drawRect(10, 105, 90, 60)

paint.setBrush(QtGui.QColor(160, 100, 0, 255))
paint.drawRect(130, 105, 90, 60)

paint.setBrush(QtGui.QColor(60, 100, 60, 255))
paint.drawRect(250, 105, 90, 60)

paint.setBrush(QtGui.QColor(50, 50, 50, 255))
paint.drawRect(10, 195, 90, 60)

paint.setBrush(QtGui.QColor(50, 150, 50, 255))
paint.drawRect(130, 195, 90, 60)

paint.setBrush(QtGui.QColor(223, 135, 19, 255))
paint.drawRect(250, 195, 90, 60)

paint.end()

app = QtGui.QApplication(sys.argv)
dt = Colors()
dt.show()
app.exec_()


image

color = QtGui.QColor(0, 0, 0)
color.setNamedColor('#d4d4d4')

Здесь мы определяем цвет, используя шестнадцатеричное представление

paint.setBrush(QtGui.QColor(255, 0, 0, 80));
paint.drawRect(10, 15, 90, 60)

Здесь определяем кисть, и рисуем прямоугольник. Метод drawRect () рисует прямоугольник, первые два параметра координаты X и Y, третий и четвертый — ширина и высота.

Линии


QPen — элементарный графический объект, который используется для рисования линий, кривых и контуров, элипсов, многоугольников и многих других фигур.

#!/usr/bin/python

# penstyles.py

import sys
from PyQt4 import QtGui, QtCore

class PenStyles(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)

self.setGeometry(300, 300, 280, 270)
self.setWindowTitle('penstyles')

def paintEvent(self, event):
paint = QtGui.QPainter()

paint.begin(self)

pen = QtGui.QPen(QtCore.Qt.black, 2, QtCore.Qt.SolidLine)

paint.setPen(pen)
paint.drawLine(20, 40, 250, 40)

pen.setStyle(QtCore.Qt.DashLine)
paint.setPen(pen)
paint.drawLine(20, 80, 250, 80)

pen.setStyle(QtCore.Qt.DashDotLine)
paint.setPen(pen)
paint.drawLine(20, 120, 250, 120)

pen.setStyle(QtCore.Qt.DotLine)
paint.setPen(pen)
paint.drawLine(20, 160, 250, 160)

pen.setStyle(QtCore.Qt.DashDotDotLine)
paint.setPen(pen)
paint.drawLine(20, 200, 250, 200)

pen.setStyle(QtCore.Qt.CustomDashLine)
pen.setDashPattern([1, 4, 5, 4])
paint.setPen(pen)
paint.drawLine(20, 240, 250, 240)

paint.end()

app = QtGui.QApplication(sys.argv)
dt = PenStyles()
dt.show()
app.exec_()


В этом примере мы рисуем шесть линий. Линии проведены в шести различных стилях.

pen = QtGui.QPen(QtCore.Qt.black, 2, QtCore.Qt.SolidLine)
Создали QPen объект, цвет черный, толщина 2, QtCore.Qt.SolidLine является одним из предопределенных стилей пера.

pen.setStyle(QtCore.Qt.CustomDashLine)
pen.setDashPattern([1, 4, 5, 4])
paint.setPen(pen)

Здесь мы определяем пользовательский стиль пера. Список цифр определяет стиль пера. В нашем примере. Чем больше число тем больше пространство или тире. У нас: 1px заполнено, 4px пустота, 5px заполнено, 4px пустота, и т.д.
image

QBrush


QBrush – элементарный графический объект. Используется для закраски фона графических фигур, таких как прямоугольники, эллипсы, многоугольники. Кисть может быть трех типов.

#!/usr/bin/python

# brushes.py

import sys
from PyQt4 import QtGui, QtCore

class Brushes(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)

self.setGeometry(300, 300, 355, 280)
self.setWindowTitle('Brushes')

def paintEvent(self, event):
paint = QtGui.QPainter()

paint.begin(self)

brush = QtGui.QBrush(QtCore.Qt.SolidPattern)
paint.setBrush(brush)
paint.drawRect(10, 15, 90, 60)

brush.setStyle(QtCore.Qt.Dense1Pattern)
paint.setBrush(brush)
paint.drawRect(130, 15, 90, 60)

brush.setStyle(QtCore.Qt.Dense2Pattern)
paint.setBrush(brush)
paint.drawRect(250, 15, 90, 60)

brush.setStyle(QtCore.Qt.Dense3Pattern)
paint.setBrush(brush)
paint.drawRect(10, 105, 90, 60)

brush.setStyle(QtCore.Qt.DiagCrossPattern)
paint.setBrush(brush)
paint.drawRect(10, 105, 90, 60)

brush.setStyle(QtCore.Qt.Dense5Pattern)
paint.setBrush(brush)
paint.drawRect(130, 105, 90, 60)

brush.setStyle(QtCore.Qt.Dense6Pattern)
paint.setBrush(brush)
paint.drawRect(250, 105, 90, 60)

brush.setStyle(QtCore.Qt.HorPattern)
paint.setBrush(brush)
paint.drawRect(10, 195, 90, 60)

brush.setStyle(QtCore.Qt.VerPattern)
paint.setBrush(brush)
paint.drawRect(130, 195, 90, 60)

brush.setStyle(QtCore.Qt.BDiagPattern)
paint.setBrush(brush)
paint.drawRect(250, 195, 90, 60)

paint.end()

app = QtGui.QApplication(sys.argv)
dt = Brushes()
dt.show()
app.exec_()

В нашем примере мы рисуем 6 различных прямоугольников.

brush = QtGui.QBrush(QtCore.Qt.SolidPattern)
paint.setBrush(brush)
paint.drawRect(10, 15, 90, 60)


Определяем тип кисти, и рисуем прямоугольник, с помощью метода drawRect()
image
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.