Changeset 6280464 in sasview


Ignore:
Timestamp:
Nov 3, 2017 10:58:39 AM (7 years ago)
Author:
Piotr Rozyczko <rozyczko@…>
Branches:
ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc
Children:
412e069e
Parents:
304d082
Message:

More Qt5 related fixes.

Location:
src/sas
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • src/sas/qtgui/Calculators/DataOperationUtilityPanel.py

    r0849aec r6280464  
    140140            data1 = self.data1 
    141141            data2 = self.data2 
    142             exec("output = data1 %s data2" % operator) 
    143         except: 
    144             raise 
     142            output = eval("data1 %s data2" % operator) 
     143        except Exception as ex: 
     144            logging.error(ex) 
     145            return 
    145146 
    146147        self.output = output 
  • src/sas/qtgui/Calculators/DensityPanel.py

    r0849aec r6280464  
    6060 
    6161        # set validators 
    62         self.ui.editMolecularFormula.setValidator(FormulaValidator(self.ui.editMolecularFormula)) 
     62        #self.ui.editMolecularFormula.setValidator(FormulaValidator(self.ui.editMolecularFormula)) 
    6363 
    6464        rx = QtCore.QRegExp("[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?") 
     
    9494        self.mapper.addMapping(self.ui.editMassDensity     , MODEL.MASS_DENSITY) 
    9595 
    96         # FIXME DOESNT WORK WITH QT5 
    97         #self.mapper.toFirst() 
     96        self.mapper.toFirst() 
    9897 
    9998    def dataChanged(self, top, bottom): 
     
    140139 
    141140    def modelReset(self): 
    142         #self.model.beginResetModel() 
    143141        try: 
    144142            self.setMode(None) 
     
    148146        finally: 
    149147            pass 
    150             #self.model.endResetModel() 
    151148 
    152149    def displayHelp(self): 
  • src/sas/qtgui/Calculators/GenericScatteringCalculator.py

    r0849aec r6280464  
    135135                                          "SLD files (*.SLD *.sld);;PDB files (*.pdb *.PDB);; " 
    136136                                          "OMF files (*.OMF *.omf);; " 
    137                                           "All files (*.*)") 
     137                                          "All files (*.*)")[0] 
    138138            if self.datafile: 
    139139                self.default_shape = str(self.cbShape.currentText()) 
  • src/sas/qtgui/Calculators/KiessigPanel.py

    r0849aec r6280464  
    5555            self.thickness.set_deltaq(dq=float(self.deltaq_in.text())) 
    5656            kiessing_result = self.thickness.compute_thickness() 
    57             float_as_str = "{:.3f}".format(kiessing_result) 
    58             self.lengthscale_out.setText(float_as_str) 
     57            if kiessing_result: 
     58                float_as_str = "{:.3f}".format(kiessing_result) 
     59                self.lengthscale_out.setText(float_as_str) 
     60            else: 
     61                # error or division by zero 
     62                self.lengthscale_out.setText("") 
     63 
    5964        except (ArithmeticError, ValueError): 
    6065            self.lengthscale_out.setText("") 
  • src/sas/qtgui/Calculators/ResolutionCalculatorPanel.py

    r0849aec r6280464  
    317317        if self.cbCustomSpectrum.currentText() == 'Add New': 
    318318            datafile = QtWidgets.QFileDialog.getOpenFileName( 
    319                 self, "Choose a spectral distribution file", "", 
    320                 "All files (*.*)", 
    321                 QtWidgets.QFileDialog.DontUseNativeDialog) 
     319                self, "Choose a spectral distribution file","", 
     320                "All files (*.*)", None, 
     321                QtWidgets.QFileDialog.DontUseNativeDialog)[0] 
    322322 
    323323            if datafile is None or str(datafile) == '': 
     
    568568        : return: image (numpy array) 
    569569        """ 
    570         # This fails in py3 with 
    571         # [Failure instance: Traceback: <class 'TypeError'>: 'map' object is not subscriptable 
    572         # INVESTIGATE 
    573         image = map(func, qx, qy, 
     570        image = list(map(func, qx, qy, 
    574571                    qx_min, qx_max, 
    575                     qy_min, qy_max)[0] 
     572                    qy_min, qy_max))[0] 
     573 
    576574        return image 
    577575 
     
    751749        self.plotter.plot() 
    752750        self.plotter.show() 
     751        self.plotter.update() 
    753752 
    754753    def drawLines(self): 
  • src/sas/qtgui/Calculators/SldPanel.py

    r0849aec r6280464  
    128128 
    129129        # set validators 
    130         self.ui.editMolecularFormula.setValidator(GuiUtils.FormulaValidator(self.ui.editMolecularFormula)) 
     130        # TODO: GuiUtils.FormulaValidator() crashes with Qt5 - fix 
     131        #self.ui.editMolecularFormula.setValidator(GuiUtils.FormulaValidator(self.ui.editMolecularFormula)) 
    131132 
    132133        rx = QtCore.QRegExp("[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?") 
     
    148149 
    149150        self.model.dataChanged.connect(self.dataChanged) 
    150         #QtCore.QObject.connect( 
    151         #    self.model, 
    152         #    QtCore.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), 
    153         #    self.dataChanged) 
    154151 
    155152        self.modelReset() 
     
    166163            self.mapper.addMapping(edit, key) 
    167164 
    168         # FIXME DOESNT WORK WITH QT5 
    169         #self.mapper.toFirst() 
     165        self.mapper.toFirst() 
    170166 
    171167    def dataChanged(self, top, bottom): 
     
    216212        finally: 
    217213            pass 
    218             #self.model.endResetModel() 
     214        #self.model.endResetModel() 
    219215 
    220216    def displayHelp(self): 
  • src/sas/qtgui/Calculators/SlitSizeCalculator.py

    r0849aec r6280464  
    44import os 
    55import sys 
     6import logging 
    67 
    78from PyQt5 import QtCore 
     
    6465            return 
    6566        loader = Loader() 
    66         data = loader.load(path_str)[0] 
     67        try: 
     68            data = loader.load(path_str)[0] 
     69        # Can return multiple exceptions - gather them all under one umbrella and complain 
     70        except Exception as ex: 
     71            logging.error(ex) 
     72            return 
    6773 
    6874        self.data_file.setText(os.path.basename(path_str)) 
     
    7985                                                 "SAXSess 1D data (*.txt *.TXT *.dat *.DAT)", 
    8086                                                 None, 
    81                                                  QtWidgets.QFileDialog.DontUseNativeDialog) 
    82  
    83         if path is None: 
    84             return 
    85  
     87                                                 QtWidgets.QFileDialog.DontUseNativeDialog)[0] 
    8688        return path 
    8789 
     
    106108            self.clearResults() 
    107109            msg = "ERROR: Data hasn't been loaded correctly" 
    108             raise RuntimeError(msg) 
     110            logging.error(msg) 
     111            return 
    109112 
    110113        if data.__class__.__name__ == 'Data2D': 
    111114            self.clearResults() 
    112115            msg = "Slit Length cannot be computed for 2D Data" 
    113             raise RuntimeError(msg) 
     116            logging.error(msg) 
     117            return 
    114118 
    115119        #compute the slit size 
     
    119123            if xdata == [] or xdata is None or ydata == [] or ydata is None: 
    120124                msg = "The current data is empty please check x and y" 
    121                 raise ValueError(msg) 
     125                logging.error(msg) 
     126                return 
    122127            slit_length_calculator = SlitlengthCalculator() 
    123128            slit_length_calculator.set_data(x=xdata, y=ydata) 
     
    126131            self.clearResults() 
    127132            msg = "Slit Size Calculator: %s" % (sys.exc_info()[1]) 
    128             raise RuntimeError(msg) 
     133            logging.error(msg) 
     134            return 
    129135 
    130136        slit_length_str = "{:.5f}".format(slit_length) 
  • src/sas/qtgui/MainWindow/DataExplorer.py

    r304d082 r6280464  
    218218            'options'   : QtWidgets.QFileDialog.DontUseNativeDialog 
    219219        } 
    220         filename = str(QtWidgets.QFileDialog.getOpenFileName(**kwargs)) 
     220        filename = QtWidgets.QFileDialog.getOpenFileName(**kwargs)[0] 
    221221        if filename: 
    222222            load_thread = threads.deferToThread(self.readProject, filename) 
     
    582582        # Show the plot 
    583583        new_plot.show() 
     584        new_plot.canvas.draw() 
    584585 
    585586        # Update the active chart list 
     
    628629        paths = QtWidgets.QFileDialog.getOpenFileNames(self, "Choose a file", "", 
    629630                wlist, None, QtWidgets.QFileDialog.DontUseNativeDialog)[0] 
    630         # [0] is new in Qt5 as getOpenFileNames() returns now a tuple! 
    631         if paths is None: 
     631        if not paths: 
    632632            return 
    633633 
  • src/sas/qtgui/MainWindow/GuiManager.py

    r304d082 r6280464  
    88from PyQt5.QtWidgets import * 
    99from PyQt5.QtGui import * 
    10 from PyQt5.QtCore import Qt 
     10from PyQt5.QtCore import Qt, QLocale 
    1111from PyQt5.QtWebKitWidgets import QWebView 
    1212 
     
    191191 
    192192        # Resize to the workspace height 
    193         #workspace_height = self._workspace.workspace.sizeHint().height() 
    194         #perspective_size = self._current_perspective.sizeHint() 
     193        workspace_height = self._workspace.workspace.sizeHint().height() 
     194        perspective_size = self._current_perspective.sizeHint() 
    195195        #if workspace_height < perspective_size.height(): 
    196         #    perspective_width = perspective_size.width() 
    197         #    self._current_perspective.resize(perspective_width, workspace_height-10) 
     196        perspective_width = perspective_size.width() 
     197        self._current_perspective.resize(perspective_width, workspace_height-10) 
    198198 
    199199        self._current_perspective.show() 
     
    584584        self.ipDockWidget.setObjectName("IPythonDockWidget") 
    585585        self.ipDockWidget.setWidget(terminal) 
    586         self._workspace.workspace.addSubWindow(self.ipDockWidget, Qt.RightDockWidgetArea) 
     586        self._workspace.addDockWidget(Qt.RightDockWidgetArea, self.ipDockWidget) 
    587587 
    588588    def actionImage_Viewer(self): 
  • src/sas/qtgui/MainWindow/MainWindow.py

    r0849aec r6280464  
    6969    # Show the main SV window 
    7070    mainwindow = MainSasViewWindow() 
    71     mainwindow.showMaximized() 
     71    mainwindow.show() 
    7272 
    7373    # no more splash screen 
  • src/sas/qtgui/Perspectives/Fitting/FittingWidget.py

    r0849aec r6280464  
    6060        QtGui.QStandardItemModel.__init__(self,parent) 
    6161 
    62     def headerData(self, section, orientation, role): 
     62    def headerData(self, section, orientation, role=QtCore.Qt.DisplayRole): 
    6363        """ 
    6464        Displays tooltip for each column's header 
     
    586586        elif model_column in [self.lstPoly.itemDelegate().poly_min, self.lstPoly.itemDelegate().poly_max]: 
    587587            try: 
    588                 value = float(item.text()) 
     588                value = GuiUtils.toDouble(item.text()) 
    589589            except ValueError: 
    590590                # Can't be converted properly, bring back the old value and exit 
     
    601601        else: 
    602602            try: 
    603                 value = float(item.text()) 
     603                value = GuiUtils.toDouble(item.text()) 
    604604            except ValueError: 
    605605                # Can't be converted properly, bring back the old value and exit 
     
    618618        model_row = item.row() 
    619619        name_index = self._magnet_model.index(model_row, 0) 
    620         parameter_name = str(self._magnet_model.data(name_index).toPyObject()) 
     620        parameter_name = str(self._magnet_model.data(name_index)) 
    621621 
    622622        if model_column == 0: 
     
    634634        # Extract changed value. 
    635635        try: 
    636             value = float(item.text()) 
     636            value = GuiUtils.toDouble(item.text()) 
    637637        except ValueError: 
    638638            # Unparsable field 
    639639            return 
    640640 
    641         property_index = self._magnet_model.headerData(1, model_column).toInt()[0]-1 # Value, min, max, etc. 
     641        property_index = self._magnet_model.headerData(1, model_column)-1 # Value, min, max, etc. 
    642642 
    643643        # Update the parameter value - note: this supports +/-inf as well 
     
    12951295        # Extract changed value. 
    12961296        try: 
    1297             value = float(item.text()) 
     1297            value = GuiUtils.toDouble(item.text()) 
    12981298        except ValueError: 
    12991299            # Unparsable field 
    13001300            return 
    1301         parameter_name = str(self._model_model.data(name_index)) #.toPyObject()) # sld, background etc. 
     1301 
     1302        parameter_name = str(self._model_model.data(name_index)) # sld, background etc. 
    13021303 
    13031304        # Update the parameter value - note: this supports +/-inf as well 
     
    16781679        datafile = QtWidgets.QFileDialog.getOpenFileName( 
    16791680            self, "Choose a weight file", "", "All files (*.*)", None, 
    1680             QtWidgets.QFileDialog.DontUseNativeDialog) 
    1681  
    1682         if datafile is None or str(datafile)=='': 
     1681            QtWidgets.QFileDialog.DontUseNativeDialog)[0] 
     1682 
     1683        if not datafile: 
    16831684            logging.info("No weight data chosen.") 
    16841685            raise IOError 
  • src/sas/qtgui/Perspectives/Fitting/ViewDelegate.py

    r304d082 r6280464  
    44 
    55import sas.qtgui.Utilities.GuiUtils as GuiUtils 
     6 
     7class CommaLessValidator(QtGui.QDoubleValidator): 
     8    """ 
     9    Custom double validator which doesn't allow for commas to be used as decimal point 
     10    """ 
     11    pass 
    612 
    713class ModelViewDelegate(QtWidgets.QStyledItemDelegate): 
     
    4450        if index.column() in self.fancyColumns(): 
    4551            # Units - present in nice HTML 
    46             #options = QtWidgets.QStyleOptionViewItemV4(option) 
    4752            options = QtWidgets.QStyleOptionViewItem(option) 
    4853            self.initStyleOption(options,index) 
     
    236241    def createEditor(self, widget, option, index): 
    237242        # Remember the current choice 
    238         current_text = index.data().toString() 
     243        current_text = index.data() 
    239244        if not index.isValid(): 
    240245            return 0 
  • src/sas/qtgui/Plotting/BoxSum.py

    r0849aec r6280464  
    1111 
    1212class BoxSum(QtWidgets.QDialog, Ui_BoxSumUI): 
    13     apply_signal = QtCore.pyqtSignal(tuple, str) 
    1413    def __init__(self, parent=None, model=None): 
    1514        super(BoxSum, self).__init__() 
     
    2423 
    2524        self.model = model 
    26         self.mapper = QtGui.QDataWidgetMapper() 
     25        self.mapper = QtWidgets.QDataWidgetMapper() 
    2726        self.mapper.setModel(self.model) 
    2827 
     
    3231        self.mapper.addMapping(self.txtCenterX, 2) 
    3332        self.mapper.addMapping(self.txtCenterY, 3) 
    34         self.mapper.addMapping(self.lblAvg, 4, "text") 
    35         self.mapper.addMapping(self.lblAvgErr, 5, "text") 
    36         self.mapper.addMapping(self.lblSum, 6, "text") 
    37         self.mapper.addMapping(self.lblSumErr, 7, "text") 
    38         self.mapper.addMapping(self.lblNumPoints, 8, "text") 
     33        self.mapper.addMapping(self.lblAvg, 4, b"text") 
     34        self.mapper.addMapping(self.lblAvgErr, 5, b"text") 
     35        self.mapper.addMapping(self.lblSum, 6, b"text") 
     36        self.mapper.addMapping(self.lblSumErr, 7, b"text") 
     37        self.mapper.addMapping(self.lblNumPoints, 8, b"text") 
    3938 
    4039        # Populate the widgets with data from the first column 
     
    4342        self.setFixedSize(self.minimumSizeHint()) 
    4443 
     44        # Handle the Apply button click 
     45        self.buttonBox.button(QtWidgets.QDialogButtonBox.Close).clicked.connect(self.onClose) 
     46 
     47    def onClose(self): 
     48        """ 
     49        close the window containing this panel 
     50        """ 
     51        self.close() 
     52 
  • src/sas/qtgui/Plotting/Plotter.py

    r304d082 r6280464  
    160160 
    161161        # refresh canvas 
    162         self.canvas.draw() 
     162        self.canvas.draw_idle() 
    163163 
    164164    def createContextMenu(self): 
  • src/sas/qtgui/Plotting/Plotter2D.py

    r304d082 r6280464  
    123123        """ 
    124124        # Toggle the scale 
    125         zmin_temp = self.zmin 
     125        zmin_temp = self.zmin if self.zmin else MIN_Z 
    126126        zmax_temp = self.zmax 
    127127        # self.scale predefined in the baseclass 
  • src/sas/qtgui/Plotting/PlotterBase.py

    r304d082 r6280464  
    3434        self.manager = manager 
    3535        self.quickplot = quickplot 
     36 
     37        #plt.style.use('ggplot') 
     38        plt.style.use('seaborn-darkgrid') 
    3639 
    3740        # a figure instance to plot on 
  • src/sas/qtgui/Plotting/Slicers/BoxSum.py

    r0849aec r6280464  
    66from PyQt5 import QtGui 
    77 
    8 from sas.qtgui.Utilities.GuiUtils import formatNumber 
     8from sas.qtgui.Utilities.GuiUtils import formatNumber, toDouble 
    99 
    1010from .BaseInteractor import BaseInteractor 
     
    137137        """ 
    138138        params = {} 
    139         params["Height"] = float(self.model().item(0, 0).text()) 
    140         params["Width"] = float(self.model().item(0, 1).text()) 
    141         params["center_x"] = float(self.model().item(0, 2).text()) 
    142         params["center_y"] = float(self.model().item(0, 3).text()) 
     139        params["Height"] = toDouble(self.model().item(0, 0).text()) 
     140        params["Width"] = toDouble(self.model().item(0, 1).text()) 
     141        params["center_x"] = toDouble(self.model().item(0, 2).text()) 
     142        params["center_y"] = toDouble(self.model().item(0, 3).text()) 
    143143        self.update_model = False 
    144144        self.setParams(params) 
  • src/sas/qtgui/Utilities/GuiUtils.py

    r0849aec r6280464  
    249249        plot_item = item.child(index) 
    250250        if plot_item.isCheckable(): 
    251             plot_data = plot_item.child(0).data() #.toPyObject() 
     251            plot_data = plot_item.child(0).data() 
    252252            if plot_data.id is not None and plot_data.id == py_update_data.id: 
    253253                # replace data section in item 
     
    270270    Adds 'update_data' to that row. 
    271271    """ 
    272     #assert isinstance(update_data, QtCore.QVariant) 
    273     #py_update_data = update_data.toPyObject() 
    274272    py_update_data = update_data 
    275273 
     
    339337        if str(item.text()) == filename: 
    340338            # TODO: assure item type is correct (either data1/2D or Plotter) 
    341             plot_data.append(item.child(0).data()) #.toPyObject()) 
     339            plot_data.append(item.child(0).data()) 
    342340            # Going 1 level deeper only 
    343341            for index_2 in range(item.rowCount()): 
     
    345343                if item_2 and item_2.isCheckable(): 
    346344                    # TODO: assure item type is correct (either data1/2D or Plotter) 
    347                     plot_data.append(item_2.child(0).data()) #.toPyObject()) 
     345                    plot_data.append(item_2.child(0).data()) 
    348346 
    349347    return plot_data 
     
    361359        if item.isCheckable() and item.checkState() == QtCore.Qt.Checked: 
    362360            # TODO: assure item type is correct (either data1/2D or Plotter) 
    363             plot_data.append((item, item.child(0).data())) #.toPyObject())) 
     361            plot_data.append((item, item.child(0).data())) 
    364362        # Going 1 level deeper only 
    365363        for index_2 in range(item.rowCount()): 
     
    367365            if item_2 and item_2.isCheckable() and item_2.checkState() == QtCore.Qt.Checked: 
    368366                # TODO: assure item type is correct (either data1/2D or Plotter) 
    369                 plot_data.append((item_2, item_2.child(0).data())) #.toPyObject())) 
     367                plot_data.append((item_2, item_2.child(0).data())) 
    370368 
    371369    return plot_data 
     
    635633   
    636634    def validate(self, input, pos): 
    637         try: 
    638             Formula(str(input)) 
    639             self._setStyleSheet("") 
    640             return QtGui.QValidator.Acceptable, pos 
    641  
    642         except Exception as e: 
    643             self._setStyleSheet("background-color:pink;") 
    644             return QtGui.QValidator.Intermediate, pos 
     635 
     636        self._setStyleSheet("") 
     637        return QtGui.QValidator.Acceptable, pos 
     638 
     639        #try: 
     640        #    Formula(str(input)) 
     641        #    self._setStyleSheet("") 
     642        #    return QtGui.QValidator.Acceptable, pos 
     643 
     644        #except Exception as e: 
     645        #    self._setStyleSheet("background-color:pink;") 
     646        #    return QtGui.QValidator.Intermediate, pos 
    645647 
    646648    def _setStyleSheet(self, value): 
     
    756758    The assumption - data stored in SasView standard, in child 0 
    757759    """ 
    758     return item.child(0).data() #.toPyObject() 
     760    return item.child(0).data() 
    759761 
    760762def formatNumber(value, high=False): 
     
    806808    else: 
    807809        return name 
     810 
     811def toDouble(value_string): 
     812    """ 
     813    toFloat conversion which cares deeply about user's locale 
     814    """ 
     815    # Holy shit this escalated quickly in Qt5. 
     816    # No more float() cast on general locales. 
     817    value = QtCore.QLocale().toFloat(value_string) 
     818    if value[1]: 
     819        return value[0] 
     820 
     821    # Try generic locale 
     822    value = QtCore.QLocale(QtCore.QLocale('en_US')).toFloat(value_string) 
     823    if value[1]: 
     824        return value[0] 
     825    else: 
     826        raise ValueError 
  • src/sas/qtgui/Utilities/IPythonWidget.py

    r0849aec r6280464  
    33from PyQt5 import QtWidgets 
    44 
    5 ##from PyQt4 import QtSvg 
     5from PyQt5 import QtSvg 
    66 
    77def new_load_qt(api_options): 
     
    1818# Do some monkey patching to satisfy pyinstaller complaining 
    1919# about pyside/pyqt confusion 
    20 qt_loaders.load_qt = new_load_qt 
    21 qtconsole_qt_loaders.load_qt = qtconsole_new_load_qt 
     20#qt_loaders.load_qt = new_load_qt 
     21#qtconsole_qt_loaders.load_qt = qtconsole_new_load_qt 
    2222 
    2323from qtconsole.rich_jupyter_widget import RichJupyterWidget 
  • src/sas/sascalc/calculator/resolution_calculator.py

    r574adc7 r6280464  
    10071007        try: 
    10081008            detector_offset = self.sample2detector_distance[1] 
    1009         except: 
    1010             logger.error(sys.exc_value) 
     1009        except Exception as ex: 
     1010            logger.error(ex) 
    10111011 
    10121012        # detector size in [no of pix_x,no of pix_y] 
     
    10571057        # qx_value and qy_value values in array 
    10581058        qx_value = qx_value.repeat(detector_pix_nums_y) 
    1059         qx_value = qx_value.reshape(detector_pix_nums_x, detector_pix_nums_y) 
     1059        qx_value = qx_value.reshape(int(detector_pix_nums_x), int(detector_pix_nums_y)) 
    10601060        qy_value = qy_value.repeat(detector_pix_nums_x) 
    1061         qy_value = qy_value.reshape(detector_pix_nums_y, detector_pix_nums_x) 
     1061        qy_value = qy_value.reshape(int(detector_pix_nums_y), int(detector_pix_nums_x)) 
    10621062        qy_value = qy_value.transpose() 
    10631063 
Note: See TracChangeset for help on using the changeset viewer.