我正在尝试在主窗口上画一个点,但是没有显示点。
我尝试将mousePressEvent
绑定到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
正在工作,因为我得到了点击的协调。
我可以更改点放置方法或放置点类型,但它应该具有可自定义的颜色和大小。
答案 0 :(得分:0)
您应该只在paintEvent
方法中绘制,并且此绘制不会节省内存,因此如果您想要绘制几个点,则必须将它们存储在某个容器中,例如使用QPolygon
。
paintEvent()
或update()
时都会调用 repaint()
,例如每次调整大小时调用它,移动窗口等等。
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_())