diff options
author | Picca Frédéric-Emmanuel <picca@synchrotron-soleil.fr> | 2017-09-15 14:21:41 +0200 |
---|---|---|
committer | Picca Frédéric-Emmanuel <picca@synchrotron-soleil.fr> | 2018-10-02 13:50:35 +0200 |
commit | 70f28a734d5ab6f3c256efc82a556144584ecce1 (patch) | |
tree | dac51839d2fb9b660add3e2dd8baebcfd677b45b | |
parent | a8ad9e89ccb16bcc5b6bf10a49fdd5ea5426cd26 (diff) |
first attempted pyQT5 migration
-rw-r--r-- | debian/control | 2 | ||||
-rwxr-xr-x | scripts/binoculars-fitaid | 264 | ||||
-rwxr-xr-x | scripts/binoculars-gui | 319 | ||||
-rwxr-xr-x | scripts/binoculars-processgui | 175 |
4 files changed, 391 insertions, 369 deletions
diff --git a/debian/control b/debian/control index 13e2fdc..5010ed9 100644 --- a/debian/control +++ b/debian/control @@ -46,7 +46,7 @@ Depends: ${misc:Depends}, python-matplotlib, python-pyfai, pymca, - python-qt4, + python-pyqt5, python-scipy, Suggests: python-xrayutilities Description: Data reduction and analysis software for two-dimensional detectors in surface X-ray diffraction - Python2 diff --git a/scripts/binoculars-fitaid b/scripts/binoculars-fitaid index 5da66dd..e4f3a24 100755 --- a/scripts/binoculars-fitaid +++ b/scripts/binoculars-fitaid @@ -1,18 +1,27 @@ #!/usr/bin/env python -import h5py import sys -import numpy import os.path import itertools + +import h5py import matplotlib.figure import matplotlib.image +import numpy -from PyQt4 import QtGui, QtCore, Qt -from scipy.interpolate import griddata -from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg, NavigationToolbar2QTAgg +from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg, NavigationToolbar2QT from matplotlib.pyplot import Rectangle -from scipy.spatial import qhull + +from PyQt5.Qt import (Qt) +from PyQt5.QtCore import (pyqtSignal) +from PyQt5.QtWidgets import (QAction, QApplication, QSlider, QMenuBar, QTabWidget, + QFileDialog, QStatusBar, QMessageBox, QRadioButton, + QButtonGroup, QCheckBox, QPushButton, QHBoxLayout, + QVBoxLayout, QSplitter, QTableWidgetItem, QTableWidget, + QLabel, QLineEdit, QMainWindow, QWidget, QComboBox, + QProgressDialog, QDoubleSpinBox) + +from scipy.interpolate import griddata def set_src(): @@ -37,29 +46,29 @@ except ImportError: import binoculars.util -class Window(QtGui.QMainWindow): +class Window(QMainWindow): def __init__(self, parent=None): super(Window, self).__init__(parent) - newproject = QtGui.QAction("New project", self) + newproject = QAction("New project", self) newproject.triggered.connect(self.newproject) - loadproject = QtGui.QAction("Open project", self) + loadproject = QAction("Open project", self) loadproject.triggered.connect(self.loadproject) - addspace = QtGui.QAction("Import space", self) + addspace = QAction("Import space", self) addspace.triggered.connect(self.add_to_project) - menu_bar = QtGui.QMenuBar() + menu_bar = QMenuBar() file = menu_bar.addMenu("&File") file.addAction(newproject) file.addAction(loadproject) file.addAction(addspace) self.setMenuBar(menu_bar) - self.statusbar = QtGui.QStatusBar() + self.statusbar = QStatusBar() - self.tab_widget = QtGui.QTabWidget(self) + self.tab_widget = QTabWidget(self) self.tab_widget.setTabsClosable(True) self.tab_widget.tabCloseRequested.connect(self.tab_widget.removeTab) @@ -68,11 +77,11 @@ class Window(QtGui.QMainWindow): self.setStatusBar(self.statusbar) def newproject(self): - dialog = QtGui.QFileDialog(self, "project filename"); - dialog.setFilter('binoculars fit file (*.fit)'); + dialog = QFileDialog(self, "project filename"); + dialog.setNameFilters(['binoculars fit file (*.fit)']); dialog.setDefaultSuffix('fit'); - dialog.setFileMode(QtGui.QFileDialog.AnyFile); - dialog.setAcceptMode(QtGui.QFileDialog.AcceptSave); + dialog.setFileMode(QFileDialog.AnyFile); + dialog.setAcceptMode(QFileDialog.AcceptSave); if not dialog.exec_(): return fname = dialog.selectedFiles()[0] @@ -83,14 +92,14 @@ class Window(QtGui.QMainWindow): self.tab_widget.addTab(widget, short_filename(str(fname))) self.tab_widget.setCurrentWidget(widget) except Exception as e: - QtGui.QMessageBox.critical(self, 'New project', 'Unable to save project to {}: {}'.format(fname, e)) + QMessageBox.critical(self, 'New project', 'Unable to save project to {}: {}'.format(fname, e)) def loadproject(self, filename=None): if not filename: - dialog = QtGui.QFileDialog(self, "Load project"); - dialog.setFilter('binoculars fit file (*.fit)'); - dialog.setFileMode(QtGui.QFileDialog.ExistingFiles); - dialog.setAcceptMode(QtGui.QFileDialog.AcceptOpen); + dialog = QFileDialog(self, "Load project"); + dialog.setNameFilters(['binoculars fit file (*.fit)']); + dialog.setFileMode(QFileDialog.ExistingFiles); + dialog.setAcceptMode(QFileDialog.AcceptOpen); if not dialog.exec_(): return fname = dialog.selectedFiles()[0] @@ -101,7 +110,7 @@ class Window(QtGui.QMainWindow): self.tab_widget.addTab(widget, short_filename(str(fname))) self.tab_widget.setCurrentWidget(widget) except Exception as e: - QtGui.QMessageBox.critical(self, 'Load project', 'Unable to load project from {}: {}'.format(fname, e)) + QMessageBox.critical(self, 'Load project', 'Unable to load project from {}: {}'.format(fname, e)) else: widget = TopWidget(str(fname), parent=self) self.tab_widget.addTab(widget, 'fname') @@ -109,14 +118,14 @@ class Window(QtGui.QMainWindow): def add_to_project(self, filename=None): if self.tab_widget.count() == 0: - QtGui.QMessageBox.warning(self, 'Warning', 'First select a file to store data') + QMessageBox.warning(self, 'Warning', 'First select a file to store data') self.newproject() if not filename: - dialog = QtGui.QFileDialog(self, "Import spaces"); - dialog.setFilter('binoculars space file (*.hdf5)'); - dialog.setFileMode(QtGui.QFileDialog.ExistingFiles); - dialog.setAcceptMode(QtGui.QFileDialog.AcceptOpen); + dialog = QFileDialog(self, "Import spaces"); + dialog.setNameFilters(['binoculars space file (*.hdf5)']); + dialog.setFileMode(QFileDialog.ExistingFiles); + dialog.setAcceptMode(QFileDialog.AcceptOpen); if not dialog.exec_(): return fname = dialog.selectedFiles() @@ -127,28 +136,28 @@ class Window(QtGui.QMainWindow): widget = self.tab_widget.currentWidget() widget.addspace(str(name)) except Exception as e: - QtGui.QMessageBox.critical(self, 'Import spaces', 'Unable to import space {}: {}'.format(fname, e)) + QMessageBox.critical(self, 'Import spaces', 'Unable to import space {}: {}'.format(fname, e)) else: widget = self.tab_widget.currentWidget() widget.addspace(filename) -class TopWidget(QtGui.QWidget): +class TopWidget(QWidget): def __init__(self, filename, parent=None): super(TopWidget, self).__init__(parent) - hbox = QtGui.QHBoxLayout() - vbox = QtGui.QVBoxLayout() - minihbox = QtGui.QHBoxLayout() - minihbox2 = QtGui.QHBoxLayout() + hbox = QHBoxLayout() + vbox = QVBoxLayout() + minihbox = QHBoxLayout() + minihbox2 = QHBoxLayout() self.database = FitData(filename) self.table = TableWidget(self.database) self.nav = ButtonedSlider() - self.nav.connect(self.nav, QtCore.SIGNAL('slice_index'), self.index_change) + self.nav.slice_index.connect(self.index_change) self.table.trigger.connect(self.active_change) self.table.check_changed.connect(self.refresh_plot) - self.tab_widget = QtGui.QTabWidget() + self.tab_widget = QTabWidget() self.fitwidget = FitWidget(self.database, self) self.integratewidget = IntegrateWidget(self.database, self) @@ -160,14 +169,14 @@ class TopWidget(QtGui.QWidget): self.tab_widget.addTab(self.plotwidget, 'plot') self.tab_widget.addTab(self.peakwidget, 'Peaktracker') - self.emptywidget = QtGui.QWidget() + self.emptywidget = QWidget() self.emptywidget.setLayout(vbox) vbox.addWidget(self.table) vbox.addWidget(self.nav) self.functions = list() - self.function_box = QtGui.QComboBox() + self.function_box = QComboBox() for function in dir(binoculars.fit): cls = getattr(binoculars.fit, function) if isinstance(cls, type) and issubclass(cls, binoculars.fit.PeakFitBase): @@ -179,9 +188,9 @@ class TopWidget(QtGui.QWidget): vbox.addLayout(minihbox) vbox.addLayout(minihbox2) - self.all_button = QtGui.QPushButton('fit all') - self.rod_button = QtGui.QPushButton('fit rod') - self.slice_button = QtGui.QPushButton('fit slice') + self.all_button = QPushButton('fit all') + self.rod_button = QPushButton('fit rod') + self.slice_button = QPushButton('fit slice') self.all_button.clicked.connect(self.fit_all) self.rod_button.clicked.connect(self.fit_rod) @@ -191,9 +200,9 @@ class TopWidget(QtGui.QWidget): minihbox.addWidget(self.rod_button) minihbox.addWidget(self.slice_button) - self.allint_button = QtGui.QPushButton('int all') - self.rodint_button = QtGui.QPushButton('int rod') - self.sliceint_button = QtGui.QPushButton('int slice') + self.allint_button = QPushButton('int all') + self.rodint_button = QPushButton('int rod') + self.sliceint_button = QPushButton('int slice') self.allint_button.clicked.connect(self.int_all) self.rodint_button.clicked.connect(self.int_rod) @@ -203,7 +212,7 @@ class TopWidget(QtGui.QWidget): minihbox2.addWidget(self.rodint_button) minihbox2.addWidget(self.sliceint_button) - splitter = QtGui.QSplitter(QtCore.Qt.Horizontal) + splitter = QSplitter(Qt.Horizontal) splitter.addWidget(self.emptywidget) splitter.addWidget(self.tab_widget) @@ -218,7 +227,7 @@ class TopWidget(QtGui.QWidget): def addspace(self, filename=None): if filename == None: - filename = str(QtGui.QFileDialog.getOpenFileName(self, 'Open Project', '.', '*.hdf5')) + filename = str(QFileDialog.getOpenFileName(self, 'Open Project', '.', '*.hdf5')) self.table.addspace(filename) def active_change(self): @@ -313,34 +322,34 @@ class TopWidget(QtGui.QWidget): database.save_sliceattr(index, 'guessloc{0}'.format(param.lstrip('loc')), newval) def progressbox(self, rodkey, function, iterator, length): - pd = QtGui.QProgressDialog('Processing {0}'.format(rodkey), 'Cancel', 0, length) - pd.setWindowModality(QtCore.Qt.WindowModal) + pd = QProgressDialog('Processing {0}'.format(rodkey), 'Cancel', 0, length) + pd.setWindowModality(Qt.WindowModal) pd.show() def progress(index, item): pd.setValue(index) if pd.wasCanceled(): raise KeyboardInterrupt - QtGui.QApplication.processEvents() + QApplication.processEvents() function(*item) for index, item in enumerate(iterator): progress(index, item) pd.close() -class TableWidget(QtGui.QWidget): - trigger = QtCore.pyqtSignal() - check_changed = QtCore.pyqtSignal() +class TableWidget(QWidget): + trigger = pyqtSignal() + check_changed = pyqtSignal() def __init__(self, database, parent=None): super(TableWidget, self).__init__(parent) - hbox = QtGui.QHBoxLayout() + hbox = QHBoxLayout() self.database = database self.activeindex = 0 - self.table = QtGui.QTableWidget(0, 5) + self.table = QTableWidget(0, 5) self.table.setHorizontalHeaderLabels(['', 'rod', 'axis', 'res', 'remove']) self.table.cellClicked.connect(self.setlength) @@ -375,16 +384,16 @@ class TableWidget(QtGui.QWidget): axes = binoculars.space.Axes.fromfile(filename) - checkboxwidget = QtGui.QCheckBox() + checkboxwidget = QCheckBox() checkboxwidget.rodkey = rodkey checkboxwidget.setChecked(0) self.table.setCellWidget(index, 0, checkboxwidget) checkboxwidget.clicked.connect(self.check_changed) - item = QtGui.QTableWidgetItem(rodkey) + item = QTableWidgetItem(rodkey) self.table.setItem(index, 1, item) - axis = QtGui.QComboBox() + axis = QComboBox() for ax in axes: axis.addItem(ax.label) self.table.setCellWidget(index, 2, axis) @@ -393,7 +402,7 @@ class TableWidget(QtGui.QWidget): elif index > 0: self.table.cellWidget(0, 2).setCurrentIndex(self.table.cellWidget(0, 2).currentIndex()) - resolution = QtGui.QLineEdit() + resolution = QLineEdit() if not old_resolution == None: resolution.setText(str(old_resolution)) elif index > 0: @@ -404,7 +413,7 @@ class TableWidget(QtGui.QWidget): resolution.editingFinished.connect(activechange_callback(index)) self.table.setCellWidget(index, 3, resolution) - buttonwidget = QtGui.QPushButton('remove') + buttonwidget = QPushButton('remove') buttonwidget.clicked.connect(remove_callback(rodkey)) self.table.setCellWidget(index, 4, buttonwidget) @@ -451,9 +460,9 @@ class FitData(object): for rodkey in self.rods(): spacename = db[rodkey].attrs['filename'] if not os.path.exists(spacename): - warningbox = QtGui.QMessageBox(2, 'Warning', 'Cannot find space {0} at file {1}; locate proper space'.format(rodkey, spacename), buttons=QtGui.QMessageBox.Open) + warningbox = QMessageBox(2, 'Warning', 'Cannot find space {0} at file {1}; locate proper space'.format(rodkey, spacename), buttons=QMessageBox.Open) warningbox.exec_() - spacename = str(QtGui.QFileDialog.getOpenFileName(caption='Open space {0}'.format(rodkey), directory='.', filter='*.hdf5')) + spacename = str(QFileDialog.getOpenFileName(caption='Open space {0}'.format(rodkey), directory='.', filter='*.hdf5')) if not spacename: raise IOError('Select proper input') db[rodkey].attrs['filename'] = spacename @@ -584,7 +593,7 @@ class RodData(FitData): try: group = db[self.rodkey][self.slicekey]['attrs'] # # else it breaks with the old fitaid except KeyError: - db[rodkey][slicekey].create_group('attrs') + db[self.rodkey][self.slicekey].create_group('attrs') group = db[self.rodkey][self.slicekey]['attrs'] if not key in group: group.create_dataset(key, (self.rodlength(),)) @@ -620,24 +629,23 @@ class RodData(FitData): def load_loc(self, index): loc = list() - with h5py.File(self.filename, 'a') as db: - count = itertools.count() + count = itertools.count() + key = 'guessloc{0}'.format(next(count)) + while self.load_sliceattr(index, key) != None: + loc.append(self.load_sliceattr(index, key)) key = 'guessloc{0}'.format(next(count)) + if len(loc) > 0: + return loc + else: + count = itertools.count() + key = 'loc{0}'.format(next(count)) while self.load_sliceattr(index, key) != None: loc.append(self.load_sliceattr(index, key)) - key = 'guessloc{0}'.format(next(count)) + key = 'loc{0}'.format(next(count)) if len(loc) > 0: return loc else: - count = itertools.count() - key = 'loc{0}'.format(next(count)) - while self.load_sliceattr(index, key) != None: - loc.append(self.load_sliceattr(index, key)) - key = 'loc{0}'.format(next(count)) - if len(loc) > 0: - return loc - else: - return None + return None def save_loc(self, index, loc): for i, value in enumerate(loc): @@ -666,9 +674,9 @@ class RodData(FitData): def short_filename(filename): return filename.split('/')[-1].split('.')[0] -class HiddenToolbar(NavigationToolbar2QTAgg): +class HiddenToolbar(NavigationToolbar2QT): def __init__(self, corner_callback, canvas): - NavigationToolbar2QTAgg.__init__(self, canvas, None) + super(HiddenToolbar, self).__init__(canvas, None) self._corner_callback = corner_callback self.zoom() @@ -680,12 +688,12 @@ class HiddenToolbar(NavigationToolbar2QTAgg): self._corner_callback(event.xdata, event.ydata) self._corner_preclick = None -class FitWidget(QtGui.QWidget): +class FitWidget(QWidget): def __init__(self, database ,parent=None): super(FitWidget, self).__init__(parent) self.database = database - vbox = QtGui.QHBoxLayout() + vbox = QHBoxLayout() self.figure = matplotlib.figure.Figure() self.canvas = FigureCanvasQTAgg(self.figure) @@ -747,7 +755,7 @@ class FitWidget(QtGui.QWidget): else: return index -class IntegrateWidget(QtGui.QWidget): +class IntegrateWidget(QWidget): def __init__(self, database, parent = None): super(IntegrateWidget, self).__init__(parent) self.parent = parent @@ -757,9 +765,9 @@ class IntegrateWidget(QtGui.QWidget): self.canvas = FigureCanvasQTAgg(self.figure) self.toolbar = HiddenToolbar(self.loc_callback, self.canvas) - hbox = QtGui.QHBoxLayout() + hbox = QHBoxLayout() - splitter = QtGui.QSplitter(QtCore.Qt.Vertical) + splitter = QSplitter(Qt.Vertical) self.make_controlwidget() splitter.addWidget(self.canvas) @@ -769,27 +777,27 @@ class IntegrateWidget(QtGui.QWidget): self.setLayout(hbox) def make_controlwidget(self): - self.control_widget = QtGui.QWidget() + self.control_widget = QWidget() - integratebox = QtGui.QVBoxLayout() - intensitybox = QtGui.QHBoxLayout() - backgroundbox = QtGui.QHBoxLayout() + integratebox = QVBoxLayout() + intensitybox = QHBoxLayout() + backgroundbox = QHBoxLayout() - self.aroundroi = QtGui.QCheckBox('background around roi') + self.aroundroi = QCheckBox('background around roi') self.aroundroi.setChecked(1) self.aroundroi.clicked.connect(self.refresh_aroundroi) - self.hsize = QtGui.QDoubleSpinBox() - self.vsize = QtGui.QDoubleSpinBox() + self.hsize = QDoubleSpinBox() + self.vsize = QDoubleSpinBox() - intensitybox.addWidget(QtGui.QLabel('roi size:')) + intensitybox.addWidget(QLabel('roi size:')) intensitybox.addWidget(self.hsize) intensitybox.addWidget(self.vsize) - self.left = QtGui.QDoubleSpinBox() - self.right = QtGui.QDoubleSpinBox() - self.top = QtGui.QDoubleSpinBox() - self.bottom = QtGui.QDoubleSpinBox() + self.left = QDoubleSpinBox() + self.right = QDoubleSpinBox() + self.top = QDoubleSpinBox() + self.bottom = QDoubleSpinBox() self.hsize.valueChanged.connect(self.send) self.vsize.valueChanged.connect(self.send) @@ -807,21 +815,21 @@ class IntegrateWidget(QtGui.QWidget): integratebox.addLayout(intensitybox) integratebox.addLayout(backgroundbox) - self.fromfit = QtGui.QRadioButton('peak from fit', self) + self.fromfit = QRadioButton('peak from fit', self) self.fromfit.setChecked(True) self.fromfit.toggled.connect(self.plot_box) self.fromfit.toggled.connect(self.refresh_tracker) - self.fromsegment = QtGui.QRadioButton('peak from segment', self) + self.fromsegment = QRadioButton('peak from segment', self) self.fromsegment.setChecked(False) self.fromsegment.toggled.connect(self.plot_box) self.fromsegment.toggled.connect(self.refresh_tracker) - self.trackergroup = QtGui.QButtonGroup(self) + self.trackergroup = QButtonGroup(self) self.trackergroup.addButton(self.fromfit) self.trackergroup.addButton(self.fromsegment) - radiobox = QtGui.QHBoxLayout() + radiobox = QHBoxLayout() radiobox.addWidget(self.fromfit) radiobox.addWidget(self.fromsegment) @@ -1035,17 +1043,17 @@ class IntegrateWidget(QtGui.QWidget): else: return index -class ButtonedSlider(QtGui.QWidget): +class ButtonedSlider(QWidget): def __init__(self,parent=None): super(ButtonedSlider, self).__init__(parent) - self.navigation_button_left_end = QtGui.QPushButton('|<') - self.navigation_button_left_one = QtGui.QPushButton('<') - self.navigation_slider = QtGui.QSlider(Qt.Qt.Horizontal) + self.navigation_button_left_end = QPushButton('|<') + self.navigation_button_left_one = QPushButton('<') + self.navigation_slider = QSlider(Qt.Qt.Horizontal) self.navigation_slider.sliderReleased.connect(self.send) - self.navigation_button_right_one = QtGui.QPushButton('>') - self.navigation_button_right_end = QtGui.QPushButton('>|') + self.navigation_button_right_one = QPushButton('>') + self.navigation_button_right_end = QPushButton('>|') self.navigation_button_left_end.setMaximumWidth(20) self.navigation_button_left_one.setMaximumWidth(20) @@ -1057,7 +1065,7 @@ class ButtonedSlider(QtGui.QWidget): self.navigation_button_right_end.clicked.connect(self.slider_change_right_end) self.navigation_button_right_one.clicked.connect(self.slider_change_right_one) - box = QtGui.QHBoxLayout() + box = QHBoxLayout() box.addWidget(self.navigation_button_left_end) box.addWidget(self.navigation_button_left_one) box.addWidget(self.navigation_slider) @@ -1070,13 +1078,13 @@ class ButtonedSlider(QtGui.QWidget): def set_length(self,length): self.navigation_slider.setMinimum(0) self.navigation_slider.setMaximum(length - 1) - self.navigation_slider.setTickPosition(QtGui.QSlider.TicksBelow) + self.navigation_slider.setTickPosition(QSlider.TicksBelow) self.navigation_slider.setValue(0) self.setEnabled(True) def send(self): - self.emit(QtCore.SIGNAL('slice_index'), self.navigation_slider.value()) + self.slice_index.emit(self.navigation_slider.value()) def slider_change_left_one(self): self.navigation_slider.setValue(max(self.navigation_slider.value() - 1, 0)) @@ -1100,12 +1108,12 @@ class ButtonedSlider(QtGui.QWidget): def set_index(self, index): self.navigation_slider.setValue(index) -class HiddenToolbar2(NavigationToolbar2QTAgg): +class HiddenToolbar2(NavigationToolbar2QT): def __init__(self, canvas): - NavigationToolbar2QTAgg.__init__(self, canvas, None) + super(HiddenToolbar2, self).__init__(canvas, None) self.zoom() -class OverviewWidget(QtGui.QWidget): +class OverviewWidget(QWidget): def __init__(self, database, parent = None): super(OverviewWidget, self).__init__(parent) @@ -1115,14 +1123,14 @@ class OverviewWidget(QtGui.QWidget): self.canvas = FigureCanvasQTAgg(self.figure) self.toolbar = HiddenToolbar2(self.canvas) - self.table = QtGui.QTableWidget(0,2) + self.table = QTableWidget(0,2) self.make_table() self.table.cellClicked.connect(self.plot) - hbox = QtGui.QHBoxLayout() + hbox = QHBoxLayout() - splitter = QtGui.QSplitter(QtCore.Qt.Horizontal) + splitter = QSplitter(Qt.Horizontal) splitter.addWidget(self.canvas) splitter.addWidget(self.control_widget) @@ -1140,17 +1148,17 @@ class OverviewWidget(QtGui.QWidget): def make_table(self): - self.control_widget = QtGui.QWidget() - vbox = QtGui.QVBoxLayout() - minibox = QtGui.QHBoxLayout() + self.control_widget = QWidget() + vbox = QVBoxLayout() + minibox = QHBoxLayout() vbox.addWidget(self.table) self.table.setHorizontalHeaderLabels(['','param']) for index, width in enumerate([25,50]): self.table.setColumnWidth(index, width) - self.log = QtGui.QCheckBox('log') + self.log = QCheckBox('log') self.log.clicked.connect(self.plot) - self.export_button = QtGui.QPushButton('export curves') + self.export_button = QPushButton('export curves') self.export_button.clicked.connect(self.export) @@ -1160,7 +1168,7 @@ class OverviewWidget(QtGui.QWidget): self.control_widget.setLayout(vbox) def export(self): - folder = str(QtGui.QFileDialog.getExistingDirectory(self, "Select directory to save curves")) + folder = str(QFileDialog.getExistingDirectory(self, "Select directory to save curves")) params = self.select() for param in params: for database in self.databaselist: @@ -1187,7 +1195,7 @@ class OverviewWidget(QtGui.QWidget): index = self.table.rowCount() self.table.insertRow(index) - checkboxwidget = QtGui.QCheckBox() + checkboxwidget = QCheckBox() if param in params: checkboxwidget.setChecked(1) else: @@ -1195,7 +1203,7 @@ class OverviewWidget(QtGui.QWidget): self.table.setCellWidget(index,0, checkboxwidget) checkboxwidget.clicked.connect(self.plot) - item = QtGui.QLabel(param) + item = QLabel(param) self.table.setCellWidget(index, 1, item) self.plot() @@ -1228,25 +1236,25 @@ class OverviewWidget(QtGui.QWidget): self.ax.semilogy() self.canvas.draw() -class PeakWidget(QtGui.QWidget): +class PeakWidget(QWidget): def __init__(self, database, parent=None): super(PeakWidget, self).__init__(parent) self.database = database # create a QTableWidget - self.table = QtGui.QTableWidget(0, 3, self) + self.table = QTableWidget(0, 3, self) self.table.horizontalHeader().setStretchLastSection(True) self.table.verticalHeader().setVisible(False) self.table.itemChanged.connect(self.save) - self.btn_add_row = QtGui.QPushButton('+', self) + self.btn_add_row = QPushButton('+', self) self.btn_add_row.clicked.connect(self.add_row) - self.buttonRemove = QtGui.QPushButton('-', self) + self.buttonRemove = QPushButton('-', self) self.buttonRemove.clicked.connect(self.remove) - vbox = QtGui.QVBoxLayout() - hbox = QtGui.QHBoxLayout() + vbox = QVBoxLayout() + hbox = QHBoxLayout() hbox.addWidget(self.btn_add_row) hbox.addWidget(self.buttonRemove) @@ -1270,7 +1278,7 @@ class PeakWidget(QtGui.QWidget): self.table.insertRow(rowindex) if row is not None: for index in range(3): - newitem = QtGui.QTableWidgetItem(str(row[index])) + newitem = QTableWidgetItem(str(row[index])) self.table.setItem(rowindex, index, newitem) def remove(self): @@ -1356,7 +1364,7 @@ def find_unused_rodkey(rodkey, rods): return newkey if __name__ == "__main__": - app = QtGui.QApplication(sys.argv) + app = QApplication(sys.argv) main = Window() main.resize(1000, 600) diff --git a/scripts/binoculars-gui b/scripts/binoculars-gui index 2b60fee..f4b15fc 100755 --- a/scripts/binoculars-gui +++ b/scripts/binoculars-gui @@ -3,20 +3,28 @@ from __future__ import unicode_literals import sys import os -import glob -import numpy import json -import itertools import signal import subprocess import socket import threading + +import numpy import matplotlib.figure import matplotlib.image -from mpl_toolkits.mplot3d import Axes3D -from PyQt4 import QtGui, QtCore, Qt -from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg, NavigationToolbar2QTAgg +from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg, NavigationToolbar2QT + +# from mpl_toolkits.mplot3d import Axes3D + +from PyQt5.Qt import (Qt) # noqa +from PyQt5.QtCore import (QThread, pyqtSignal) +from PyQt5.QtGui import (QPainter) +from PyQt5.QtWidgets import (QAction, QApplication, QStyle, QSlider, QMenuBar, QTabWidget, + QFileDialog, QStatusBar, QMessageBox, QRadioButton, + QButtonGroup, QCheckBox, QPushButton, QHBoxLayout, + QVBoxLayout, QSplitter, QTableWidgetItem, QTableWidget, + QLabel, QLineEdit, QStyleOptionSlider, QMainWindow, QWidget) #python3 support PY3 = sys.version_info > (3,) @@ -27,8 +35,8 @@ else: import SocketServer as socketserver import Queue as queue + def set_src(): - import sys import os.path as osp dirpath = osp.join(osp.dirname(osp.abspath(__file__)), osp.pardir) sys.path.insert(0, osp.abspath(dirpath)) @@ -49,7 +57,7 @@ except ImportError: #RangeSlider is taken from https://www.mail-archive.com/pyqt@riverbankcomputing.com/msg22889.html -class RangeSlider(QtGui.QSlider): +class RangeSlider(QSlider): """ A slider for ranges. This class provides a dual-slider for ranges, where there is a defined @@ -65,8 +73,8 @@ class RangeSlider(QtGui.QSlider): self._low = self.minimum() self._high = self.maximum() - self.pressed_control = QtGui.QStyle.SC_None - self.hover_control = QtGui.QStyle.SC_None + self.pressed_control = QStyle.SC_None + self.hover_control = QStyle.SC_None self.click_offset = 0 # 0 for the low, 1 for the high, -1 for both @@ -89,37 +97,37 @@ class RangeSlider(QtGui.QSlider): def paintEvent(self, event): # based on http://qt.gitorious.org/qt/qt/blobs/master/src/gui/widgets/qslider.cpp - painter = QtGui.QPainter(self) - style = QtGui.QApplication.style() + painter = QPainter(self) + style = QApplication.style() for i, value in enumerate([self._low, self._high]): - opt = QtGui.QStyleOptionSlider() + opt = QStyleOptionSlider() self.initStyleOption(opt) # Only draw the groove for the first slider so it doesn't get drawn # on top of the existing ones every time if i == 0: - opt.subControls = QtGui.QStyle.SC_SliderHandle # QtGui.QStyle.SC_SliderGroove | QtGui.QStyle.SC_SliderHandle + opt.subControls = QStyle.SC_SliderHandle # QStyle.SC_SliderGroove | QStyle.SC_SliderHandle else: - opt.subControls = QtGui.QStyle.SC_SliderHandle + opt.subControls = QStyle.SC_SliderHandle if self.tickPosition() != self.NoTicks: - opt.subControls |= QtGui.QStyle.SC_SliderTickmarks + opt.subControls |= QStyle.SC_SliderTickmarks if self.pressed_control: opt.activeSubControls = self.pressed_control - opt.state |= QtGui.QStyle.State_Sunken + opt.state |= QStyle.State_Sunken else: opt.activeSubControls = self.hover_control opt.sliderPosition = value opt.sliderValue = value - style.drawComplexControl(QtGui.QStyle.CC_Slider, opt, painter, self) + style.drawComplexControl(QStyle.CC_Slider, opt, painter, self) def mousePressEvent(self, event): event.accept() - style = QtGui.QApplication.style() + style = QApplication.style() button = event.button() # In a normal slider control, when the user clicks on a point in the @@ -129,7 +137,7 @@ class RangeSlider(QtGui.QSlider): # slider parts if button: - opt = QtGui.QStyleOptionSlider() + opt = QStyleOptionSlider() self.initStyleOption(opt) self.active_slider = -1 @@ -147,24 +155,24 @@ class RangeSlider(QtGui.QSlider): break if self.active_slider < 0: - self.pressed_control = QtGui.QStyle.SC_SliderHandle + self.pressed_control = QStyle.SC_SliderHandle self.click_offset = self.__pixelPosToRangeValue(self.__pick(event.pos())) self.triggerAction(self.SliderMove) self.setRepeatAction(self.SliderNoAction) else: event.ignore() - def mouseReleaseEvent(self, event): - self.emit(QtCore.SIGNAL('sliderReleased()')) + def mouseReleaseEvent(self, _event): + self.sliderReleased.emit() def mouseMoveEvent(self, event): - if self.pressed_control != QtGui.QStyle.SC_SliderHandle: + if self.pressed_control != QStyle.SC_SliderHandle: event.ignore() return event.accept() new_pos = self.__pixelPosToRangeValue(self.__pick(event.pos())) - opt = QtGui.QStyleOptionSlider() + opt = QStyleOptionSlider() self.initStyleOption(opt) if self.active_slider < 0: @@ -192,23 +200,23 @@ class RangeSlider(QtGui.QSlider): self.update() - self.emit(QtCore.SIGNAL('sliderMoved(int)'), new_pos) + self.sliderMoved.emit(new_pos) def __pick(self, pt): - if self.orientation() == QtCore.Qt.Horizontal: + if self.orientation() == Qt.Horizontal: return pt.x() else: return pt.y() def __pixelPosToRangeValue(self, pos): - opt = QtGui.QStyleOptionSlider() + opt = QStyleOptionSlider() self.initStyleOption(opt) - style = QtGui.QApplication.style() + style = QApplication.style() gr = style.subControlRect(style.CC_Slider, opt, style.SC_SliderGroove, self) sr = style.subControlRect(style.CC_Slider, opt, style.SC_SliderHandle, self) - if self.orientation() == QtCore.Qt.Horizontal: + if self.orientation() == Qt.Horizontal: slider_length = sr.width() slider_min = gr.x() slider_max = gr.right() - slider_length + 1 @@ -222,50 +230,50 @@ class RangeSlider(QtGui.QSlider): opt.upsideDown) -class Window(QtGui.QMainWindow): +class Window(QMainWindow): def __init__(self, parent=None): super(Window, self).__init__(parent) - newproject = QtGui.QAction("New project", self) + newproject = QAction("New project", self) newproject.triggered.connect(self.newproject) - loadproject = QtGui.QAction("Open project", self) + loadproject = QAction("Open project", self) loadproject.triggered.connect(self.loadproject) - saveproject = QtGui.QAction("Save project", self) + saveproject = QAction("Save project", self) saveproject.triggered.connect(self.saveproject) - addspace = QtGui.QAction("Import space", self) + addspace = QAction("Import space", self) addspace.triggered.connect(self.add_to_project) - savespace = QtGui.QAction("Export space", self) + savespace = QAction("Export space", self) savespace.triggered.connect(self.exportspace) - menu_bar = QtGui.QMenuBar() - file = menu_bar.addMenu("&File") - file.addAction(newproject) - file.addAction(loadproject) - file.addAction(saveproject) - file.addAction(addspace) - file.addAction(savespace) + menu_bar = QMenuBar() + f = menu_bar.addMenu("&File") + f.addAction(newproject) + f.addAction(loadproject) + f.addAction(saveproject) + f.addAction(addspace) + f.addAction(savespace) - merge = QtGui.QAction("Merge", self) + merge = QAction("Merge", self) merge.triggered.connect(self.merge) - subtract = QtGui.QAction("Subtract", self) + subtract = QAction("Subtract", self) subtract.triggered.connect(self.subtract) edit = menu_bar.addMenu("&Edit") edit.addAction(merge) edit.addAction(subtract) - start_server = QtGui.QAction("Start server queue", self) + start_server = QAction("Start server queue", self) start_server.triggered.connect(lambda: self.open_server(startq=True)) - stop_server = QtGui.QAction("Stop server queue", self) + stop_server = QAction("Stop server queue", self) stop_server.triggered.connect(self.kill_server) - recieve = QtGui.QAction("Open for spaces", self) + recieve = QAction("Open for spaces", self) recieve.triggered.connect(lambda: self.open_server(startq=False)) serve = menu_bar.addMenu("&Serve") @@ -273,11 +281,11 @@ class Window(QtGui.QMainWindow): serve.addAction(stop_server) serve.addAction(recieve) - self.tab_widget = QtGui.QTabWidget(self) + self.tab_widget = QTabWidget(self) self.tab_widget.setTabsClosable(True) self.tab_widget.tabCloseRequested.connect(self.tab_widget.removeTab) - self.statusbar = QtGui.QStatusBar() + self.statusbar = QStatusBar() self.setCentralWidget(self.tab_widget) self.setMenuBar(menu_bar) @@ -297,10 +305,10 @@ class Window(QtGui.QMainWindow): def loadproject(self, filename=None): if not filename: - dialog = QtGui.QFileDialog(self, "Load project"); - dialog.setFilter('binoculars project file (*.proj)'); - dialog.setFileMode(QtGui.QFileDialog.ExistingFiles); - dialog.setAcceptMode(QtGui.QFileDialog.AcceptOpen); + dialog = QFileDialog(self, "Load project") + dialog.setNameFilters(['binoculars project file (*.proj)']) + dialog.setFileMode(QFileDialog.ExistingFiles) + dialog.setAcceptMode(QFileDialog.AcceptOpen) if not dialog.exec_(): return fname = dialog.selectedFiles() @@ -312,18 +320,18 @@ class Window(QtGui.QMainWindow): self.tab_widget.addTab(widget, short_filename(str(name))) self.tab_widget.setCurrentWidget(widget) except Exception as e: - QtGui.QMessageBox.critical(self, 'Load project', 'Unable to load project from {}: {}'.format(fname, e)) + QMessageBox.critical(self, 'Load project', 'Unable to load project from {}: {}'.format(fname, e)) else: widget = ProjectWidget.fromfile(filename, parent=self) self.tab_widget.addTab(widget, short_filename(filename)) def saveproject(self): widget = self.tab_widget.currentWidget() - dialog = QtGui.QFileDialog(self, "Save project"); - dialog.setFilter('binoculars project file (*.proj)'); - dialog.setDefaultSuffix('proj'); - dialog.setFileMode(QtGui.QFileDialog.AnyFile); - dialog.setAcceptMode(QtGui.QFileDialog.AcceptSave); + dialog = QFileDialog(self, "Save project") + dialog.setNameFilters(['binoculars project file (*.proj)']) + dialog.setDefaultSuffix('proj') + dialog.setFileMode(QFileDialog.AnyFile) + dialog.setAcceptMode(QFileDialog.AcceptSave) if not dialog.exec_(): return fname = dialog.selectedFiles()[0] @@ -334,16 +342,16 @@ class Window(QtGui.QMainWindow): self.tab_widget.setTabText(index, short_filename(fname)) widget.tofile(fname) except Exception as e: - QtGui.QMessageBox.critical(self, 'Save project', 'Unable to save project to {}: {}'.format(fname, e)) + QMessageBox.critical(self, 'Save project', 'Unable to save project to {}: {}'.format(fname, e)) def add_to_project(self): if self.tab_widget.count() == 0: self.newproject() - dialog = QtGui.QFileDialog(self, "Import spaces"); - dialog.setFilter('binoculars space file (*.hdf5)'); - dialog.setFileMode(QtGui.QFileDialog.ExistingFiles); - dialog.setAcceptMode(QtGui.QFileDialog.AcceptOpen); + dialog = QFileDialog(self, "Import spaces") + dialog.setNameFilters(['binoculars space file (*.hdf5)']) + dialog.setFileMode(QFileDialog.ExistingFiles) + dialog.setAcceptMode(QFileDialog.AcceptOpen) if not dialog.exec_(): return fname = dialog.selectedFiles() @@ -353,49 +361,49 @@ class Window(QtGui.QMainWindow): try: widget = self.tab_widget.currentWidget() widget.addspace(str(name), True) - except Exception as e: + except Exception as _e: raise - #QtGui.QMessageBox.critical(self, 'Import spaces', 'Unable to import space {}: {}'.format(str(name), e)) + #QMessageBox.critical(self, 'Import spaces', 'Unable to import space {}: {}'.format(str(name), e)) def exportspace(self): widget = self.tab_widget.currentWidget() - dialog = QtGui.QFileDialog(self, "save mesh"); - dialog.setFileMode(QtGui.QFileDialog.AnyFile); - dialog.setAcceptMode(QtGui.QFileDialog.AcceptSave); + dialog = QFileDialog(self, "save mesh") + dialog.setFileMode(QFileDialog.AnyFile) + dialog.setAcceptMode(QFileDialog.AcceptSave) if not dialog.exec_(): return fname = dialog.selectedFiles()[0] if not fname: return try: - index = self.tab_widget.currentIndex() + _index = self.tab_widget.currentIndex() widget.space_to_file(str(fname)) except Exception as e: - QtGui.QMessageBox.critical(self, 'export fitdata', 'Unable to save mesh to {}: {}'.format(fname, e)) + QMessageBox.critical(self, 'export fitdata', 'Unable to save mesh to {}: {}'.format(fname, e)) def merge(self): widget = self.tab_widget.currentWidget() - dialog = QtGui.QFileDialog(self, "save mesh"); - dialog.setFilter('binoculars space file (*.hdf5)'); - dialog.setDefaultSuffix('hdf5'); - dialog.setFileMode(QtGui.QFileDialog.AnyFile); - dialog.setAcceptMode(QtGui.QFileDialog.AcceptSave); + dialog = QFileDialog(self, "save mesh") + dialog.setNameFilters(['binoculars space file (*.hdf5)']) + dialog.setDefaultSuffix('hdf5') + dialog.setFileMode(QFileDialog.AnyFile) + dialog.setAcceptMode(QFileDialog.AcceptSave) if not dialog.exec_(): return fname = dialog.selectedFiles()[0] if not fname: return try: - index = self.tab_widget.currentIndex() + _index = self.tab_widget.currentIndex() widget.merge(str(fname)) except Exception as e: - QtGui.QMessageBox.critical(self, 'merge', 'Unable to save mesh to {}: {}'.format(fname, e)) + QMessageBox.critical(self, 'merge', 'Unable to save mesh to {}: {}'.format(fname, e)) def subtract(self): - dialog = QtGui.QFileDialog(self, "subtract space"); - dialog.setFilter('binoculars space file (*.hdf5)'); - dialog.setFileMode(QtGui.QFileDialog.ExistingFiles); - dialog.setAcceptMode(QtGui.QFileDialog.AcceptOpen); + dialog = QFileDialog(self, "subtract space") + dialog.setNameFilters(['binoculars space file (*.hdf5)']) + dialog.setFileMode(QFileDialog.ExistingFiles) + dialog.setAcceptMode(QFileDialog.AcceptOpen) if not dialog.exec_(): return fname = dialog.selectedFiles() @@ -406,7 +414,7 @@ class Window(QtGui.QMainWindow): widget = self.tab_widget.currentWidget() widget.subtractspace(str(name)) except Exception as e: - QtGui.QMessageBox.critical(self, 'Import spaces', 'Unable to import space {}: {}'.format(fname, e)) + QMessageBox.critical(self, 'Import spaces', 'Unable to import space {}: {}'.format(fname, e)) def open_server(self, startq=True): if len(self.threads) != 0: @@ -470,9 +478,9 @@ class Window(QtGui.QMainWindow): serverwidget.limitwidget.refresh() -class UpdateThread(QtCore.QThread): +class UpdateThread(QThread): fq = queue.Queue() - data_found = QtCore.pyqtSignal(object) + data_found = pyqtSignal(object) def run(self): delay = binoculars.util.loop_delayer(1) @@ -510,9 +518,9 @@ class SpaceTCPHandler(socketserver.BaseRequestHandler): self.server.q.put((command, space)) -class HiddenToolbar(NavigationToolbar2QTAgg): +class HiddenToolbar(NavigationToolbar2QT): def __init__(self, show_coords, update_sliders, canvas): - NavigationToolbar2QTAgg.__init__(self, canvas, None) + NavigationToolbar2QT.__init__(self, canvas, None) self.show_coords = show_coords self.update_sliders = update_sliders self.zoom() @@ -534,7 +542,7 @@ class HiddenToolbar(NavigationToolbar2QTAgg): self.update_sliders(self.inaxes) -class ProjectWidget(QtGui.QWidget): +class ProjectWidget(QWidget): def __init__(self, filelist, key=None, projection=None, parent=None): super(ProjectWidget, self).__init__(parent) self.parent = parent @@ -543,48 +551,48 @@ class ProjectWidget(QtGui.QWidget): self.canvas = FigureCanvasQTAgg(self.figure) self.toolbar = HiddenToolbar(self.show_coords, self.update_sliders, self.canvas) - self.lin = QtGui.QRadioButton('lin', self) + self.lin = QRadioButton('lin', self) self.lin.setChecked(False) self.lin.toggled.connect(self.plot) - self.log = QtGui.QRadioButton('log', self) + self.log = QRadioButton('log', self) self.log.setChecked(True) self.log.toggled.connect(self.plot) - self.loglog = QtGui.QRadioButton('loglog', self) + self.loglog = QRadioButton('loglog', self) self.loglog.setChecked(False) self.loglog.toggled.connect(self.plot) - self.loggroup = QtGui.QButtonGroup(self) + self.loggroup = QButtonGroup(self) self.loggroup.addButton(self.lin) self.loggroup.addButton(self.log) self.loggroup.addButton(self.loglog) - self.swap_axes = QtGui.QCheckBox('ax', self) + self.swap_axes = QCheckBox('ax', self) self.swap_axes.setChecked(False) self.swap_axes.stateChanged.connect(self.plot) - self.samerange = QtGui.QCheckBox('same', self) + self.samerange = QCheckBox('same', self) self.samerange.setChecked(False) self.samerange.stateChanged.connect(self.update_colorbar) - self.legend = QtGui.QCheckBox('legend', self) + self.legend = QCheckBox('legend', self) self.legend.setChecked(True) self.legend.stateChanged.connect(self.plot) - self.threed = QtGui.QCheckBox('3d', self) + self.threed = QCheckBox('3d', self) self.threed.setChecked(False) self.threed.stateChanged.connect(self.plot) - self.auto_update = QtGui.QCheckBox('auto', self) + self.auto_update = QCheckBox('auto', self) self.auto_update.setChecked(True) - self.datarange = RangeSlider(Qt.Qt.Horizontal) + self.datarange = RangeSlider(Qt.Horizontal) self.datarange.setMinimum(0) self.datarange.setMaximum(250) self.datarange.setLow(0) self.datarange.setHigh(self.datarange.maximum()) - self.datarange.setTickPosition(QtGui.QSlider.TicksBelow) + self.datarange.setTickPosition(QSlider.TicksBelow) self.datarange.sliderMoved.connect(self.update_colorbar) self.table = TableWidget(filelist) @@ -594,10 +602,10 @@ class ProjectWidget(QtGui.QWidget): self.key = key self.projection = projection - self.button_save = QtGui.QPushButton('save image') + self.button_save = QPushButton('save image') self.button_save.clicked.connect(self.save) - self.button_refresh = QtGui.QPushButton('refresh') + self.button_refresh = QPushButton('refresh') self.button_refresh.clicked.connect(self.table.select) self.limitwidget = LimitWidget(self.table.plotaxes) @@ -609,19 +617,19 @@ class ProjectWidget(QtGui.QWidget): self.table.select() def initUI(self): - self.control_widget = QtGui.QWidget(self) - hbox = QtGui.QHBoxLayout() - left = QtGui.QVBoxLayout() + self.control_widget = QWidget(self) + hbox = QHBoxLayout() + left = QVBoxLayout() - pushbox = QtGui.QHBoxLayout() + pushbox = QHBoxLayout() pushbox.addWidget(self.button_save) pushbox.addWidget(self.button_refresh) left.addLayout(pushbox) - radiobox = QtGui.QHBoxLayout() - self.group = QtGui.QButtonGroup(self) + radiobox = QHBoxLayout() + self.group = QButtonGroup(self) for label in ['stack', 'grid']: - rb = QtGui.QRadioButton(label, self.control_widget) + rb = QRadioButton(label, self.control_widget) rb.setChecked(True) self.group.addButton(rb) radiobox.addWidget(rb) @@ -630,7 +638,7 @@ class ProjectWidget(QtGui.QWidget): radiobox.addWidget(self.log) radiobox.addWidget(self.loglog) - datarangebox = QtGui.QHBoxLayout() + datarangebox = QHBoxLayout() datarangebox.addWidget(self.samerange) datarangebox.addWidget(self.legend) datarangebox.addWidget(self.threed) @@ -645,7 +653,7 @@ class ProjectWidget(QtGui.QWidget): left.addWidget(self.limitwidget) self.control_widget.setLayout(left) - splitter = QtGui.QSplitter(QtCore.Qt.Horizontal) + splitter = QSplitter(Qt.Horizontal) splitter.addWidget(self.control_widget) splitter.addWidget(self.canvas) @@ -733,7 +741,7 @@ class ProjectWidget(QtGui.QWidget): return matplotlib.colors.Normalize(vmin, vmax) def get_normlist(self): - log = self.log.isChecked() + _log = self.log.isChecked() same = self.samerange.checkState() if same: @@ -840,7 +848,7 @@ class ProjectWidget(QtGui.QWidget): list(map(self.table.remove, self.table.selection)) self.table.addspace(filename, True) except Exception as e: - QtGui.QMessageBox.critical(self, 'Merge', 'Unable to merge the meshes. {}'.format(e)) + QMessageBox.critical(self, 'Merge', 'Unable to merge the meshes. {}'.format(e)) def subtractspace(self, filename): try: @@ -853,7 +861,7 @@ class ProjectWidget(QtGui.QWidget): self.table.remove(selected_filename) self.table.addspace(newfilename, True) except Exception as e: - QtGui.QMessageBox.critical(self, 'Subtract', 'Unable to subtract the meshes. {}'.format(e)) + QMessageBox.critical(self, 'Subtract', 'Unable to subtract the meshes. {}'.format(e)) def errormessage(self, message): self.figure.clear() @@ -895,7 +903,7 @@ class ProjectWidget(QtGui.QWidget): dict['projection'] = self.projection if filename == None: - filename = str(QtGui.QFileDialog.getSaveFileName(self, 'Save Project', '.')) + filename = str(QFileDialog.getSaveFileName(self, 'Save Project', '.')) with open(filename, 'w') as fp: json.dump(dict, fp) @@ -903,19 +911,19 @@ class ProjectWidget(QtGui.QWidget): @classmethod def fromfile(cls, filename=None, parent=None): if filename == None: - filename = str(QtGui.QFileDialog.getOpenFileName(self, 'Open Project', '.', '*.proj')) + filename = str(QFileDialog.getOpenFileName(cls, 'Open Project', '.', '*.proj')) try: with open(filename, 'r') as fp: dict = json.load(fp) except IOError as e: - raise self.error.showMessage("unable to open '{0}' as project file (original error: {1!r})".format(filename, e)) + raise cls.error.showMessage("unable to open '{0}' as project file (original error: {1!r})".format(filename, e)) newlist = [] for fn in dict['filelist']: if not os.path.exists(fn): - warningbox = QtGui.QMessageBox(2, 'Warning', 'Cannot find space at path {0}; locate proper space'.format(fn), buttons=QtGui.QMessageBox.Open) + warningbox = QMessageBox(2, 'Warning', 'Cannot find space at path {0}; locate proper space'.format(fn), buttons=QMessageBox.Open) warningbox.exec_() - newname = str(QtGui.QFileDialog.getOpenFileName(caption='Open space {0}'.format(fn), directory='.', filter='*.hdf5')) + newname = str(QFileDialog.getOpenFileName(caption='Open space {0}'.format(fn), directory='.', filter='*.hdf5')) newlist.append(newname) else: newlist.append(fn) @@ -926,15 +934,16 @@ class ProjectWidget(QtGui.QWidget): def addspace(self, filename=None, add=False): if filename == None: - filename = str(QtGui.QFileDialog.getOpenFileName(self, 'Open Project', '.', '*.hdf5')) + filename = str(QFileDialog.getOpenFileName(self, 'Open Project', '.', '*.hdf5')) self.table.add_space(filename, add) def save(self): - dialog = QtGui.QFileDialog(self, "Save image"); - dialog.setFilter('Portable Network Graphics (*.png);;Portable Document Format (*.pdf)'); - dialog.setDefaultSuffix('png'); - dialog.setFileMode(QtGui.QFileDialog.AnyFile); - dialog.setAcceptMode(QtGui.QFileDialog.AcceptSave); + dialog = QFileDialog(self, "Save image") + dialog.setNameFilters(['Portable Network Graphics (*.png)', + 'Portable Document Format (*.pdf)']) + dialog.setDefaultSuffix('png') + dialog.setFileMode(QFileDialog.AnyFile) + dialog.setAcceptMode(QFileDialog.AcceptSave) if not dialog.exec_(): return fname = dialog.selectedFiles()[0] @@ -943,7 +952,7 @@ class ProjectWidget(QtGui.QWidget): try: self.figure.savefig(str(fname)) except Exception as e: - QtGui.QMessageBox.critical(self, 'Save image', 'Unable to save image to {}: {}'.format(fname, e)) + QMessageBox.critical(self, 'Save image', 'Unable to save image to {}: {}'.format(fname, e)) def space_to_file(self, fname): ext = os.path.splitext(fname)[-1] @@ -978,7 +987,7 @@ def short_filename(filename): return filename.split('/')[-1].split('.')[0] -class SpaceContainer(QtGui.QTableWidgetItem): +class SpaceContainer(QTableWidgetItem): def __init__(self, label, space=None): super(SpaceContainer, self).__init__(short_filename(label)) self.label = label @@ -998,23 +1007,23 @@ class SpaceContainer(QtGui.QTableWidgetItem): else: return self.space.axes - def add_to_space(space): - if self.space == None: + def add_to_space(self, space): + if self.space is None: newspace = binoculars.space.Space.fromfile(self.label) + space - newspsace.tofile(self.label) + newspace.tofile(self.label) else: self.space += space -class TableWidget(QtGui.QWidget): - selectionError = QtCore.pyqtSignal(str, name = 'Selection Error') - plotaxesChanged = QtCore.pyqtSignal(binoculars.space.Axes, name = 'plot axes changed') +class TableWidget(QWidget): + selectionError = pyqtSignal(str, name = 'Selection Error') + plotaxesChanged = pyqtSignal(binoculars.space.Axes, name = 'plot axes changed') def __init__(self, filelist = [],parent=None): super(TableWidget, self).__init__(parent) - hbox = QtGui.QHBoxLayout() + hbox = QHBoxLayout() - self.table = QtGui.QTableWidget(0, 4) + self.table = QTableWidget(0, 4) self.table.setHorizontalHeaderLabels(['', 'filename','labels', 'remove']) for index, width in enumerate([25,150,50,70]): @@ -1030,7 +1039,7 @@ class TableWidget(QtGui.QWidget): index = self.table.rowCount() self.table.insertRow(index) - checkboxwidget = QtGui.QCheckBox() + checkboxwidget = QCheckBox() checkboxwidget.setChecked(add) checkboxwidget.clicked.connect(self.select) self.table.setCellWidget(index,0, checkboxwidget) @@ -1038,10 +1047,10 @@ class TableWidget(QtGui.QWidget): container = SpaceContainer(filename, space) self.table.setItem(index, 1, container) - item = QtGui.QTableWidgetItem(','.join(list(ax.label.lower() for ax in container.get_ax()))) + item = QTableWidgetItem(','.join(list(ax.label.lower() for ax in container.get_ax()))) self.table.setItem(index, 2, item) - buttonwidget = QtGui.QPushButton('remove') + buttonwidget = QPushButton('remove') buttonwidget.clicked.connect(lambda: self.remove(filename)) self.table.setCellWidget(index,3, buttonwidget) if add: @@ -1099,9 +1108,9 @@ class TableWidget(QtGui.QWidget): def itercontainer(self): return iter(self.table.item(index, 1) for index in range(self.table.rowCount())) -class LimitWidget(QtGui.QWidget): - keydict = QtCore.pyqtSignal(dict, name = "keydict") - rangechange = QtCore.pyqtSignal(list, name = "rangechange") +class LimitWidget(QWidget): + keydict = pyqtSignal(dict, name = "keydict") + rangechange = pyqtSignal(list, name = "rangechange") def __init__(self, axes, parent=None): super(LimitWidget, self).__init__(parent) @@ -1117,12 +1126,12 @@ class LimitWidget(QtGui.QWidget): labels = list(ax.label for ax in axes) - vbox = QtGui.QVBoxLayout() - hbox = QtGui.QHBoxLayout() + vbox = QVBoxLayout() + hbox = QHBoxLayout() - self.projectionlabel = QtGui.QLabel(self) + self.projectionlabel = QLabel(self) self.projectionlabel.setText('projection along axis') - self.refreshbutton = QtGui.QPushButton('all') + self.refreshbutton = QPushButton('all') self.refreshbutton.clicked.connect(self.refresh) vbox.addWidget(self.projectionlabel) @@ -1131,7 +1140,7 @@ class LimitWidget(QtGui.QWidget): self.state = list() for label in labels: - self.checkbox.append(QtGui.QCheckBox(label, self)) + self.checkbox.append(QCheckBox(label, self)) for box in self.checkbox: self.state.append(box.checkState()) hbox.addWidget(box) @@ -1143,13 +1152,13 @@ class LimitWidget(QtGui.QWidget): vbox.addLayout(hbox) for label in labels: - self.qlabels.append(QtGui.QLabel(self)) - self.leftindicator.append(QtGui.QLineEdit(self)) - self.rightindicator.append(QtGui.QLineEdit(self)) - self.sliders.append(RangeSlider(Qt.Qt.Horizontal)) + self.qlabels.append(QLabel(self)) + self.leftindicator.append(QLineEdit(self)) + self.rightindicator.append(QLineEdit(self)) + self.sliders.append(RangeSlider(Qt.Horizontal)) for index, label in enumerate(labels): - box = QtGui.QHBoxLayout() + box = QHBoxLayout() box.addWidget(self.qlabels[index]) box.addWidget(self.leftindicator[index]) box.addWidget(self.sliders[index]) @@ -1169,7 +1178,7 @@ class LimitWidget(QtGui.QWidget): self.sliders[index].setMaximum(len(ax) - 1) self.sliders[index].setLow(0) self.sliders[index].setHigh(len(ax) - 1) - self.sliders[index].setTickPosition(QtGui.QSlider.TicksBelow) + self.sliders[index].setTickPosition(QSlider.TicksBelow) self.update_lines() @@ -1251,14 +1260,14 @@ class LimitWidget(QtGui.QWidget): def init_checkbox(self): while numpy.alen(self.state) - self.state.sum() > 2: - index = numpy.where(self.state == False)[-1] + _index = numpy.where(self.state == False)[-1] self.state[-1] = True for box, state in zip(self.checkbox, self.state): box.setChecked(state) def axes_update(self, axes): if not set(ax.label for ax in self.axes) == set(ax.label for ax in axes): - QtGui.QWidget().setLayout(self.layout()) + QWidget().setLayout(self.layout()) self.initUI(axes) self.send_signal() else: @@ -1298,7 +1307,7 @@ def is_empty(key): return False if __name__ == '__main__': - app = QtGui.QApplication(sys.argv) + app = QApplication(sys.argv) binoculars.space.silence_numpy_errors() diff --git a/scripts/binoculars-processgui b/scripts/binoculars-processgui index 3127cd6..a019dcf 100755 --- a/scripts/binoculars-processgui +++ b/scripts/binoculars-processgui @@ -9,7 +9,14 @@ import sys import os import time -from PyQt4 import QtGui, QtCore +from PyQt5.Qt import (Qt) +from PyQt5.QtWidgets import (QAction, QApplication, QTabWidget, + QFileDialog, QMessageBox, + QPushButton, QHBoxLayout, + QVBoxLayout, QSplitter, QTableWidgetItem, QTableWidget, + QLabel, QLineEdit, QMainWindow, QWidget, QComboBox, + QProgressDialog, QPalette, QDockWidget, + QColor) def set_src(): @@ -30,15 +37,15 @@ except ImportError: #--------------------------------------------CREATE MAIN WINDOW---------------------------------------- -class Window(QtGui.QMainWindow): +class Window(QMainWindow): def __init__(self): super(Window, self).__init__() self.initUI() - self.tab_widget = QtGui.QTabWidget(self) + self.tab_widget = QTabWidget(self) self.setCentralWidget(self.tab_widget) # add the close button for tabs - close = self.tab_widget.setTabsClosable(True) + self.tab_widget.setTabsClosable(True) self.tab_widget.tabCloseRequested.connect(self.close_tab) #method for close tabs @@ -47,62 +54,62 @@ class Window(QtGui.QMainWindow): def initUI(self): #we create the menu bar - openFile = QtGui.QAction('Open', self) - openFile.setShortcut('Ctrl+O') - openFile.setStatusTip('Open new File') - openFile.triggered.connect(self.ShowFile) + openfile = QAction('Open', self) + openfile.setShortcut('Ctrl+O') + openfile.setStatusTip('Open new File') + openfile.triggered.connect(self.ShowFile) - saveFile = QtGui.QAction('Save', self) - saveFile.setShortcut('Ctrl+S') - saveFile.setStatusTip('Save File') - saveFile.triggered.connect(self.Save) + savefile = QAction('Save', self) + savefile.setShortcut('Ctrl+S') + savefile.setStatusTip('Save File') + savefile.triggered.connect(self.Save) - Create = QtGui.QAction('Create', self) - Create.setStatusTip('Create Configfile') - Create.triggered.connect(self.New_Config) + create = QAction('Create', self) + create.setStatusTip('Create Configfile') + create.triggered.connect(self.New_Config) menubar = self.menuBar() - fileMenu = menubar.addMenu('&File') - fileMenu.addAction(openFile) - fileMenu.addAction(saveFile) - fileMenu = menubar.addMenu('&New Configfile') - fileMenu.addAction(Create) + filemenu = menubar.addMenu('&File') + filemenu.addAction(openfile) + filemenu.addAction(savefile) + filemenu = menubar.addMenu('&New Configfile') + filemenu.addAction(create) #we configue the main windows - palette = QtGui.QPalette() - palette.setColor(QtGui.QPalette.Background, QtCore.Qt.gray) + palette = QPalette() + palette.setColor(QPalette.Background, Qt.gray) self.setPalette(palette) self.setGeometry(50, 100, 700, 700) self.setWindowTitle('Binoculars processgui') self.show() - self.ListCommand = QtGui.QTableWidget(1, 2, self) + self.ListCommand = QTableWidget(1, 2, self) self.ListCommand.verticalHeader().setVisible(True) self.ListCommand.horizontalHeader().setVisible(False) self.ListCommand.horizontalHeader().stretchSectionCount() self.ListCommand.setColumnWidth(0, 80) self.ListCommand.setColumnWidth(1, 80) self.ListCommand.setRowCount(0) - self.buttonDelete = QtGui.QPushButton('Delete', self) - self.connect(self.buttonDelete, QtCore.SIGNAL("clicked()"), self.removeConf) - self.process = QtGui.QPushButton('run', self) + self.buttonDelete = QPushButton('Delete', self) + self.buttonDetete.clicked.connect(self.removeConf) + self.process = QPushButton('run', self) self.process.setStyleSheet("background-color: darkred") - self.connect(self.process, QtCore.SIGNAL("clicked()"), self.run) + self.process.clicked.connect(self.run) - self.wid = QtGui.QWidget() - self.CommandLayout = QtGui.QVBoxLayout() + self.wid = QWidget() + self.CommandLayout = QVBoxLayout() self.CommandLayout.addWidget(self.ListCommand) self.CommandLayout.addWidget(self.process) self.CommandLayout.addWidget(self.buttonDelete) self.wid.setLayout(self.CommandLayout) - self.Dock = QtGui.QDockWidget() - self.Dock.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea) - self.Dock.setFeatures(QtGui.QDockWidget.NoDockWidgetFeatures) + self.Dock = QDockWidget() + self.Dock.setAllowedAreas(Qt.LeftDockWidgetArea) + self.Dock.setFeatures(QDockWidget.NoDockWidgetFeatures) self.Dock.setWidget(self.wid) self.Dock.setMaximumWidth(200) self.Dock.setMinimumWidth(200) - self.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.Dock) + self.addDockWidget(Qt.DockWidgetArea(1), self.Dock) def removeConf(self): self.ListCommand.removeRow(self.ListCommand.currentRow()) @@ -114,9 +121,9 @@ class Window(QtGui.QMainWindow): filename = self.tab_widget.tabText(index) self.ListCommand.insertRow(self.ListCommand.rowCount()) dic = {filename: cfg} - self.item1 = QtGui.QTableWidgetItem(str(command)) + self.item1 = QTableWidgetItem(str(command)) self.item1.command = command - self.item2 = QtGui.QTableWidgetItem(str(filename)) + self.item2 = QTableWidgetItem(str(filename)) self.item2.cfg = dic[filename] self.ListCommand.setItem(row, 0, self.item1) self.ListCommand.setItem(row, 1, self.item2) @@ -124,14 +131,14 @@ class Window(QtGui.QMainWindow): #We run the script and create a hdf5 file def run(self): maximum = self.ListCommand.rowCount() - pd = QtGui.QProgressDialog('running', 'Cancel', 0, maximum, self) - pd.setWindowModality(QtCore.Qt.WindowModal) + pd = QProgressDialog('running', 'Cancel', 0, maximum, self) + pd.setWindowModality(Qt.WindowModal) pd.show() def progress(cfg, command): if pd.wasCanceled(): raise KeyboardInterrupt - QtGui.QApplication.processEvents() + QApplication.processEvents() return binoculars.main.Main.from_object(cfg, command) try: for index in range(self.ListCommand.rowCount()): @@ -145,23 +152,23 @@ class Window(QtGui.QMainWindow): except BaseException as e: #cfg = self.ListCommand.item(index,1).cfg #print cfg - QtGui.QMessageBox.about(self, "Error", "There was an error processing one of the scans: {0}".format(e)) + QMessageBox.about(self, "Error", "There was an error processing one of the scans: {0}".format(e)) finally: pd.close() #we call the load function def ShowFile(self): - filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', '') + filename = QFileDialog.getOpenFileName(self, 'Open File', '') confwidget = Conf_Tab(self) confwidget.read_data(str(filename)) newIndex = self.tab_widget.addTab(confwidget, os.path.basename(str(filename))) - QtCore.QObject.connect(confwidget, QtCore.SIGNAL("command"), self.Add_To_Liste) + confwidget.command.connect(self.Add_To_Liste) self.tab_widget.setCurrentIndex(newIndex) #we call the save function def Save(self): - filename = QtGui.QFileDialog().getSaveFileName(self, 'Save', '', '*.txt') + filename = QFileDialog().getSaveFileName(self, 'Save', '', '*.txt') widget = self.tab_widget.currentWidget() widget.save(filename) @@ -169,37 +176,37 @@ class Window(QtGui.QMainWindow): def New_Config(self): widget = Conf_Tab(self) self.tab_widget.addTab(widget, 'New configfile') - QtCore.QObject.connect(widget, QtCore.SIGNAL("command"), self.Add_To_Liste) + widget.command.connect(self.Add_To_Liste) #---------------------------------------------------------------------------------------------------- #-----------------------------------------CREATE TABLE----------------------------------------------- -class Table(QtGui.QWidget): +class Table(QWidget): def __init__(self, label, parent=None): super(Table, self).__init__() # create a QTableWidget - self.table = QtGui.QTableWidget(1, 2, self) + self.table = QTableWidget(1, 2, self) self.table.setHorizontalHeaderLabels(['Parameter', 'Value', 'Comment']) self.table.horizontalHeader().setStretchLastSection(True) self.table.verticalHeader().setVisible(False) - self.table.setTextElideMode(QtCore.Qt.ElideLeft) + self.table.setTextElideMode(Qt.ElideLeft) #create combobox - self.combobox = QtGui.QComboBox() + self.combobox = QComboBox() #add items - self.cell = QtGui.QTableWidgetItem(QtCore.QString("type")) + self.cell = QTableWidgetItem("type") self.table.setItem(0, 0, self.cell) self.table.setCellWidget(0, 1, self.combobox) #we create pushbuttons and we call the method when we clic on - self.btn_add_row = QtGui.QPushButton('+', self) - self.connect(self.btn_add_row, QtCore.SIGNAL('clicked()'), self.add_row) - self.buttonRemove = QtGui.QPushButton('-', self) - self.connect(self.buttonRemove, QtCore.SIGNAL("clicked()"), self.remove) + self.btn_add_row = QPushButton('+', self) + self.btn_add_row.clicked.connect(self.add_row) + self.buttonRemove = QPushButton('-', self) + self.buttonRemove.clicked.connect(self.remove) #the dispositon of the table and the butttons - vbox = QtGui.QVBoxLayout() - hbox = QtGui.QHBoxLayout() + vbox = QVBoxLayout() + hbox = QHBoxLayout() hbox.addWidget(self.btn_add_row) hbox.addWidget(self.buttonRemove) @@ -227,7 +234,7 @@ class Table(QtGui.QWidget): if index == 0: yield key, str(self.table.cellWidget(index, 1).currentText()), comment elif self.table.item(index, 1): - if len(str(self.table.item(index, 1).text())) != 0 and self.table.item(index, 0).textColor() == QtGui.QColor('black'): + if len(str(self.table.item(index, 1).text())) != 0 and self.table.item(index, 0).textColor() == QColor('black'): yield key, str(self.table.item(index, 1).text()), comment #Here we put all values in tables @@ -237,18 +244,18 @@ class Table(QtGui.QWidget): box = self.table.cellWidget(0, 1) value = cfg[item].split(':') if len(value) > 1: - box.setCurrentIndex(box.findText(value[1], QtCore.Qt.MatchFixedString)) + box.setCurrentIndex(box.findText(value[1], Qt.MatchFixedString)) else: - box.setCurrentIndex(box.findText(cfg[item], QtCore.Qt.MatchFixedString)) + box.setCurrentIndex(box.findText(cfg[item], Qt.MatchFixedString)) elif item not in self.get_keys(): self.add_row() row = self.table.rowCount() for col in range(self.table.columnCount()): if col == 0: - newitem = QtGui.QTableWidgetItem(item) + newitem = QTableWidgetItem(item) self.table.setItem(row - 1, col, newitem) if col == 1: - newitem2 = QtGui.QTableWidgetItem(cfg[item]) + newitem2 = QTableWidgetItem(cfg[item]) self.table.setItem(row - 1, col, newitem2) else: index = self.get_keys().index(item) @@ -263,12 +270,12 @@ class Table(QtGui.QWidget): for index, key in enumerate(self.get_keys()): if str(key) in names: - self.table.item(index, 0).setTextColor(QtGui.QColor('black')) + self.table.item(index, 0).setTextColor(QColor('black')) self.table.item(index, 0).setToolTip(options[names.index(key)][1]) elif str(key) == 'type': - self.table.item(index, 0).setTextColor(QtGui.QColor('black')) + self.table.item(index, 0).setTextColor(QColor('black')) else: - self.table.item(index, 0).setTextColor(QtGui.QColor('gray')) + self.table.item(index, 0).setTextColor(QColor('gray')) def add_to_combo(self, items): self.combobox.clear() @@ -278,32 +285,31 @@ class Table(QtGui.QWidget): #-----------------------------------------CREATE CONFIG---------------------------------------------- -class Conf_Tab(QtGui.QWidget): +class Conf_Tab(QWidget): def __init__(self, parent=None): - - super(Conf_Tab, self).__init__() + super(Conf_Tab, self).__init__(parent) #we create 3 tables - self.Dis = Table(QtGui.QLabel('<strong>Dispatcher :</strong>')) - self.Inp = Table(QtGui.QLabel('<strong>Input :</strong>')) - self.Pro = Table(QtGui.QLabel('<strong>Projection :<strong>')) - self.select = QtGui.QComboBox() + self.Dis = Table(QLabel('<strong>Dispatcher :</strong>')) + self.Inp = Table(QLabel('<strong>Input :</strong>')) + self.Pro = Table(QLabel('<strong>Projection :<strong>')) + self.select = QComboBox() backends = list(backend.lower() for backend in binoculars.util.get_backends()) #we add the list of different backends on the select combobox - self.select.addItems(QtCore.QStringList(backends)) - self.add = QtGui.QPushButton('add') - self.connect(self.add, QtCore.SIGNAL("clicked()"), self.AddCommand) - self.scan = QtGui.QLineEdit() + self.select.addItems(backends) + self.add = QPushButton('add') + self.add.clicked.connect(self.AddCommand) + self.scan = QLineEdit() self.scan.setToolTip('scan selection example: 820 824') - vbox = QtGui.QVBoxLayout() - hbox = QtGui.QHBoxLayout() - splitter = QtGui.QSplitter(QtCore.Qt.Horizontal) + vbox = QVBoxLayout() + hbox = QHBoxLayout() + splitter = QSplitter(Qt.Horizontal) splitter.addWidget(self.Dis) splitter.addWidget(self.Inp) splitter.addWidget(self.Pro) hbox.addWidget(splitter) - commandbox = QtGui.QHBoxLayout() + commandbox = QHBoxLayout() commandbox.addWidget(self.add) commandbox.addWidget(self.scan) @@ -312,7 +318,7 @@ class Conf_Tab(QtGui.QWidget): vbox.addLayout(commandbox) #the dispositon of all elements of the gui - #Layout = QtGui.QGridLayout() + #Layout = QGridLayout() #Layout.addWidget(label1,1,1,1,2) #Layout.addWidget(label2,1,0,1,2) #Layout.addWidget(label3,1,2,1,2) @@ -325,15 +331,15 @@ class Conf_Tab(QtGui.QWidget): self.setLayout(vbox) #Here we call all methods for selected an ellement on differents combobox - self.Dis.add_to_combo(QtCore.QStringList(binoculars.util.get_dispatchers())) + self.Dis.add_to_combo(binoculars.util.get_dispatchers()) self.select.activated['QString'].connect(self.DataCombo) self.Inp.combobox.activated.connect(self.DataTableInp) self.Pro.combobox.activated.connect(self.DataTableInpPro) self.Dis.combobox.activated.connect(self.DataTableInpDis) def DataCombo(self, text): - self.Inp.add_to_combo(QtCore.QStringList(binoculars.util.get_inputs(str(text)))) - self.Pro.add_to_combo(QtCore.QStringList(binoculars.util.get_projections(str(text)))) + self.Inp.add_to_combo(binoculars.util.get_inputs(str(text))) + self.Pro.add_to_combo(binoculars.util.get_projections(str(text))) self.DataTableInp() self.DataTableInpPro() self.DataTableInpDis() @@ -349,7 +355,6 @@ class Conf_Tab(QtGui.QWidget): self.Pro.addDataConf(proj) def DataTableInpDis(self): - backend = str(self.select.currentText()) disp = binoculars.util.get_dispatcher_configkeys(str(self.Dis.combobox.currentText())) self.Dis.addDataConf(disp) @@ -401,7 +406,7 @@ class Conf_Tab(QtGui.QWidget): cfg = binoculars.util.ConfigFile.fromtxtfile(str(filename)) input_type = cfg.input['type'] backend, value = input_type.strip(' ').split(':') - self.select.setCurrentIndex(self.select.findText(backend, QtCore.Qt.MatchFixedString)) + self.select.setCurrentIndex(self.select.findText(backend, Qt.MatchFixedString)) self.DataCombo(backend) self.Dis.addData(cfg.dispatcher) self.Inp.addData(cfg.input) @@ -412,10 +417,10 @@ class Conf_Tab(QtGui.QWidget): scan = [str(self.scan.text())] cfg = self.get_configobj() commandconfig = (scan, cfg) - self.emit(QtCore.SIGNAL('command'), commandconfig) + self.command.emit(commandconfig) if __name__ == '__main__': - app = QtGui.QApplication(sys.argv) + app = QApplication(sys.argv) main = Window() main.show() |