我正在尝试创建一个场景,我需要从mousePressEvent
位置到最新的鼠标moveposition
之间划线,这意味着我需要从mousePressEvent
调用paintEvent
,这是可能的吗?
所以场景是这样的:
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()
简而言之,我需要知道我们是否可以从一个事件中调用另一个事件,即鼠标按下事件中的绘制事件?
发布于 2013-09-15 08:58:44
在paintEvent
处理程序中完成所有绘制是一个更好的主意。
您应该使用鼠标事件处理程序来处理数据(起始点、长度等)的收集,然后在paintEvent
中执行实际的重绘。
一旦您在鼠标事件处理程序中收集了新数据,就可以通过调用update
函数来告诉QWidget它需要重新绘制。这将调度一个绘制事件,该事件将在程序返回到事件循环时执行。
https://stackoverflow.com/questions/18798951
复制相似问题