def eventFilter(self, obj, event):
if event.type() == QtCore.QEvent.Close and self.window is obj:
self.window.removeEventFilter(self)
elif event.type() == QtCore.QEvent.Resize and self.window is obj:
print("resize")
if obj == self.ui.photo1 and event.type() == event.MouseButtonDblClick:
# 在双击事件中处理放大显示逻辑
self.showZoomedImage(self.photo_1)
if obj == self.ui.photo8 and event.type() == event.MouseButtonDblClick:
# 在双击事件中处理放大显示逻辑
self.showZoomedImage(self.photo_8)
if obj == self.ui.photo16 and event.type() == event.MouseButtonDblClick:
# 在双击事件中处理放大显示逻辑
self.showZoomedImage(self.photo_16)
if obj == self.zoomed_label:
if event.type() == QEvent.Wheel:
# 捕获到鼠标滚轮事件
delta = event.angleDelta().y() / 120
if delta > 0:
# 向上滚动,放大图片
self.zoomed_label.setPixmap(self.pixmap.scaled(self.zoomed_label.pixmap().size() * 1.1))
else:
# 向下滚动,缩小图片
self.zoomed_label.setPixmap(self.pixmap.scaled(self.zoomed_label.pixmap().size() * 0.9))
# 标记需要更新对话框大小
self.needUpdate = True
#self.dialog.adjustSize()
return True
elif event.type() == QEvent.MouseButtonPress:
# 捕获到鼠标按下事件,记录起始点
if event.button() == Qt.LeftButton:
self.drag_start_pos = event.pos()
return True
elif event.type() == QEvent.MouseMove:
# 捕获到鼠标移动事件,如果有拖动操作则移动图片
if self.drag_start_pos is not None:
delta = event.pos() - self.drag_start_pos
self.zoomed_label.move(self.zoomed_label.pos() + delta)
self.drag_start_pos = event.pos()
return True
elif event.type() == QEvent.MouseButtonRelease:
# 捕获到鼠标释放事件,清除拖动起始点
if event.button() == Qt.LeftButton:
self.drag_start_pos = None
elif event.type() == QEvent.MouseButtonDblClick:
if event.button() == Qt.LeftButton:
self.dialog.close()
return True
return super(QMainWindow, self).eventFilter(obj, event)
def showZoomedImage(self, file):
print("in zoom")
self.image = QImage(file)
#self.image = Image.open(file)
self.pixmap = QPixmap.fromImage(self.image)
#scaled_pixmap = pixmap.scaled(label.size(), aspectMode=Qt.KeepAspectRatio, transformMode=Qt.SmoothTransformation)
self.dialog = QDialog(None)
self.dialog.setWindowTitle("Zoomed Image")
self.dialog.setModal(True)
self.dialog.setFixedSize(1000,1000)
# 创建一个标签用于显示放大后的图片
#需要放到QScrollArea中不然没显示出来的部分拖拽后还是显示不出来
scroll_area = QScrollArea(self.dialog)
scroll_area.setWidgetResizable(True)
self.zoomed_label = QLabel(self.dialog)
self.zoomed_label.setAlignment(Qt.AlignCenter)
self.zoomed_label.setPixmap(self.pixmap.scaledToWidth(1000, Qt.SmoothTransformation))
scroll_area.setWidget(self.zoomed_label)
# 将标签添加到布局中
layout = QVBoxLayout(self.dialog)
layout.addWidget(scroll_area)
self.dialog.setLayout(layout)
self.zoomed_label.installEventFilter(self)
self.drag_start_pos = None
self.dialog.exec_()