여는 중 이미지를 선택할 때 이미지 미리보기를 표시하는 Qt5 QFileDialog를 얻으려고합니다.QFileDialog 미리보기
방법 1 : QFileDialog
확장 나는 this implementation of the dialog 사용하고 Qt를 5.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
번역 된 클래스입니다. 파이썬 3.5.2를 사용하고 있습니다 :
from PyQt5.QtWidgets import QFileDialog, QLabel, QVBoxLayout
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
class QFileDialogPreview(QFileDialog):
def __init__(self, parent, caption, direcotry, filter):
super().__init__(parent, caption, direcotry, filter)
self.setObjectName("FileDialogPreview")
box = QVBoxLayout(self)
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
방법 2 : 별도의 창을 나는 또한 미리보기에 대한 별도의 창을 추가하는 시도 미리보기
을 위해. 그것이 QFileDialog에서 선택되면 이미지를 보여 주지만 Dialog 자체에 붙이지는 않습니다.
dialog.gemoetry()에서 mapToGlobal 메서드를 사용하여 전역 화면 좌표에 매핑 된 대화 상자의 위치를 가져올 수 없습니다. 대화 상자가 약 800x600이고 대략 2000, 500 인 동안이 경우 크기가 100x30 인 QRect가 있습니다.
당신이 만약 당신이해야 할 것은 상자 문에서 자신을 제거하기이를 위해 우리는 이외에,
DontUseNativeDialog
플래그를 수는QFileDialog
자신의 Qt를를 사용하는 것입니다 예상 한 결과가 어떨지를 그릴 것입니다. 사람들이 당신을 더 쉽게 도울 수 있습니다. – user1767754오른쪽 위젯으로 확장 된 일반 파일 열기 대화 상자 또는 내 미리보기 위젯이 포함 된 대화 상자 오른쪽의 별도 창 – Hize75