2017-12-01 8 views
0

画像をプレビューするためにプレビューを表示するために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です。

+0

をあなたならば何をしなければならないことは箱の声明から自己の除去に加えて、このために我々はDontUseNativeDialogフラグを有効にする、QFileDialog自身のQtを使用していますあなたの期待される結果がどんなものかを描くでしょう。 – user1767754

+0

ウィジェットによって右側に拡張された通常のファイルオープンダイアログ、またはプレビューウィジェットを含むダイアログの右側に別のウィンドウ – Hize75

答えて

0

box = QVBoxLayout(self)を置くと、

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

関連する問題