#!/usr/bin/env python3 from PyQt5 import QtCore from PyQt5 import QtWidgets from PyQt5 import QtGui from PyQt5 import QtPrintSupport def settings(): settings = QtCore.QSettings("Yansoft","Prasopes") defvals = {("view/autozoomy", True), ("view/filebrowservisible", True), ("view/intensities", False), ("view/oddeven", False), ("print/xinch", 10), ("print/yinch", 4), ("print/dpi", 300), ("print/xtics", 5), ("imggen/xinch", 10), ("imggen/yinch", 4), ("imggen/dpi", 300), ("imggen/xtics", 5)} [settings.setValue(i[0], i[1]) for i in defvals if settings.value(i[0]) == None] return settings def pathsearch(text, value, config): filename = QtWidgets.QFileDialog.getExistingDirectory() if filename is not '': text.setText(filename) config.setValue(value, filename) def pathlineconf(label, value, config): """adds generic filepath config line""" textfield = QtWidgets.QLineEdit(str(config.value(value))) textfield.editingFinished.connect(lambda: config.setValue( value, textfield.text())) browse_button = QtWidgets.QPushButton("Browse..") browse_button.clicked.connect(lambda: pathsearch( textfield, value, config)) layout = QtWidgets.QHBoxLayout() layout.addWidget(QtWidgets.QLabel(str(label))) layout.addWidget(textfield) layout.addWidget(browse_button) return layout def posintvarconf(label, value, config): """adds generic positive integer config line""" textfield = QtWidgets.QLineEdit(str(config.value(value))) textfield.editingFinished.connect(lambda: config.setValue( value, textfield.text())) validator = QtGui.QIntValidator() validator.setBottom(0) textfield.setValidator(validator) layout = QtWidgets.QHBoxLayout() layout.addWidget(QtWidgets.QLabel("{}:".format(label))) layout.addStretch() layout.addWidget(textfield) return layout def dial(parent): """constructs a dialog window""" dialog = QtWidgets.QDialog( parent, windowTitle='Settings') dialog.resize(600,-1) config = settings() tabs = QtWidgets.QTabWidget() pathtab = QtWidgets.QWidget() pathlayout = QtWidgets.QVBoxLayout(pathtab) pathlayout.addLayout(pathlineconf( "Acquisition temp folder", "tmp_location", config)) pathlayout.addLayout(pathlineconf( "Default open folder", "open_folder", config)) tabs.addTab(pathtab, "Paths") printtab = QtWidgets.QWidget() printlayout = QtWidgets.QVBoxLayout(printtab) printlayout.addLayout(posintvarconf( "Figure width (inch)", "print/xinch", config)) printlayout.addLayout(posintvarconf( "Figure height (inch)", "print/yinch", config)) printlayout.addLayout(posintvarconf( "Figure dpi", "print/dpi", config)) printlayout.addLayout(posintvarconf( "Figure x axis major ticks count", "print/xtics", config)) tabs.addTab(printtab, "Printing") imggentab = QtWidgets.QWidget() imggenlayout = QtWidgets.QVBoxLayout(imggentab) imggenlayout.addLayout(posintvarconf( "Figure width (inch)", "imggen/xinch", config)) imggenlayout.addLayout(posintvarconf( "Figure height (inch)", "imggen/yinch", config)) imggenlayout.addLayout(posintvarconf( "Figure dpi", "imggen/dpi", config)) imggenlayout.addLayout(posintvarconf( "Figure x axis major ticks count", "imggen/xtics", config)) tabs.addTab(imggentab, "Image clip/export") close_button = QtWidgets.QPushButton("Close") close_button.clicked.connect(dialog.close) butt_layout = QtWidgets.QHBoxLayout() butt_layout.addWidget(close_button) butt_layout.addStretch(1) layout = QtWidgets.QVBoxLayout(dialog) layout.addWidget(QtWidgets.QLabel("Changes are saved automatically")) layout.addWidget(tabs) layout.addStretch(1) layout.addLayout(butt_layout) dialog.show()