完成一个简单的对话框,在对话框中能够选择不同形状进行绘制,并其能够任意绘制简单的图形,并实现对图形的填充、边线及画笔模式的选择。 1.使用QPainter提供的draw函数绘制各种图形 2.使用QPen、QBrush实现画笔及画刷的模式设置
时间: 2024-03-25 22:40:25 浏览: 70
利用QPainter绘制各种图形
3星 · 编辑精心推荐
好的,这个问题我可以回答。您可以按照以下步骤来实现:
1. 创建一个对话框,并在对话框中添加一个用于绘制的 QWidget。
2. 在 QWidget 中实现绘制功能,可以使用 QPainter 的 draw 函数绘制各种形状,例如 drawRect、drawEllipse、drawLine 等。
3. 实现对图形的填充、边线及画笔模式的选择。可以使用 QPen 和 QBrush 类来设置画笔及画刷的模式,例如设置线条宽度、线条颜色、填充颜色等。
下面是一个简单的示例代码,您可以参考一下:
```python
from PyQt5.QtGui import QPainter, QPen, QBrush
from PyQt5.QtWidgets import QWidget, QApplication, QDialog, QHBoxLayout, QVBoxLayout, QComboBox, QPushButton
from PyQt5.QtCore import Qt, QRectF
class MyWidget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.shapes = ['Rectangle', 'Ellipse', 'Line']
self.shape = self.shapes[0]
self.pen = QPen()
self.brush = QBrush()
self.pen.setWidth(2)
self.pen.setColor(Qt.black)
self.brush.setStyle(Qt.SolidPattern)
self.brush.setColor(Qt.blue)
self.setFixedSize(400, 300)
def paintEvent(self, event):
painter = QPainter(self)
painter.setPen(self.pen)
painter.setBrush(self.brush)
if self.shape == 'Rectangle':
painter.drawRect(QRectF(50, 50, 100, 100))
elif self.shape == 'Ellipse':
painter.drawEllipse(QRectF(150, 50, 100, 100))
elif self.shape == 'Line':
painter.drawLine(50, 200, 150, 250)
def setShape(self, index):
self.shape = self.shapes[index]
self.update()
def setPenWidth(self, width):
self.pen.setWidth(width)
self.update()
def setPenColor(self, color):
self.pen.setColor(color)
self.update()
def setBrushStyle(self, style):
self.brush.setStyle(style)
self.update()
def setBrushColor(self, color):
self.brush.setColor(color)
self.update()
class MyDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.initUI()
def initUI(self):
self.widget = MyWidget()
self.shapeComboBox = QComboBox()
self.shapeComboBox.addItems(self.widget.shapes)
self.shapeComboBox.currentIndexChanged.connect(self.widget.setShape)
self.penWidthSpinBox = QSpinBox()
self.penWidthSpinBox.setRange(1, 10)
self.penWidthSpinBox.setValue(self.widget.pen.width())
self.penWidthSpinBox.valueChanged.connect(self.widget.setPenWidth)
self.penColorButton = QPushButton()
self.penColorButton.setStyleSheet('background-color: black')
self.penColorButton.clicked.connect(self.setPenColor)
self.brushStyleComboBox = QComboBox()
self.brushStyleComboBox.addItems(['No Brush', 'Solid', 'Dense1', 'Dense2', 'Dense3', 'Dense4', 'Dense5', 'Dense6', 'Dense7', 'Hor', 'Ver', 'Cross', 'BDiag', 'FDiag'])
self.brushStyleComboBox.currentIndexChanged.connect(self.setBrushStyle)
self.brushColorButton = QPushButton()
self.brushColorButton.setStyleSheet('background-color: blue')
self.brushColorButton.clicked.connect(self.setBrushColor)
layout1 = QHBoxLayout()
layout1.addWidget(self.shapeComboBox)
layout1.addWidget(self.penWidthSpinBox)
layout1.addWidget(self.penColorButton)
layout2 = QHBoxLayout()
layout2.addWidget(self.brushStyleComboBox)
layout2.addWidget(self.brushColorButton)
layout = QVBoxLayout()
layout.addWidget(self.widget)
layout.addLayout(layout1)
layout.addLayout(layout2)
self.setLayout(layout)
def setPenColor(self):
color = QColorDialog.getColor()
if color.isValid():
self.penColorButton.setStyleSheet('background-color: {}'.format(color.name()))
self.widget.setPenColor(color)
def setBrushColor(self):
color = QColorDialog.getColor()
if color.isValid():
self.brushColorButton.setStyleSheet('background-color: {}'.format(color.name()))
self.widget.setBrushColor(color)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
dialog = MyDialog()
dialog.show()
sys.exit(app.exec_())
```
在这个示例代码中,我们创建了一个 MyWidget 类来实现绘制功能,并在 MyDialog 类中添加了一些控件来实现对画笔及画刷模式的设置。运行程序后,您可以在对话框中选择不同的形状进行绘制,并且可以设置线条宽度、线条颜色、填充颜色等。
阅读全文