我正在制作一个应用程序,它应该在窗口小部件上绘制几个点,并用线条连接其中一些点。我使用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。
提前感谢您的帮助。
答案 0 :(得分:0)
我已经解决了我的问题:我创建了自己的小部件(称为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()
方法。