gpt4 book ai didi

python - 通过鼠标事件 PyQt 在 PyQt 窗口中创建一行

转载 作者:行者123 更新时间:2023-11-28 18:46:54 33 4
gpt4 key购买 nike

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

场景是这样的:

1) 使用 paintEvent 画了两个黑色的圆圈

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()

简单来说,我需要知道我们能否从另一个事件调用一个事件,即从鼠标按下事件调用 Paint 事件?

最佳答案

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

您应该使用鼠标事件处理程序来处理数据集合(起点、长度等),然后在 paintEvent 中进行实际的重绘。

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

关于python - 通过鼠标事件 PyQt 在 PyQt 窗口中创建一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18798951/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com