如何用 QtGui.QPainterPath.addRect() 颜色绘画?
How to paint in colors QtGui.QPainterPath.addRect()?
我正在尝试在 PyQt5 中绘制矩形。但是总有一些事情对我不起作用。我指的是“QPainterPath 文档”并且有这个例子:
path = QPainterPath()
path.addRect(20, 20, 60, 60)
path.moveTo(0, 0)
path.cubicTo(99, 0, 50, 50, 99, 99)
path.cubicTo(0, 99, 50, 50, 0, 0)
QPainter painter(self)
painter.fillRect(0, 0, 100, 100, Qt.white)
painter.setPen(QPen(QColor(79, 106, 25), 1, Qt.SolidLine,
Qt.FlatCap, Qt.MiterJoin))
painter.setBrush(QColor(122, 163, 39))
painter.drawPath(path)
我自己试过了,但我不明白什么是 "QPainter painter(self)" 以及它在那里是如何工作的,我找不到 QPainter 命令。
这是我的代码示例:
from PyQt5 import QtGui, QtCore, QtWidgets
import sys
class testUi(QtWidgets.QDialog):
def __init__(self, parent=None):
super(testUi, self).__init__(parent)
self.window = 'vl_test'
self.title = 'Test Remastered'
self.size = (1000, 650)
self.create( )
def create(self):
self.setWindowTitle(self.title)
self.resize(QtCore.QSize(*self.size))
self.testik = test(self)
self.mainLayout = QtWidgets.QVBoxLayout( )
self.mainLayout.addWidget(self.testik)
self.setLayout(self.mainLayout)
class test(QtWidgets.QGraphicsView):
def __init__(self, parent=None):
super(test, self).__init__(parent)
self._scene = QtWidgets.QGraphicsScene( )
self.setScene(self._scene)
self.drawSomething( )
def drawSomething(self):
self.path = QtGui.QPainterPath( )
self.path.moveTo(0, 0)
self.path.addRect(20, 20, 60, 60)
self._scene.addPath(self.path)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
v = testUi()
v.show()
sys.exit(app.exec_())
我的代码在 "addRect" 之后没有写任何东西。所以任何人都可以清楚如何使用 "QPainter"。谢谢你的时间。
P.S
奖励问题:在 QGraphicScene 中绘制图元并与之交互的最快方法是什么?因为我可以看到有很多方法可以绘制 curves/polygons 和操作它们,但是对于工作流程来说什么是最有效的?对不起我的英语
addPath() 方法 returns 继承自 QAbstractGraphicsShapeItem 的 QGraphicsPathItem,允许您分别使用 setBrush() 和 setPen() 设置填充和边框颜色
def drawSomething(self):
self.path = QtGui.QPainterPath()
self.path.moveTo(0, 0)
self.path.addRect(20, 20, 60, 60)
item = self._scene.addPath(self.path)
# or
# item = QtWidgets.QGraphicsPathItem(path)
# self._scene.addItem(item)
item.setPen(
QtGui.QPen(
QtGui.QColor(79, 106, 25),
1,
QtCore.Qt.SolidLine,
QtCore.Qt.FlatCap,
QtCore.Qt.MiterJoin,
)
)
item.setBrush(QtGui.QColor(122, 163, 39))
在 QGraphicScene 中绘制图元并与之交互的最快方法是什么?因为我可以有很多方法来绘制 curves/polygons 和操作它们,但是对于工作流程来说什么是最有效的?
Qt中的整个绘画系统最终都使用了QPainter,虽然我之前展示的代码没有看到明确的使用,但它正在被使用,因为QGraphicsItem有一个使用QPainter,画笔和笔的绘画。
QPainter 也进行了优化,所以不用担心 Qt 方面的优化。
QGraphicsView 和 QGraphicsScene 是一个基于 QGraphicsItems 的高级框架,因此通常您应该能够使用预定义的项目构建任何东西,但如果您不能创建自己的 QGraphicsItem(实现方法 paint( ) 和 boundingRect())
如果你想绘制一些你不想与之交互的永久性东西(移动它,点击它等),那么你可以使用 QGraphicsScene 的 drawBackground 或 drawForeGround 方法,因为你想在项目之前或之后绘制分别画了
阅读更多信息:Graphics View Framework
我正在尝试在 PyQt5 中绘制矩形。但是总有一些事情对我不起作用。我指的是“QPainterPath 文档”并且有这个例子:
path = QPainterPath()
path.addRect(20, 20, 60, 60)
path.moveTo(0, 0)
path.cubicTo(99, 0, 50, 50, 99, 99)
path.cubicTo(0, 99, 50, 50, 0, 0)
QPainter painter(self)
painter.fillRect(0, 0, 100, 100, Qt.white)
painter.setPen(QPen(QColor(79, 106, 25), 1, Qt.SolidLine,
Qt.FlatCap, Qt.MiterJoin))
painter.setBrush(QColor(122, 163, 39))
painter.drawPath(path)
我自己试过了,但我不明白什么是 "QPainter painter(self)" 以及它在那里是如何工作的,我找不到 QPainter 命令。 这是我的代码示例:
from PyQt5 import QtGui, QtCore, QtWidgets
import sys
class testUi(QtWidgets.QDialog):
def __init__(self, parent=None):
super(testUi, self).__init__(parent)
self.window = 'vl_test'
self.title = 'Test Remastered'
self.size = (1000, 650)
self.create( )
def create(self):
self.setWindowTitle(self.title)
self.resize(QtCore.QSize(*self.size))
self.testik = test(self)
self.mainLayout = QtWidgets.QVBoxLayout( )
self.mainLayout.addWidget(self.testik)
self.setLayout(self.mainLayout)
class test(QtWidgets.QGraphicsView):
def __init__(self, parent=None):
super(test, self).__init__(parent)
self._scene = QtWidgets.QGraphicsScene( )
self.setScene(self._scene)
self.drawSomething( )
def drawSomething(self):
self.path = QtGui.QPainterPath( )
self.path.moveTo(0, 0)
self.path.addRect(20, 20, 60, 60)
self._scene.addPath(self.path)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
v = testUi()
v.show()
sys.exit(app.exec_())
我的代码在 "addRect" 之后没有写任何东西。所以任何人都可以清楚如何使用 "QPainter"。谢谢你的时间。
P.S 奖励问题:在 QGraphicScene 中绘制图元并与之交互的最快方法是什么?因为我可以看到有很多方法可以绘制 curves/polygons 和操作它们,但是对于工作流程来说什么是最有效的?对不起我的英语
addPath() 方法 returns 继承自 QAbstractGraphicsShapeItem 的 QGraphicsPathItem,允许您分别使用 setBrush() 和 setPen() 设置填充和边框颜色
def drawSomething(self):
self.path = QtGui.QPainterPath()
self.path.moveTo(0, 0)
self.path.addRect(20, 20, 60, 60)
item = self._scene.addPath(self.path)
# or
# item = QtWidgets.QGraphicsPathItem(path)
# self._scene.addItem(item)
item.setPen(
QtGui.QPen(
QtGui.QColor(79, 106, 25),
1,
QtCore.Qt.SolidLine,
QtCore.Qt.FlatCap,
QtCore.Qt.MiterJoin,
)
)
item.setBrush(QtGui.QColor(122, 163, 39))
在 QGraphicScene 中绘制图元并与之交互的最快方法是什么?因为我可以有很多方法来绘制 curves/polygons 和操作它们,但是对于工作流程来说什么是最有效的?
Qt中的整个绘画系统最终都使用了QPainter,虽然我之前展示的代码没有看到明确的使用,但它正在被使用,因为QGraphicsItem有一个使用QPainter,画笔和笔的绘画。
QPainter 也进行了优化,所以不用担心 Qt 方面的优化。
QGraphicsView 和 QGraphicsScene 是一个基于 QGraphicsItems 的高级框架,因此通常您应该能够使用预定义的项目构建任何东西,但如果您不能创建自己的 QGraphicsItem(实现方法 paint( ) 和 boundingRect())
如果你想绘制一些你不想与之交互的永久性东西(移动它,点击它等),那么你可以使用 QGraphicsScene 的 drawBackground 或 drawForeGround 方法,因为你想在项目之前或之后绘制分别画了
阅读更多信息:Graphics View Framework