Source code for SDF.GUI.browser.main
import os
import sys
from PyQt5.QtCore import QDir
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QKeyEvent
from PyQt5.QtWidgets import QApplication, QSplitter
from PyQt5.QtWidgets import QPushButton, QHBoxLayout, QVBoxLayout, QFileDialog, QWidget
from SDF.GUI.browser.preview import DataPreviewWidget
from SDF.GUI.browser.sdf_tree import SDFTreeWidget
from SDF.GUI.browser.summary import SummaryWidget
from SDF.file_io import load_from_sdf
[docs]class SDFBrowser(QWidget):
"""
Widget to browse through any sdf file, displayed in a tree view.
Also displays some detailed information and image data previews.
"""
def __init__(self):
super().__init__()
# directory to open
self.open_dir = QDir.currentPath()
# init UI
self.summary_widget = SummaryWidget()
self.data_preview_widget = DataPreviewWidget()
self.treeview = SDFTreeWidget(parent=self, data_preview_widget=self.data_preview_widget,
summary_widget=self.summary_widget)
self.init_ui()
[docs] def init_ui(self):
"""
Initializes all widgets (buttons, labels, etc.) displayed
on this widget.
"""
self.setWindowTitle('SDF Browser')
# splitter (makes left and right part resizable)
splitter = QSplitter(parent=self)
splitter_layout = QHBoxLayout()
splitter_layout.addWidget(splitter)
splitter_layout.setContentsMargins(0, 0, 0, 0)
self.setLayout(splitter_layout)
# left and right panels
left_panel_widget = QWidget()
right_panel_widget = QWidget()
splitter.addWidget(left_panel_widget)
splitter.addWidget(right_panel_widget)
left_panel = QVBoxLayout()
right_panel = QVBoxLayout()
left_panel_widget.setLayout(left_panel)
right_panel_widget.setLayout(right_panel)
# left: SDFObject tree
left_panel.addWidget(self.treeview)
# left: Open button
hbox_open = QHBoxLayout()
btn_open_sdf = QPushButton("Open SDF files")
btn_open_sdf.clicked.connect(self.open_files)
hbox_open.addWidget(btn_open_sdf)
hbox_open.addStretch(1)
left_panel.addLayout(hbox_open)
# right: summary and preview
right_panel.addWidget(self.summary_widget)
right_panel.addWidget(self.data_preview_widget)
[docs] def open_files(self) -> None:
"""opens dialog for opening sdf files, adds selected files to the browser"""
# get file dialog
files, _ = QFileDialog.getOpenFileNames(self, 'Open SDF file', self.open_dir, '*sdf')
# read files and add them to widget
for file in files:
sdf_obj = load_from_sdf(file)
self.treeview.add_sdf_object(sdf_obj)
self.open_dir = os.path.split(file)[0]
[docs] def keyPressEvent(self, event: QKeyEvent) -> None:
if event.key() == Qt.Key_O and event.modifiers() == Qt.ControlModifier:
self.open_files()
[docs]def main():
app = QApplication([])
app.setAttribute(Qt.AA_UseStyleSheetPropagationInWidgetStyles, True)
if "-d" in sys.argv or "--debug" in sys.argv:
import logging
logging.basicConfig(level=logging.DEBUG)
gui = SDFBrowser()
gui.show()
exit(app.exec_())