gpt4 book ai didi

python-3.x - PyQt5 - 如何在鼠标点击位置画一个点?

转载 作者:行者123 更新时间:2023-12-04 16:03:43 25 4
gpt4 key购买 nike

我想在我的主窗口上画一个点,但是点没有显示。

我试过将 mousePressEvent 绑定(bind)到 paintEvent,但效果不佳。这是我的代码的当前版本(也不起作用)。我也尝试用 drawPoint 方法放置一个点,但它也没有用。

import sys
from PyQt5 import QtWidgets, QtGui, QtCore, uic


class GUI(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
uic.loadUi('gui.ui', self)
self.setFixedSize(self.size())
self.show()

def mousePressEvent(self, e):
print(e.pos())
qp = QtGui.QPainter()
qp.begin(self)
qp.setPen(QtCore.Qt.red)
qp.drawEllipse(e.pos().x(), e.pos().y(), 10, 10)
qp.end()
self.update()


if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = GUI()
sys.exit(app.exec_())

我知道 mousePressEvent 正在工作,因为我得到了点击坐标。

我可以更改放置点的方法或要放置的点类型,但它应该具有可自定义的颜色和大小。

最佳答案

你应该只在 paintEvent 方法中绘制,并且这种绘制不节省内存所以如果你想绘制多个点你必须将它们存储在一些容器中,例如使用 QPolygon.

每次调用 update()repaint() 时都会调用

paintEvent(),例如每次调用时都会调用它调整大小,移动窗口等。

import sys
from PyQt5 import QtWidgets, QtGui, QtCore, uic


class GUI(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
uic.loadUi('gui.ui', self)
self.setFixedSize(self.size())
self.show()
self.points = QtGui.QPolygon()

def mousePressEvent(self, e):
self.points << e.pos()
self.update()

def paintEvent(self, ev):
qp = QtGui.QPainter(self)
qp.setRenderHint(QtGui.QPainter.Antialiasing)
pen = QtGui.QPen(QtCore.Qt.red, 5)
brush = QtGui.QBrush(QtCore.Qt.red)
qp.setPen(pen)
qp.setBrush(brush)
for i in range(self.points.count()):
qp.drawEllipse(self.points.point(i), 5, 5)
# or
# qp.drawPoints(self.points)


if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = GUI()
sys.exit(app.exec_())

关于python-3.x - PyQt5 - 如何在鼠标点击位置画一个点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49699848/

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