在 PyQt 中绘制多边形
Drawing a polygon in PyQt
背景
我想在屏幕上画一个简单的形状,我选择了PyQt作为使用的包,因为它似乎是最成熟的。我没有以任何方式锁定它。
问题
在屏幕上绘制一个简单的形状(例如多边形)似乎过于复杂。我发现的所有示例都试图做很多额外的事情,但我不确定真正相关的是什么。
问题
在 PyQt 中在屏幕上绘制多边形的绝对最小方法是什么?
我使用 PyQt 的第 5 版和 Python 的第 3 版,如果有任何区别的话。
我不确定,你说的
是什么意思
on the screen
您可以使用 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_())
背景
我想在屏幕上画一个简单的形状,我选择了PyQt作为使用的包,因为它似乎是最成熟的。我没有以任何方式锁定它。
问题
在屏幕上绘制一个简单的形状(例如多边形)似乎过于复杂。我发现的所有示例都试图做很多额外的事情,但我不确定真正相关的是什么。
问题
在 PyQt 中在屏幕上绘制多边形的绝对最小方法是什么?
我使用 PyQt 的第 5 版和 Python 的第 3 版,如果有任何区别的话。
我不确定,你说的
是什么意思on the screen
您可以使用 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_())