画像をプレビューするためにプレビューを表示するためにQt5 QFileDialogを取得しようとしています。QFileDialogプレビュー
方法1:QFileDialog
の拡張Iは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
は、翻訳クラスです。私は、Python 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