|
@@ -0,0 +1,77 @@
|
|
|
+from qtpy import QtCore
|
|
|
+from qtpy import QtGui
|
|
|
+from qtpy import QtWidgets
|
|
|
+
|
|
|
+import json
|
|
|
+
|
|
|
+
|
|
|
+class ScrollAreaPreview(QtWidgets.QScrollArea):
|
|
|
+ def __init__(self, *args, **kwargs):
|
|
|
+ super(ScrollAreaPreview, self).__init__(*args, **kwargs)
|
|
|
+
|
|
|
+ self.setWidgetResizable(True)
|
|
|
+
|
|
|
+ content = QtWidgets.QWidget(self)
|
|
|
+ self.setWidget(content)
|
|
|
+
|
|
|
+ lay = QtWidgets.QVBoxLayout(content)
|
|
|
+
|
|
|
+ self.label = QtWidgets.QLabel(content)
|
|
|
+ self.label.setWordWrap(True)
|
|
|
+
|
|
|
+ lay.addWidget(self.label)
|
|
|
+
|
|
|
+ def setText(self, text):
|
|
|
+ self.label.setText(text)
|
|
|
+
|
|
|
+ def setPixmap(self, pixmap):
|
|
|
+ self.label.setPixmap(pixmap)
|
|
|
+
|
|
|
+ def clear(self):
|
|
|
+ self.label.clear()
|
|
|
+
|
|
|
+
|
|
|
+class FileDialogPreview(QtWidgets.QFileDialog):
|
|
|
+ def __init__(self, *args, **kwargs):
|
|
|
+ super(FileDialogPreview, self).__init__(*args, **kwargs)
|
|
|
+ self.setOption(self.DontUseNativeDialog, True)
|
|
|
+
|
|
|
+ self.labelPreview = ScrollAreaPreview(self)
|
|
|
+ self.labelPreview.setFixedSize(300, 300)
|
|
|
+ self.labelPreview.setHidden(True)
|
|
|
+
|
|
|
+ box = QtWidgets.QVBoxLayout()
|
|
|
+ box.addWidget(self.labelPreview)
|
|
|
+ box.addStretch()
|
|
|
+
|
|
|
+ self.setFixedSize(self.width() + 300, self.height())
|
|
|
+ self.layout().addLayout(box, 1, 3, 1, 1)
|
|
|
+ self.currentChanged.connect(self.onChange)
|
|
|
+
|
|
|
+ def onChange(self, path):
|
|
|
+ if path.lower().endswith(".json"):
|
|
|
+ with open(path, "r") as f:
|
|
|
+ data = json.load(f)
|
|
|
+ self.labelPreview.setText(
|
|
|
+ json.dumps(data, indent=4, sort_keys=False)
|
|
|
+ )
|
|
|
+ self.labelPreview.label.setAlignment(
|
|
|
+ QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop
|
|
|
+ )
|
|
|
+ self.labelPreview.setHidden(False)
|
|
|
+ else:
|
|
|
+ pixmap = QtGui.QPixmap(path)
|
|
|
+ if pixmap.isNull():
|
|
|
+ self.labelPreview.clear()
|
|
|
+ self.labelPreview.setHidden(True)
|
|
|
+ else:
|
|
|
+ self.labelPreview.setPixmap(
|
|
|
+ pixmap.scaled(
|
|
|
+ self.labelPreview.width() - 30,
|
|
|
+ self.labelPreview.height() - 30,
|
|
|
+ QtCore.Qt.KeepAspectRatio,
|
|
|
+ QtCore.Qt.SmoothTransformation,
|
|
|
+ )
|
|
|
+ )
|
|
|
+ self.labelPreview.label.setAlignment(QtCore.Qt.AlignCenter)
|
|
|
+ self.labelPreview.setHidden(False)
|