2

我正在尝试创建一个场景,我需要从该mousePressEvent位置画线直到最新的鼠标moveposition,这意味着我需要从中调用paintEventmousePressEvent这可能吗?

所以场景是这样的:

1)使用paintEvent绘制2个黑色圆圈

2)鼠标按下事件等待事件并按下发生,我想将圆圈的颜色更改为绿色,可以吗?

import sys, random
from PyQt4 import QtGui, QtCore

class P(QtGui.QWidget):

    def __init__(self):
        super(P, self).__init__()

        self.initUI()

    def initUI(self):
        q=self.frameGeometry()
        cp=QtGui.QDesktopWidget().availableGeometry().center()
        q.moveCenter(cp)
        self.setFixedSize(300,300)
        self.setWindowTitle('Points')
        self.show()

    def mousePressEvent(self, QMouseEvent):
        cursor =QtGui.QCursor(self)
        position = QMouseEvent.pos()
        xpos = QMouseEvent.x()
        ypos = QMouseEvent.y()

        #Trial ??????
        q = QtGui.QPainter()
        q.drawLine(30,30,90,90)

        print QMouseEvent.pos()

    def mouseReleaseEvent(self, QMouseEvent):
        cursor =QtGui.QCursor()
        print cursor.pos()

    def paintEvent(self,e):
        qp = QtGui.QPainter()
        qp.begin(self)

        E1 = qp.drawEllipse(30,30,20,20)
        E2 = qp.drawEllipse(30,130,20,20)

def main():

    app = QtGui.QApplication(sys.argv)
    ex = P()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

简单来说,我需要知道我们可以从另一个事件中调用一个事件,即从鼠标按下事件中调用绘制事件吗?

4

1 回答 1

1

在处理程序中完成所有绘画是一个更好的主意paintEvent

您应该使用鼠标事件处理程序来处理数据集合(起点、长度等),然后在paintEvent.

在鼠标事件处理程序中收集到新数据后,您可以通过调用update函数告诉 QWidget 它需要重新绘制。这将安排一个绘制事件,该事件将在程序返回事件循环时执行。

于 2013-09-15T08:58:43.943 回答