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 に答える