如何使用 PyQt 在小部件上绘制点和线
Posted
技术标签:
【中文标题】如何使用 PyQt 在小部件上绘制点和线【英文标题】:How to draw points and lines on widgets using PyQt 【发布时间】:2013-06-09 13:30:10 【问题描述】:我正在制作一个应用程序,它应该在小部件上绘制几个点并将其中一些用线连接起来。我使用 QT Designer 制作了一个表格,例如,我想在框架上绘制点。我已经读过要在小部件上绘制它的paintEvent() 方法应该重新实现,但我有一个问题。我的 MainForm 类有以下代码:
.........
def paintEvent(self, QPaintEvent):
paint = QtGui.QPainter()
paint.begin(self)
paint.setPen(QtCore.Qt.red)
size = self.size()
for i in range(100):
x = random.randint(1, size.width()-1)
y = random.randint(1, size.height()-1)
paint.drawPoint(x, y)
paint.end()
............
该方法在主窗口上绘制点。如何使paintEvent()绘制在我的表单的确切框架上?还有一个问题:如何仅在我按下某个按钮时才创建它,因为上面的代码会在任何事件之后重绘我的窗口。
如果重要的话,我会使用 PyQt v4.10 和 Python 3.3。
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:我已经解决了我的问题:我创建了自己的小部件(称为 PaintSpace)并将其放入主窗体的布局中。以下代码在 MainForm 类中:
class MyPaintSpace(QtGui.QWidget):
"""My widget for drawing smth"""
def __init__(self):
super(PaintSpace, self).__init__()
<some code>
def paintEvent(self, QPaintEvent):
"""Reimpltmented drawing method of my widget"""
paint = QtGui.QPainter()
paint.begin(self)
<smth we want to draw>
paint.end()
# Make an object...
self.myPaintSpaceYZ = MyPaintSpace()
# ...and put it in layout
self.verticalLayoutYZ.addWidget(self.myPaintSpaceYZ)
之后,我使用.update()
方法重绘我的小部件。
【讨论】:
所以你把一个类放在一个类里面? PaintSpace 是 QT 设计器中 QWidget 的名称吗?什么是verticalLayoutYZ? @jerbotron,不,它不是类中的类。只是另一个班级。有关更多示例,请参阅此问题:***.com/questions/8993842/…以上是关于如何使用 PyQt 在小部件上绘制点和线的主要内容,如果未能解决你的问题,请参考以下文章
Plotly:在地图上绘制点和线时自动进入/退出到合适的区域