【发布时间】:2018-10-21 14:02:46
【问题描述】:
Python 3,Mac OS Mojave 上最新版本的 PyQt5
我想要一个 PyQt5 程序,其中用户可以在图像上绘制连接的点(有区别地单击,这些点会自动连接)。重要的是,我只能在 QLabel 小部件(或替代小部件)中绘制图像,而不能在整个主窗口上绘制。
我可以绘制图像并获取前两次单击的坐标,但是当我想在图像上绘画时,它发生在图像下方。此外,我在获取坐标作为我的paintevent的输入时遇到了麻烦。
class Example(QWidget):
def __init__(self):
super().__init__()
title = "Darcy"
top = 400
left = 400
width = 550
height = 600
self.clickcount = 0
self.x = 0
self.y = 0
self.setWindowTitle(title)
self.setGeometry(top,left, width, height)
self.initUI()
def paintEvent(self, e):
qp = QPainter()
qp.begin(self)
self.drawLines(qp)
qp.end()
def drawLines(self, qp):
pen = QPen(Qt.black, 2, Qt.SolidLine)
qp.setPen(pen)
qp.drawLine(20, 40, 250, 40)
def initUI(self):
self.map = QLabel()
Im = QPixmap("GM_loc.png")
Im = Im.scaled(450,450)
self.map.setPixmap(Im)
self.loc = QLabel()
self.test = QLabel()
self.map.mousePressEvent = self.getPos
#organize in grid
grid = QGridLayout()
grid.setSpacing(10)
grid.addWidget(self.map, 0, 0)
grid.addWidget(self.loc,1,0)
grid.addWidget(self.test,2,0)
self.setLayout(grid)
self.show()
def getPos(self , event):
self.clickcount += 1
self.x_old = self.x
self.y_old = self.y
self.x = event.pos().x()
self.y = event.pos().y()
self.loc.setText("x = "+str(self.x)+" & y= "+str(self.y)+" & old x = " + str(self.x_old) + " & old y = " + str(self.y_old))
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
提前致谢! PS 我是 PyQt5 的新手,所以任何关于更高效代码的提示都非常受欢迎!
【问题讨论】:
标签: python pyqt5 qpainter qlabel qpixmap