Python 如何在PyQt5上正确设置PixMap缩放?
我是Pyqt的新手,我正在尝试创建一个UI,在给定像素位置时,在图像(QLabel)上打印一个圆(使用QPaint)。对于测试,我使用鼠标跟踪事件,但我想我在调整图像或标签大小方面有问题。下面是我的实现中的图像: 结果: 看看指针和圆圈的位置。这就是我想要解决的问题 下面您可以看到代码(我正在使用PIL(加载图像)和PyQt5): 有人能帮我吗 问候,Python 如何在PyQt5上正确设置PixMap缩放?,python,qt,pyqt,pyqt4,pyqt5,Python,Qt,Pyqt,Pyqt4,Pyqt5,我是Pyqt的新手,我正在尝试创建一个UI,在给定像素位置时,在图像(QLabel)上打印一个圆(使用QPaint)。对于测试,我使用鼠标跟踪事件,但我想我在调整图像或标签大小方面有问题。下面是我的实现中的图像: 结果: 看看指针和圆圈的位置。这就是我想要解决的问题 下面您可以看到代码(我正在使用PIL(加载图像)和PyQt5): 有人能帮我吗 问候, Gabriel:D您可以创建一个自定义小部件来执行此任务,而不是使用QLabel,如下所示: class Stadium(QWidget):
Gabriel:D您可以创建一个自定义小部件来执行此任务,而不是使用
QLabel
,如下所示:
class Stadium(QWidget):
def __init__(self, pixmap, parent=None):
QWidget.__init__(self, parent=parent)
self.pixmap = pixmap
self.pos = None
self.setMouseTracking(True)
def paintEvent(self, event):
painter = QPainter(self)
painter.drawPixmap(self.rect(), self.pixmap)
painter.setPen(QPen(Qt.red, 15, Qt.SolidLine))
if self.pos:
painter.drawEllipse(self.pos, 15, 15)
def mouseMoveEvent(self, event):
self.pos = event.pos()
self.update()
例如:
class Widget(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent=parent)
self.setLayout(QVBoxLayout())
label = Stadium(QPixmap("475776182987.png"))
self.layout().addWidget(label)
self.resize(640, 480)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
截图:
您为什么使用PIL?您的问题是什么?您想要得到什么?PIL不是必需的。我可以更改pixmap_image=QtGui.QPixmap(“Images/Quart_top_View_draw.jpg”)行使用PIL的位置。我需要的是在我的指针所在的地方画一个圆圈。我想体育场的图像是QLabel,对吗?是的,你说得对。当我移动鼠标时,我得到了他在QLabel上的位置。然后我在图像上画了一个圆,使用鼠标跟踪得到的像素,但不匹配(指针位置与图像上的圆不同)。当我最大化UI时,差异会变得更大。我想这是规模问题,但我不知道怎么解决。嗨,艾伦斯。你的答案很好。我在主窗口中添加QWidget。非常感谢。你好@eyllanesc。可以保持图像大小的比例吗?如果是,您能帮助我吗?如果标签的关系与您要显示的图像的关系不匹配?例如,如果我现在调整主窗口的大小,请按照它调整图像。我的目标是,如果图像是400x400的正方形,我只增加主窗口的垂直尺寸,图像不能改变,因为必须保持纵横比。我不明白你的意思,请解释清楚
class Widget(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent=parent)
self.setLayout(QVBoxLayout())
label = Stadium(QPixmap("475776182987.png"))
self.layout().addWidget(label)
self.resize(640, 480)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())