我正在尝试手动绘制QPainter。我知道如果QWidget是paintdevice,那么QPainter必须在paintEvent()方法中运行。并且每次更新窗口小部件时都会调用paintEvent()。
我要做的是从文件中获取一个坐标数组,并根据坐标数组绘制矩形。
class timeline(QtWidgets.QWidget):
def __init__(self, *args, **kwargs):
QtWidgets.QWidget.__init__(self, *args, **kwargs)
self.createUI()
def createUI(self):
self.setGeometry(0, 700, 2000, 100)
self.setWindowTitle('Colors')
#self.show()
def paintEvent(self, event):
print(event.type())
qp = QtGui.QPainter()
qp.begin(self)
print("error2")
self.drawRectangles(qp)
qp.end()
def drawRectangles(self, qp):
Y = 700
for i in range(self.rows):
randArr = np.random.randint(0, 256, size=(3,1))
qp.fillRect(QtCore.QRect(self.tldata[i,6], Y, self.tldata[i,7], 5), QtGui.QColor(randArr[0], randArr[1], randArr[2]))
self.tldata是我将读到的坐标文件。
目前,这是彩色矩形的外观(深蓝色)。基本上我希望能够有一个多彩多姿的矩形。较大矩形内的每种颜色都代表一个特定的时间范围
编辑1:当我运行我的完整程序时,它继续打印(“error2”)以及当我移动窗口时调用self.drawRectangle(qp)。但是,event.type()返回12,这是 Paint 事件。 Table of event types
所以我猜测以某种方式调整主窗口的大小会导致 Paint 事件。什么可能导致这种行为?
任何帮助将不胜感激! 谢谢!