Index: src/sas/qtgui/Plotting/AddText.py
===================================================================
--- src/sas/qtgui/Plotting/AddText.py	(revision 83eb5208b8acb86b064162274de583670f72da47)
+++ src/sas/qtgui/Plotting/AddText.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -1,3 +1,5 @@
-from PyQt4 import QtGui
+from PyQt5 import QtCore
+from PyQt5 import QtGui
+from PyQt5 import QtWidgets
 
 import sas.sasview
@@ -5,5 +7,5 @@
 from sas.qtgui.Plotting.UI.AddTextUI import Ui_AddText
 
-class AddText(QtGui.QDialog, Ui_AddText):
+class AddText(QtWidgets.QDialog, Ui_AddText):
     """ Simple GUI for a single line text query """
     def __init__(self, parent=None):
Index: src/sas/qtgui/Plotting/BoxSum.py
===================================================================
--- src/sas/qtgui/Plotting/BoxSum.py	(revision cd2cc7458970e179039a783e9409f48c4c1fca0d)
+++ src/sas/qtgui/Plotting/BoxSum.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -2,6 +2,7 @@
 Allows users to modify the box slicer parameters.
 """
-from PyQt4 import QtGui
-from PyQt4 import QtCore
+from PyQt5 import QtCore
+from PyQt5 import QtGui
+from PyQt5 import QtWidgets
 
 # Local UI
@@ -9,5 +10,5 @@
 from sas.qtgui.Plotting.UI.BoxSumUI import Ui_BoxSumUI
 
-class BoxSum(QtGui.QDialog, Ui_BoxSumUI):
+class BoxSum(QtWidgets.QDialog, Ui_BoxSumUI):
     apply_signal = QtCore.pyqtSignal(tuple, str)
     def __init__(self, parent=None, model=None):
Index: src/sas/qtgui/Plotting/ColorMap.py
===================================================================
--- src/sas/qtgui/Plotting/ColorMap.py	(revision b0b09b9740526b0b3838f642e43599409dfd8772)
+++ src/sas/qtgui/Plotting/ColorMap.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -2,6 +2,7 @@
 Allows users to change the range of the current graph
 """
-from PyQt4 import QtGui
-from PyQt4 import QtCore
+from PyQt5 import QtCore
+from PyQt5 import QtGui
+from PyQt5 import QtWidgets
 import sas.qtgui.path_prepare
 
@@ -10,5 +11,5 @@
 import numpy
 
-from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
+from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
 from sas.qtgui.Plotting.PlotterData import Data2D
 from sas.qtgui.Utilities.GuiUtils import formatNumber
@@ -21,5 +22,5 @@
 from sas.qtgui.Plotting.UI.ColorMapUI import Ui_ColorMapUI
 
-class ColorMap(QtGui.QDialog, Ui_ColorMapUI):
+class ColorMap(QtWidgets.QDialog, Ui_ColorMapUI):
     apply_signal = QtCore.pyqtSignal(tuple, str)
     def __init__(self, parent=None, cmap=None, vmin=0.0, vmax=100.0, data=None):
@@ -71,8 +72,8 @@
 
         # Handle the Reset button click
-        self.buttonBox.button(QtGui.QDialogButtonBox.Reset).clicked.connect(self.onReset)
+        self.buttonBox.button(QtWidgets.QDialogButtonBox.Reset).clicked.connect(self.onReset)
 
         # Handle the Apply button click
-        self.buttonBox.button(QtGui.QDialogButtonBox.Apply).clicked.connect(self.onApply)
+        self.buttonBox.button(QtWidgets.QDialogButtonBox.Apply).clicked.connect(self.onApply)
 
         # Handle the amplitude setup
@@ -161,5 +162,5 @@
         self.slider.setOrientation(QtCore.Qt.Horizontal)
 
-        self.slider_label = QtGui.QLabel()
+        self.slider_label = QtWidgets.QLabel()
         self.slider_label.setText("Drag the sliders to adjust color range.")
 
@@ -192,5 +193,5 @@
         self.canvas = FigureCanvas(self.fig)
 
-        layout = QtGui.QVBoxLayout()
+        layout = QtWidgets.QVBoxLayout()
         layout.addWidget(self.slider_label)
         layout.addWidget(self.slider)
Index: src/sas/qtgui/Plotting/LinearFit.py
===================================================================
--- src/sas/qtgui/Plotting/LinearFit.py	(revision b0b09b9740526b0b3838f642e43599409dfd8772)
+++ src/sas/qtgui/Plotting/LinearFit.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -4,6 +4,7 @@
 import re
 import numpy
-from PyQt4 import QtGui
-from PyQt4 import QtCore
+from PyQt5 import QtCore
+from PyQt5 import QtGui
+from PyQt5 import QtWidgets
 
 from sas.qtgui.Utilities.GuiUtils import formatNumber
@@ -17,5 +18,5 @@
 from sas.qtgui.Plotting.UI.LinearFitUI import Ui_LinearFitUI
 
-class LinearFit(QtGui.QDialog, Ui_LinearFitUI):
+class LinearFit(QtWidgets.QDialog, Ui_LinearFitUI):
     def __init__(self, parent=None,
                  data=None,
Index: src/sas/qtgui/Plotting/MaskEditor.py
===================================================================
--- src/sas/qtgui/Plotting/MaskEditor.py	(revision dc5ef150e8b37e01a3b7e253eb5b66d3b82de99c)
+++ src/sas/qtgui/Plotting/MaskEditor.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -1,3 +1,5 @@
-from PyQt4 import QtGui
+from PyQt5 import QtCore
+from PyQt5 import QtGui
+from PyQt5 import QtWidgets
 
 from sas.qtgui.Plotting.PlotterData import Data2D
@@ -8,5 +10,5 @@
 from sas.qtgui.Plotting.Plotter2D import Plotter2DWidget
 
-class MaskEditor(QtGui.QDialog, Ui_MaskEditorUI):
+class MaskEditor(QtWidgets.QDialog, Ui_MaskEditorUI):
     def __init__(self, parent=None, data=None):
         super(MaskEditor, self).__init__()
@@ -23,5 +25,5 @@
         self.plotter.data = self.data
 
-        layout = QtGui.QHBoxLayout()
+        layout = QtWidgets.QHBoxLayout()
         layout.setContentsMargins(0, 0, 0, 0)
         self.frame.setLayout(layout)
Index: src/sas/qtgui/Plotting/PlotProperties.py
===================================================================
--- src/sas/qtgui/Plotting/PlotProperties.py	(revision b0b09b9740526b0b3838f642e43599409dfd8772)
+++ src/sas/qtgui/Plotting/PlotProperties.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -1,3 +1,5 @@
-from PyQt4 import QtGui
+from PyQt5 import QtCore
+from PyQt5 import QtGui
+from PyQt5 import QtWidgets
 
 from sas.qtgui.Plotting.PlotUtilities import COLORS, SHAPES
@@ -6,5 +8,5 @@
 from sas.qtgui.Plotting.UI.PlotPropertiesUI import Ui_PlotPropertiesUI
 
-class PlotProperties(QtGui.QDialog, Ui_PlotPropertiesUI):
+class PlotProperties(QtWidgets.QDialog, Ui_PlotPropertiesUI):
     """ Dialog for modification of single plot properties """
     def __init__(self,
Index: src/sas/qtgui/Plotting/Plotter.py
===================================================================
--- src/sas/qtgui/Plotting/Plotter.py	(revision 895e7359d4338c6297f2baacf8a64deb50de5590)
+++ src/sas/qtgui/Plotting/Plotter.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -1,4 +1,6 @@
-from PyQt4 import QtGui
-from PyQt4 import QtCore
+from PyQt5 import QtCore
+from PyQt5 import QtGui
+from PyQt5 import QtWidgets
+
 import functools
 import copy
@@ -19,4 +21,5 @@
     1D Plot widget for use with a QDialog
     """
+    updatePlot = QtCore.pyqtSignal(tuple)
     def __init__(self, parent=None, manager=None, quickplot=False):
         super(PlotterWidget, self).__init__(parent, manager=manager, quickplot=quickplot)
@@ -41,8 +44,7 @@
         # Add a slot for receiving update signal from LinearFit
         # NEW style signals
-        #self.updatePlot = QtCore.pyqtSignal(tuple)
-        # self.updatePlot.connect(self.onFitDisplay)
+        self.updatePlot.connect(self.onFitDisplay)
         # OLD style signals
-        QtCore.QObject.connect(self, QtCore.SIGNAL('updatePlot'), self.onFitDisplay)
+        # QtCore.QObject.connect(self, QtCore.SIGNAL('updatePlot'), self.onFitDisplay)
 
     @property
@@ -269,5 +271,5 @@
         Show a dialog allowing axes rescaling
         """
-        if self.properties.exec_() == QtGui.QDialog.Accepted:
+        if self.properties.exec_() == QtWidgets.QDialog.Accepted:
             self.xLogLabel, self.yLogLabel = self.properties.getValues()
             self.xyTransform(self.xLogLabel, self.yLogLabel)
@@ -277,5 +279,5 @@
         Show a dialog allowing adding custom text to the chart
         """
-        if self.addText.exec_() == QtGui.QDialog.Accepted:
+        if self.addText.exec_() == QtWidgets.QDialog.Accepted:
             # Retrieve the new text, its font and color
             extra_text = self.addText.text()
@@ -329,5 +331,5 @@
         """
         # min and max of data
-        if self.setRange.exec_() == QtGui.QDialog.Accepted:
+        if self.setRange.exec_() == QtWidgets.QDialog.Accepted:
             x_range = self.setRange.xrange()
             y_range = self.setRange.yrange()
@@ -363,5 +365,5 @@
                     xlabel=self.xLogLabel,
                     ylabel=self.yLogLabel)
-        if fit_dialog.exec_() == QtGui.QDialog.Accepted:
+        if fit_dialog.exec_() == QtWidgets.QDialog.Accepted:
             return
 
@@ -440,5 +442,5 @@
                                 marker_size=marker_size,
                                 legend=legend)
-        if plotPropertiesWidget.exec_() == QtGui.QDialog.Accepted:
+        if plotPropertiesWidget.exec_() == QtWidgets.QDialog.Accepted:
             # Update Data1d
             selected_plot.markersize = plotPropertiesWidget.markersize()
@@ -697,8 +699,8 @@
 
 
-class Plotter(QtGui.QDialog, PlotterWidget):
+class Plotter(QtWidgets.QDialog, PlotterWidget):
     def __init__(self, parent=None, quickplot=False):
 
-        QtGui.QDialog.__init__(self)
+        QtWidgets.QDialog.__init__(self)
         PlotterWidget.__init__(self, parent=self, manager=parent, quickplot=quickplot)
         icon = QtGui.QIcon()
Index: src/sas/qtgui/Plotting/Plotter2D.py
===================================================================
--- src/sas/qtgui/Plotting/Plotter2D.py	(revision 895e7359d4338c6297f2baacf8a64deb50de5590)
+++ src/sas/qtgui/Plotting/Plotter2D.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -4,8 +4,15 @@
 import functools
 
-from PyQt4 import QtGui
-from PyQt4 import QtCore
+from PyQt5 import QtCore
+from PyQt5 import QtGui
+from PyQt5 import QtWidgets
 
 DEFAULT_CMAP = pylab.cm.jet
+
+#import sys
+#print("SYS.PATH = ", sys.path)
+import matplotlib as mpl
+mpl.use("Qt5Agg")
+
 from mpl_toolkits.mplot3d import Axes3D
 
@@ -365,5 +372,5 @@
         color_map_dialog.apply_signal.connect(self.onApplyMap)
 
-        if color_map_dialog.exec_() == QtGui.QDialog.Accepted:
+        if color_map_dialog.exec_() == QtWidgets.QDialog.Accepted:
             self.onApplyMap(color_map_dialog.norm(), color_map_dialog.cmap())
 
@@ -503,10 +510,10 @@
 
 
-class Plotter2D(QtGui.QDialog, Plotter2DWidget):
+class Plotter2D(QtWidgets.QDialog, Plotter2DWidget):
     """
     Plotter widget implementation
     """
     def __init__(self, parent=None, quickplot=False, dimension=2):
-        QtGui.QDialog.__init__(self)
+        QtWidgets.QDialog.__init__(self)
         Plotter2DWidget.__init__(self, manager=parent, quickplot=quickplot, dimension=dimension)
         icon = QtGui.QIcon()
Index: src/sas/qtgui/Plotting/PlotterBase.py
===================================================================
--- src/sas/qtgui/Plotting/PlotterBase.py	(revision 7d8bebfa86b0a6c7db7ce72a8f4f36897ad9f0f6)
+++ src/sas/qtgui/Plotting/PlotterBase.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -2,6 +2,7 @@
 import numpy
 
-from PyQt4 import QtGui
-from PyQt4 import QtCore
+from PyQt5 import QtCore
+from PyQt5 import QtGui
+from PyQt5 import QtWidgets
 
 # TODO: Replace the qt4agg calls below with qt5 equivalent.
@@ -9,6 +10,7 @@
 # https://www.boxcontrol.net/embedding-matplotlib-plot-on-pyqt5-gui.html
 #
-from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
-from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
+# matplotlib.use("Qt5Agg")
+from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
+from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
 
 import matplotlib.pyplot as plt
@@ -25,5 +27,5 @@
 import sas.qtgui.Plotting.PlotUtilities as PlotUtilities
 
-class PlotterBase(QtGui.QWidget):
+class PlotterBase(QtWidgets.QWidget):
     def __init__(self, parent=None, manager=None, quickplot=False):
         super(PlotterBase, self).__init__(parent)
@@ -43,9 +45,10 @@
 
         # Simple window for data display
-        self.txt_widget = QtGui.QTextEdit(None)
+        self.txt_widget = QtWidgets.QTextEdit(None)
 
         # Set the layout and place the canvas widget in it.
-        layout = QtGui.QVBoxLayout()
-        layout.setMargin(0)
+        layout = QtWidgets.QVBoxLayout()
+        # FIXME setMargin -> setContentsMargins in qt5 with 4 args
+        #layout.setContentsMargins(0)
         layout.addWidget(self.canvas)
 
@@ -105,5 +108,5 @@
         self.canvas.mpl_connect('scroll_event', self.onMplWheel)
 
-        self.contextMenu = QtGui.QMenu(self)
+        self.contextMenu = QtWidgets.QMenu(self)
 
         if not quickplot:
@@ -296,5 +299,5 @@
         dialog.setModal(True)
         dialog.setWindowTitle("Print")
-        if dialog.exec_() != QtGui.QDialog.Accepted:
+        if dialog.exec_() != QtWidgets.QDialog.Accepted:
             return
 
@@ -303,5 +306,5 @@
         pmap = QtGui.QPixmap.grabWidget(self)
         # Create a label with pixmap drawn
-        printLabel = QtGui.QLabel()
+        printLabel = QtWidgets.QLabel()
         printLabel.setPixmap(pmap)
 
@@ -333,5 +336,5 @@
         titleWidget = WindowTitle(self, new_title=current_title)
         result = titleWidget.exec_()
-        if result != QtGui.QDialog.Accepted:
+        if result != QtWidgets.QDialog.Accepted:
             return
 
Index: src/sas/qtgui/Plotting/ScaleProperties.py
===================================================================
--- src/sas/qtgui/Plotting/ScaleProperties.py	(revision cd2cc7458970e179039a783e9409f48c4c1fca0d)
+++ src/sas/qtgui/Plotting/ScaleProperties.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -1,3 +1,5 @@
-from PyQt4 import QtGui
+from PyQt5 import QtCore
+from PyQt5 import QtGui
+from PyQt5 import QtWidgets
 
 import sas.sasview
@@ -20,5 +22,5 @@
     view_values[5]: [0, 4], # Kratky
 }
-class ScaleProperties(QtGui.QDialog, Ui_scalePropertiesUI):
+class ScaleProperties(QtWidgets.QDialog, Ui_scalePropertiesUI):
     def __init__(self, parent=None, init_scale_x='x', init_scale_y='y'):
         super(ScaleProperties, self).__init__(parent)
Index: src/sas/qtgui/Plotting/SetGraphRange.py
===================================================================
--- src/sas/qtgui/Plotting/SetGraphRange.py	(revision cd2cc7458970e179039a783e9409f48c4c1fca0d)
+++ src/sas/qtgui/Plotting/SetGraphRange.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -2,5 +2,7 @@
 Allows users to change the range of the current graph
 """
-from PyQt4 import QtGui
+from PyQt5 import QtCore
+from PyQt5 import QtGui
+from PyQt5 import QtWidgets
 
 # Local UI
@@ -8,5 +10,5 @@
 from sas.qtgui.Plotting.UI.SetGraphRangeUI import Ui_setGraphRangeUI
 
-class SetGraphRange(QtGui.QDialog, Ui_setGraphRangeUI):
+class SetGraphRange(QtWidgets.QDialog, Ui_setGraphRangeUI):
     def __init__(self, parent=None, x_range=(0.0, 0.0), y_range=(0.0, 0.0)):
         super(SetGraphRange, self).__init__()
Index: src/sas/qtgui/Plotting/SlicerModel.py
===================================================================
--- src/sas/qtgui/Plotting/SlicerModel.py	(revision 895e7359d4338c6297f2baacf8a64deb50de5590)
+++ src/sas/qtgui/Plotting/SlicerModel.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -1,4 +1,3 @@
-from PyQt4 import QtGui
-from PyQt4 import QtCore
+from PyQt5 import QtGui
 
 import sas.qtgui.Utilities.GuiUtils as GuiUtils
Index: src/sas/qtgui/Plotting/SlicerParameters.py
===================================================================
--- src/sas/qtgui/Plotting/SlicerParameters.py	(revision cd2cc7458970e179039a783e9409f48c4c1fca0d)
+++ src/sas/qtgui/Plotting/SlicerParameters.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -4,7 +4,8 @@
 import numpy
 import functools
-from PyQt4 import QtGui
-from PyQt4 import QtCore
-from PyQt4 import QtWebKit
+from PyQt5 import QtCore
+from PyQt5 import QtGui
+from PyQt5 import QtWidgets
+from PyQt5 import QtWebKitWidgets
 
 # Local UI
@@ -12,5 +13,5 @@
 from sas.qtgui.Plotting.UI.SlicerParametersUI import Ui_SlicerParametersUI
 
-class SlicerParameters(QtGui.QDialog, Ui_SlicerParametersUI):
+class SlicerParameters(QtWidgets.QDialog, Ui_SlicerParametersUI):
     """
     Interaction between the QTableView and the underlying model,
@@ -44,17 +45,17 @@
 
         # Display Help on clicking the button
-        self.buttonBox.button(QtGui.QDialogButtonBox.Help).clicked.connect(self.onHelp)
+        self.buttonBox.button(QtWidgets.QDialogButtonBox.Help).clicked.connect(self.onHelp)
 
         # Close doesn't trigger closeEvent automatically, so force it
-        self.buttonBox.button(QtGui.QDialogButtonBox.Close).clicked.connect(functools.partial(self.closeEvent, None))
+        self.buttonBox.button(QtWidgets.QDialogButtonBox.Close).clicked.connect(functools.partial(self.closeEvent, None))
 
         # Disable row number display
         self.lstParams.verticalHeader().setVisible(False)
         self.lstParams.setAlternatingRowColors(True)
-        self.lstParams.setSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Expanding)
+        self.lstParams.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding)
 
         # Header properties for nicer display
         header = self.lstParams.horizontalHeader()
-        header.setResizeMode(QtGui.QHeaderView.Stretch)
+        header.setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
         header.setStretchLastSection(True)
 
@@ -86,10 +87,10 @@
         location = "docs/sphinx-docs/build/html" + \
             "/user/sasgui/guiframe/graph_help.html#d-data-averaging"
-        self.helpView = QtWebKit.QWebView()
+        self.helpView = QtWebKitWidgets.QWebView()
         self.helpView.load(QtCore.QUrl(location))
         self.helpView.show()
 
 
-class ProxyModel(QtGui.QIdentityProxyModel):
+class ProxyModel(QtCore.QIdentityProxyModel):
     """
     Trivial proxy model with custom column edit flag
@@ -117,5 +118,5 @@
         return flags
 
-class PositiveDoubleEditor(QtGui.QLineEdit):
+class PositiveDoubleEditor(QtWidgets.QLineEdit):
     # a signal to tell the delegate when we have finished editing
     editingFinished = QtCore.Signal()
@@ -136,5 +137,5 @@
 
 
-class EditDelegate(QtGui.QStyledItemDelegate):
+class EditDelegate(QtWidgets.QStyledItemDelegate):
     refocus_signal = QtCore.pyqtSignal(int, int)
     def __init__(self, parent=None, validate_method=None):
@@ -155,5 +156,5 @@
                 return self.editor
         else:
-                return QtGui.QStyledItemDelegate.createEditor(self, parent, option, index)
+                return QtWidgets.QStyledItemDelegate.createEditor(self, parent, option, index)
 
     def setModelData(self, editor, model, index):
Index: src/sas/qtgui/Plotting/Slicers/AnnulusSlicer.py
===================================================================
--- src/sas/qtgui/Plotting/Slicers/AnnulusSlicer.py	(revision 895e7359d4338c6297f2baacf8a64deb50de5590)
+++ src/sas/qtgui/Plotting/Slicers/AnnulusSlicer.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -1,5 +1,3 @@
 import numpy
-from PyQt4 import QtGui
-from PyQt4 import QtCore
 
 import sas.qtgui.Utilities.GuiUtils as GuiUtils
Index: src/sas/qtgui/Plotting/Slicers/BoxSlicer.py
===================================================================
--- src/sas/qtgui/Plotting/Slicers/BoxSlicer.py	(revision 895e7359d4338c6297f2baacf8a64deb50de5590)
+++ src/sas/qtgui/Plotting/Slicers/BoxSlicer.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -1,5 +1,3 @@
 import numpy
-from PyQt4 import QtGui
-from PyQt4 import QtCore
 
 from .BaseInteractor import BaseInteractor
Index: src/sas/qtgui/Plotting/Slicers/BoxSum.py
===================================================================
--- src/sas/qtgui/Plotting/Slicers/BoxSum.py	(revision 895e7359d4338c6297f2baacf8a64deb50de5590)
+++ src/sas/qtgui/Plotting/Slicers/BoxSum.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -4,6 +4,6 @@
 """
 import numpy
-from PyQt4 import QtGui
-from PyQt4 import QtCore
+from PyQt5 import QtGui
+
 from sas.qtgui.Utilities.GuiUtils import formatNumber
 
Index: src/sas/qtgui/Plotting/Slicers/SectorSlicer.py
===================================================================
--- src/sas/qtgui/Plotting/Slicers/SectorSlicer.py	(revision 895e7359d4338c6297f2baacf8a64deb50de5590)
+++ src/sas/qtgui/Plotting/Slicers/SectorSlicer.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -3,6 +3,4 @@
 """
 import numpy
-from PyQt4 import QtGui
-from PyQt4 import QtCore
 
 from .BaseInteractor import BaseInteractor
Index: src/sas/qtgui/Plotting/UnitTesting/SlicerParametersTest.py
===================================================================
--- src/sas/qtgui/Plotting/UnitTesting/SlicerParametersTest.py	(revision 99ea1b0a8c79c7cca1feb2e3bcae293656ef8ca8)
+++ src/sas/qtgui/Plotting/UnitTesting/SlicerParametersTest.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -37,5 +37,5 @@
         '''Test the GUI in its default state'''
         #self.widget.mapper
-        self.assertIsInstance(self.widget.proxy, QtGui.QIdentityProxyModel)
+        self.assertIsInstance(self.widget.proxy, QtCore.QIdentityProxyModel)
         self.assertIsInstance(self.widget.lstParams.itemDelegate(), QtGui.QStyledItemDelegate)
         self.assertTrue(self.widget.lstParams.model().columnReadOnly(0))
Index: src/sas/qtgui/Plotting/WindowTitle.py
===================================================================
--- src/sas/qtgui/Plotting/WindowTitle.py	(revision 83eb5208b8acb86b064162274de583670f72da47)
+++ src/sas/qtgui/Plotting/WindowTitle.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -3,9 +3,9 @@
 from "Graph_n" to any ASCII text.
 """
-from PyQt4 import QtGui
+from PyQt5 import QtWidgets
 
 from sas.qtgui.Plotting.UI.WindowTitleUI import Ui_WindowTitle
 
-class WindowTitle(QtGui.QDialog, Ui_WindowTitle):
+class WindowTitle(QtWidgets.QDialog, Ui_WindowTitle):
     """ Simple GUI for a single line text query """
     def __init__(self, parent=None, new_title=""):
Index: src/sas/qtgui/Plotting/rangeSlider.py
===================================================================
--- src/sas/qtgui/Plotting/rangeSlider.py	(revision 83eb5208b8acb86b064162274de583670f72da47)
+++ src/sas/qtgui/Plotting/rangeSlider.py	(revision 0849aec6ceb97781213ef369f98e5eb61ec8cad3)
@@ -23,7 +23,9 @@
 """
 
-from PyQt4 import QtGui, QtCore
-
-class RangeSlider(QtGui.QSlider):
+from PyQt5 import QtCore
+from PyQt5 import QtGui
+from PyQt5 import QtWidgets
+
+class RangeSlider(QtWidgets.QSlider):
     """ A slider for ranges.
     
@@ -46,6 +48,6 @@
         self._high = self.maximum()
         
-        self.pressed_control = QtGui.QStyle.SC_None
-        self.hover_control = QtGui.QStyle.SC_None
+        self.pressed_control = QtWidgets.QStyle.SC_None
+        self.hover_control = QtWidgets.QStyle.SC_None
         self.click_offset = 0
         
@@ -90,5 +92,5 @@
 
         for i, value in enumerate([self._low, self._high]):
-            opt = QtGui.QStyleOptionSlider()
+            opt = QtWidgets.QStyleOptionSlider()
             self.initStyleOption(opt)
 
@@ -107,5 +109,5 @@
                 slider_max = gr.bottom() - handle_length + 1
 
-            opt.subControls = QtGui.QStyle.SC_SliderGroove | QtGui.QStyle.SC_SliderHandle
+            opt.subControls = QtWidgets.QStyle.SC_SliderGroove | QtWidgets.QStyle.SC_SliderHandle
 
             # draw the first slider with inverted appearance, then the second 
@@ -131,5 +133,5 @@
                 # do not highlight the second part when has focus to avoid 
                 # drawing of partially overlapped semi-transparent backgrounds
-                opt.state &= ~QtGui.QStyle.State_HasFocus
+                opt.state &= ~QtWidgets.QStyle.State_HasFocus
 
                 opt.sliderValue = 0
@@ -157,13 +159,13 @@
 
             if self.tickPosition() != self.NoTicks:
-                opt.subControls |= QtGui.QStyle.SC_SliderTickmarks
+                opt.subControls |= QtWidgets.QStyle.SC_SliderTickmarks
 
             if self.pressed_control:
                 opt.activeSubControls = self.pressed_control
-                opt.state |= QtGui.QStyle.State_Sunken
+                opt.state |= QtWidgets.QStyle.State_Sunken
             else:
                 opt.activeSubControls = self.hover_control
 
-            style.drawComplexControl(QtGui.QStyle.CC_Slider, opt, painter, self)
+            style.drawComplexControl(QtWidgets.QStyle.CC_Slider, opt, painter, self)
             
         
@@ -181,5 +183,5 @@
                 
         if button:
-            opt = QtGui.QStyleOptionSlider()
+            opt = QtWidgets.QStyleOptionSlider()
             self.initStyleOption(opt)
 
@@ -206,5 +208,5 @@
 
             if self.active_slider == 0:
-                self.pressed_control = QtGui.QStyle.SC_SliderHandle
+                self.pressed_control = QtWidgets.QStyle.SC_SliderHandle
                 self.click_offset = self.__pixelPosToRangeValue(self.__pick(event.pos()))
                 self.triggerAction(self.SliderMove)
@@ -215,13 +217,13 @@
 
     def mouseReleaseEvent(self, event):
-        if self.pressed_control != QtGui.QStyle.SC_SliderHandle:
+        if self.pressed_control != QtWidgets.QStyle.SC_SliderHandle:
             event.ignore()
             return
 
         self.setSliderDown(False)
-        return QtGui.QSlider.mouseReleaseEvent(self, event)
+        return QtWidgets.QSlider.mouseReleaseEvent(self, event)
                                 
     def mouseMoveEvent(self, event):
-        if self.pressed_control != QtGui.QStyle.SC_SliderHandle:
+        if self.pressed_control != QtWidgets.QStyle.SC_SliderHandle:
             event.ignore()
             return
@@ -229,5 +231,5 @@
         event.accept()
         new_pos = self.__pixelPosToRangeValue(self.__pick(event.pos()))
-        opt = QtGui.QStyleOptionSlider()
+        opt = QtWidgets.QStyleOptionSlider()
         self.initStyleOption(opt)
 
@@ -274,5 +276,5 @@
            
     def __pixelPosToRangeValue(self, pos):
-        opt = QtGui.QStyleOptionSlider()
+        opt = QtWidgets.QStyleOptionSlider()
         self.initStyleOption(opt)
         style = QtGui.QApplication.style()
