图像查看器 GUI 无法正确映射鼠标按下事件的坐标

我正在尝试将来自各种来源的基于 PyQt5 的图像查看器 Python 代码拼凑在一起,并扩展功能以在加载的图像中裁剪感兴趣区域 (ROI)。问题是映射坐标和鼠标点击在确定像素位置时会考虑滚动条和菜单栏。以下是加载图像并提供边界框功能的代码,但由于偏移,我似乎无法准确绘制/裁剪框。


from PyQt5.QtCore import QDir, Qt

from PyQt5.QtGui import QImage, QPainter, QPalette, QPixmap

from PyQt5.QtWidgets import (QAction, QApplication, QFileDialog, QLabel,

        QMainWindow, QMenu, QMessageBox, QScrollArea, QSizePolicy)

from PyQt5.QtPrintSupport import QPrintDialog, QPrinter



class ImageViewer(QMainWindow):

    def __init__(self):

        super(ImageViewer, self).__init__()


        self.printer = QPrinter()

        self.scaleFactor = 0.0


        self.imageLabel = QLabel()

        self.imageLabel.setBackgroundRole(QPalette.Base)

        self.imageLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)

        self.imageLabel.setScaledContents(True)


        self.scrollArea = QScrollArea()

        self.scrollArea.setBackgroundRole(QPalette.Dark)

        self.scrollArea.setWidget(self.imageLabel)

        self.setCentralWidget(self.scrollArea)


        self.createActions()

        self.createMenus()


        self.setWindowTitle("Image Viewer")

        self.resize(500, 400)


    def open(self):

        fileName, _ = QFileDialog.getOpenFileName(self, "Open File",

                QDir.currentPath())

        if fileName:

            image = QImage(fileName)

            if image.isNull():

                QMessageBox.information(self, "Image Viewer",

                        "Cannot load %s." % fileName)

                return


            self.imageLabel.setPixmap(QPixmap.fromImage(image))

            self.scaleFactor = 1.0


            self.printAct.setEnabled(True)

            self.fitToWindowAct.setEnabled(True)

            self.updateActions()


            if not self.fitToWindowAct.isChecked():

                self.imageLabel.adjustSize()


HUH函数
浏览 206回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python