QFileDialog上一页

2024-05-20 21:38:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到一个qt5qfiledialog来显示图像预览时,选择打开它们。在

方法1:扩展QFileDialog
我使用了this implementation of the dialog,它与qt5.6.1一起工作。在

现在我正在使用Qt 5.9.2,但它不再工作,给出以下错误:

Traceback (most recent call last):
  File "main.py", line 74, in mouseDoubleClickEvent
    self.openFileDialog()
  File "main.py", line 123, in openFileDialog
    openDialog = QFileDialogPreview(self, 'Open file', './', self.getDialogFilter())
  File "QFileDialogPreview.py", line 22, in __init__
    self.layout().addLayout(box, 1, 3, 1, 1)
TypeError: addLayout(self, QLayout, stretch: int = 0): too many arguments

这是翻译课。我使用的是Python 3.5.2:

^{pr2}$

方法2:单独的预览窗口

我还尝试为预览添加一个单独的窗口。当它在QFileDialog中被选中时会显示图像,但我无法将其附加到对话框本身的一侧。
我无法使用上的mapToGlobal方法获取映射到全局屏幕坐标的对话框的位置对话框.gemoetry(). 我只得到一个QRect,它包含位置0,0,在本例中大小不匹配100x30,而对话框大约是800x600,大约为2000500。在


Tags: 方法inpy图像selfmainlinethis
1条回答
网友
1楼 · 发布于 2024-05-20 21:38:03

当您放置box = QVBoxLayout(self)时,您正在放置一个新布局,您必须使用QFileDialog自己的Qt,为此,除了从box语句中删除self之外,我们还启用了DontUseNativeDialog标志:

class QFileDialogPreview(QFileDialog):
    def __init__(self, *args, **kwargs):
        QFileDialog.__init__(self, *args, **kwargs)
        self.setOption(QFileDialog.DontUseNativeDialog, True)

        box = QVBoxLayout()

        self.setFixedSize(self.width() + 250, self.height())

        self.mpPreview = QLabel("Preview", self)
        self.mpPreview.setFixedSize(250, 250)
        self.mpPreview.setAlignment(Qt.AlignCenter)
        self.mpPreview.setObjectName("labelPreview")
        box.addWidget(self.mpPreview)

        box.addStretch()

        self.layout().addLayout(box, 1, 3, 1, 1)

        self.currentChanged.connect(self.onChange)
        self.fileSelected.connect(self.onFileSelected)
        self.filesSelected.connect(self.onFilesSelected)

        self._fileSelected = None
        self._filesSelected = None

    def onChange(self, path):
        pixmap = QPixmap(path)

        if(pixmap.isNull()):
            self.mpPreview.setText("Preview")
        else:
            self.mpPreview.setPixmap(pixmap.scaled(self.mpPreview.width(), self.mpPreview.height(), Qt.KeepAspectRatio, Qt.SmoothTransformation))

    def onFileSelected(self, file):
        self._fileSelected = file

    def onFilesSelected(self, files):
        self._filesSelected = files

    def getFileSelected(self):
        return self._fileSelected

    def getFilesSelected(self):
        return self._filesSelected

输出:

enter image description here

相关问题 更多 >