使用PyQt绘制多边形

10

背景

我想在屏幕上绘制一个简单的形状,并选择了PyQt作为使用的软件包,因为它似乎是最成熟的。我并没有被任何方式所限制。

问题

似乎只是在屏幕上画个简单的形状(例如多边形)就过于复杂了。我找到的所有示例都试图做很多额外的事情,我不确定哪些是实际相关的。

问题

在PyQt中,绘制多边形在绝对最小的情况下需要哪些步骤?

如果有任何区别,我使用PyQt的5版本和Python的3版本。


图形视图框架 - ekhumoro
1个回答

15

我不确定你所说的意思是什么。

在屏幕上

您可以使用QPainter,在任何QPaintDevice子类(例如QWidget和所有子类)上绘制许多形状。

最少需要为线条和文本设置笔和填充刷。然后创建一个多边形,设置多边形的所有点并在paintEvent()中进行绘制:

import sys, math
from PyQt5 import QtCore, QtGui, QtWidgets

class MyWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.pen = QtGui.QPen(QtGui.QColor(0,0,0))                      # set lineColor
        self.pen.setWidth(3)                                            # set lineWidth
        self.brush = QtGui.QBrush(QtGui.QColor(255,255,255,255))        # set fillColor  
        self.polygon = self.createPoly(8,150,0)                         # polygon with n points, radius, angle of the first point

    def createPoly(self, n, r, s):
        polygon = QtGui.QPolygonF() 
        w = 360/n                                                       # angle per step
        for i in range(n):                                              # add the points of polygon
            t = w*i + s
            x = r*math.cos(math.radians(t))
            y = r*math.sin(math.radians(t))
            polygon.append(QtCore.QPointF(self.width()/2 +x, self.height()/2 + y))  

        return polygon

    def paintEvent(self, event):
        painter = QtGui.QPainter(self)
        painter.setPen(self.pen)
        painter.setBrush(self.brush)  
        painter.drawPolygon(self.polygon)

app = QtWidgets.QApplication(sys.argv) 

widget = MyWidget()
widget.show()

sys.exit(app.exec_())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接