From b697cc7111d654dcfcf7c3dfba93de35ec329f31 Mon Sep 17 00:00:00 2001
From: "A. Maitland Bottoms" <bottoms@debian.org>
Date: Sun, 26 Nov 2017 18:57:28 -0500
Subject: [PATCH 26/27] qt5 refactor qt5 onto maint branch

---
 cmake/Modules/FindQwt.cmake                        |   15 +-
 gr-qtgui/CMakeLists.txt                            |   67 +-
 gr-qtgui/apps/CMakeLists.txt                       |    2 -
 gr-qtgui/apps/gr_constellation_plot                |   31 +-
 gr-qtgui/apps/gr_psd_plot_b                        |   15 +-
 gr-qtgui/apps/gr_psd_plot_c                        |   15 +-
 gr-qtgui/apps/gr_psd_plot_f                        |   15 +-
 gr-qtgui/apps/gr_psd_plot_i                        |   15 +-
 gr-qtgui/apps/gr_psd_plot_s                        |   15 +-
 gr-qtgui/apps/gr_spectrogram_plot                  |   57 +-
 gr-qtgui/apps/gr_spectrogram_plot_b                |   15 +-
 gr-qtgui/apps/gr_spectrogram_plot_c                |   15 +-
 gr-qtgui/apps/gr_spectrogram_plot_f                |   15 +-
 gr-qtgui/apps/gr_spectrogram_plot_i                |   15 +-
 gr-qtgui/apps/gr_spectrogram_plot_s                |   15 +-
 gr-qtgui/apps/gr_time_plot_b                       |   11 +-
 gr-qtgui/apps/gr_time_plot_c                       |   11 +-
 gr-qtgui/apps/gr_time_plot_f                       |   11 +-
 gr-qtgui/apps/gr_time_plot_i                       |   11 +-
 gr-qtgui/apps/gr_time_plot_s                       |   11 +-
 gr-qtgui/apps/gr_time_raster_b                     |   13 +-
 gr-qtgui/apps/gr_time_raster_f                     |   13 +-
 gr-qtgui/apps/plot_base.py                         |    2 -
 gr-qtgui/apps/plot_psd_base.py                     |   40 +-
 gr-qtgui/apps/plot_spectrogram_base.py             |   43 +-
 gr-qtgui/apps/plot_time_base.py                    |   33 +-
 gr-qtgui/apps/plot_time_raster_base.py             |   41 +-
 gr-qtgui/apps/qt_digital.py                        |    6 +-
 gr-qtgui/apps/qt_digital_window.py                 |  114 +-
 gr-qtgui/apps/usrp_display_qtgui.py                |  150 +-
 gr-qtgui/examples/CMakeLists.txt                   |    2 -
 gr-qtgui/examples/c++/CMakeLists.txt               |    8 +-
 gr-qtgui/examples/pyqt_const_c.py                  |   62 +-
 gr-qtgui/examples/pyqt_example_c.py                |   59 +-
 gr-qtgui/examples/pyqt_example_f.py                |   59 +-
 gr-qtgui/examples/pyqt_freq_c.py                   |   59 +-
 gr-qtgui/examples/pyqt_freq_f.py                   |   60 +-
 gr-qtgui/examples/pyqt_histogram_f.py              |   73 +-
 gr-qtgui/examples/pyqt_time_c.py                   |   66 +-
 gr-qtgui/examples/pyqt_time_f.py                   |   67 +-
 gr-qtgui/examples/pyqt_time_raster_b.py            |   19 +-
 gr-qtgui/examples/pyqt_time_raster_f.py            |   19 +-
 gr-qtgui/examples/pyqt_waterfall_c.py              |   59 +-
 gr-qtgui/examples/pyqt_waterfall_f.py              |   62 +-
 gr-qtgui/examples/qtgui_tags_viewing.grc           | 2399 +++++++++++++++-----
 gr-qtgui/grc/CMakeLists.txt                        |   27 +-
 gr-qtgui/grc/qtgui_ber_sink_b.xml                  |    2 +-
 gr-qtgui/grc/qtgui_check_box.xml                   |    2 +-
 gr-qtgui/grc/qtgui_chooser.xml                     |    4 +-
 gr-qtgui/grc/qtgui_const_sink_x.xml                |    2 +-
 gr-qtgui/grc/qtgui_edit_box_msg.xml                |    2 +-
 gr-qtgui/grc/qtgui_entry.xml                       |    2 +-
 gr-qtgui/grc/qtgui_freq_sink_x.xml                 |    2 +-
 gr-qtgui/grc/qtgui_histogram_sink_x.xml            |    2 +-
 gr-qtgui/grc/qtgui_label.xml                       |    2 +-
 gr-qtgui/grc/qtgui_number_sink.xml                 |    2 +-
 gr-qtgui/grc/qtgui_push_button.xml                 |    2 +-
 gr-qtgui/grc/qtgui_sink_x.xml                      |    2 +-
 gr-qtgui/grc/qtgui_tab_widget.xml                  |    2 +-
 gr-qtgui/grc/qtgui_time_raster_x.xml               |    2 +-
 gr-qtgui/grc/qtgui_time_sink_x.xml                 |    2 +-
 gr-qtgui/grc/qtgui_vector_sink_f.xml               |    2 +-
 gr-qtgui/grc/qtgui_waterfall_sink_x.xml            |    2 +-
 gr-qtgui/include/gnuradio/qtgui/CMakeLists.txt     |    1 -
 gr-qtgui/include/gnuradio/qtgui/form_menus.h       |    5 +
 gr-qtgui/lib/CMakeLists.txt                        |   17 +-
 gr-qtgui/lib/SpectrumGUIClass.cc                   |    1 -
 gr-qtgui/lib/const_sink_c_impl.cc                  |    2 +-
 gr-qtgui/lib/edit_box_msg_impl.cc                  |    4 -
 gr-qtgui/lib/freq_sink_c_impl.cc                   |    2 +-
 gr-qtgui/lib/freq_sink_f_impl.cc                   |    2 +-
 gr-qtgui/lib/histogram_sink_f_impl.cc              |    2 +-
 gr-qtgui/lib/sink_c_impl.cc                        |    2 +-
 gr-qtgui/lib/sink_f_impl.cc                        |    2 +-
 gr-qtgui/lib/time_raster_sink_b_impl.cc            |    2 +-
 gr-qtgui/lib/time_raster_sink_f_impl.cc            |    2 +-
 gr-qtgui/lib/time_sink_c_impl.cc                   |    2 +-
 gr-qtgui/lib/time_sink_f_impl.cc                   |    2 +-
 gr-qtgui/lib/vector_sink_f_impl.cc                 |    2 +-
 gr-qtgui/lib/waterfall_sink_c_impl.cc              |    2 +-
 gr-qtgui/lib/waterfall_sink_f_impl.cc              |    2 +-
 gr-qtgui/python/qtgui/CMakeLists.txt               |   14 +-
 .../python/qtgui/{range.py => range.py.cmakein}    |   28 +-
 gr-qtgui/python/qtgui/{util.py => util.py.cmakein} |    5 +-
 gr-qtgui/swig/CMakeLists.txt                       |    2 -
 grc/blocks/options.xml                             |    2 +-
 grc/core/generator/flow_graph.tmpl                 |    4 +-
 87 files changed, 2663 insertions(+), 1414 deletions(-)
 rename gr-qtgui/python/qtgui/{range.py => range.py.cmakein} (93%)
 mode change 100755 => 100644
 rename gr-qtgui/python/qtgui/{util.py => util.py.cmakein} (94%)

diff --git a/cmake/Modules/FindQwt.cmake b/cmake/Modules/FindQwt.cmake
index da8bbe9049..a16896aa43 100644
--- a/cmake/Modules/FindQwt.cmake
+++ b/cmake/Modules/FindQwt.cmake
@@ -5,17 +5,24 @@
 # qwt_global.h holds a string with the QWT version;
 #   test to make sure it's at least 5.2
 
+if (${DESIRED_QT_VERSION} MATCHES 5)
+  set(QWT_QT_VERSION qt5)
+else()
+  set(QWT_QT_VERSION qt4)
+endif()
+
 find_path(QWT_INCLUDE_DIRS
   NAMES qwt_global.h
   HINTS
   ${CMAKE_INSTALL_PREFIX}/include/qwt
   ${CMAKE_PREFIX_PATH}/include/qwt
   PATHS
-  /usr/local/include/qwt-qt4
+  /usr/local/include/qwt-${QWT_QT_VERSION}
   /usr/local/include/qwt
   /usr/include/qwt6
-  /usr/include/qwt-qt4
+  /usr/include/qwt-${QWT_QT_VERSION}
   /usr/include/qwt
+  /usr/include/${QWT_QT_VERSION}/qwt
   /usr/include/qwt5
   /opt/local/include/qwt
   /sw/include/qwt
@@ -23,11 +30,11 @@ find_path(QWT_INCLUDE_DIRS
 )
 
 find_library (QWT_LIBRARIES
-  NAMES qwt6 qwt6-qt4 qwt qwt-qt4 qwt5 qwtd5
+  NAMES qwt6-${QWT_QT_VERSION} qwt-${QWT_QT_VERSION} qwt6 qwt qwt5 qwtd5
   HINTS
   ${CMAKE_INSTALL_PREFIX}/lib
   ${CMAKE_INSTALL_PREFIX}/lib64
-  ${CMAKE_PREFIX_PATH}/lib 
+  ${CMAKE_PREFIX_PATH}/lib
   PATHS
   /usr/local/lib
   /usr/lib
diff --git a/gr-qtgui/CMakeLists.txt b/gr-qtgui/CMakeLists.txt
index 9306a3eb50..57e9f75032 100644
--- a/gr-qtgui/CMakeLists.txt
+++ b/gr-qtgui/CMakeLists.txt
@@ -22,14 +22,27 @@
 ########################################################################
 include(GrBoost)
 
-find_package(Qt4 4.2.0 COMPONENTS QtCore QtGui)
-
-find_package(Qwt)
-
 find_package(PythonLibs 2)
 
 include(GrPython)
-GR_PYTHON_CHECK_MODULE("PyQt4" PyQt4 True PYQT4_FOUND)
+
+set(DESIRED_QT_VERSION 5 CACHE STRING "The Qt version to use (4 or 5)")
+set_property(CACHE DESIRED_QT_VERSION PROPERTY STRINGS 4 5)
+
+if (DESIRED_QT_VERSION MATCHES 4)
+    find_package(Qt4 COMPONENTS QtCore QtGui)
+    set(QT_FOUND ${Qt4_FOUND})
+    include(GrSetupQt4)
+else()
+    find_package(Qt5Widgets)
+    set(QT_FOUND ${Qt5Widgets_FOUND})
+    set(QT_LIBRARIES ${Qt5Widgets_LIBRARIES})
+    set(QT_INCLUDE_DIRS ${Qt5Widgets_INCLUDE_DIRS})
+endif()
+
+GR_PYTHON_CHECK_MODULE("PyQt${DESIRED_QT_VERSION}" PyQt${DESIRED_QT_VERSION} True PYQT${DESIRED_QT_VERSION}_FOUND)
+
+find_package(Qwt)
 
 ########################################################################
 # Register component
@@ -37,13 +50,13 @@ GR_PYTHON_CHECK_MODULE("PyQt4" PyQt4 True PYQT4_FOUND)
 include(GrComponent)
 if(NOT CMAKE_CROSSCOMPILING)
     set(qt_gui_python_deps
-        PYQT4_FOUND
+        PYQT${DESIRED_QT_VERSION}_FOUND
     )
 endif(NOT CMAKE_CROSSCOMPILING)
 
 GR_REGISTER_COMPONENT("gr-qtgui" ENABLE_GR_QTGUI
     Boost_FOUND
-    QT4_FOUND
+    QT_FOUND
     QWT_FOUND
     ENABLE_VOLK
     ENABLE_GNURADIO_RUNTIME
@@ -66,43 +79,6 @@ SET(GR_PKG_QTGUI_EXAMPLES_DIR ${GR_PKG_DATA_DIR}/examples/qt-gui)
 ########################################################################
 if(ENABLE_GR_QTGUI)
 
-# populate the environment with QT variables
-include(GrSetupQt4)
-
-########################################################################
-# Setup CPack components
-########################################################################
-include(GrPackage)
-CPACK_SET(CPACK_COMPONENT_GROUP_QTGUI_DESCRIPTION "GNU Radio QtGUI Blocks")
-
-CPACK_COMPONENT("qtgui_runtime"
-    GROUP        "QtGUI"
-    DISPLAY_NAME "Runtime"
-    DESCRIPTION  "Runtime"
-    DEPENDS      "runtime_runtime"
-)
-
-CPACK_COMPONENT("qtgui_devel"
-    GROUP        "QtGUI"
-    DISPLAY_NAME "Development"
-    DESCRIPTION  "C++ headers, package config, import libraries"
-    DEPENDS      "runtime_devel"
-)
-
-CPACK_COMPONENT("qtgui_python"
-    GROUP        "QtGUI"
-    DISPLAY_NAME "Python"
-    DESCRIPTION  "Python modules for runtime; GRC xml files"
-    DEPENDS      "runtime_python;qtgui_runtime"
-)
-
-CPACK_COMPONENT("qtgui_swig"
-    GROUP        "QtGUI"
-    DISPLAY_NAME "SWIG"
-    DESCRIPTION  "SWIG development .i files"
-    DEPENDS      "runtime_swig;qtgui_python;qtgui_devel"
-)
-
 ########################################################################
 # Add subdirectories
 ########################################################################
@@ -131,7 +107,6 @@ configure_file(
 install(
     FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-qtgui.pc
     DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
-    COMPONENT "qtgui_devel"
 )
 
 ########################################################################
@@ -140,7 +115,6 @@ install(
 install(
     FILES ${CMAKE_CURRENT_SOURCE_DIR}/gr-qtgui.conf
     DESTINATION ${GR_PREFSDIR}
-    COMPONENT "qtgui"
 )
 
 
@@ -154,7 +128,6 @@ install(
     themes/alt.qss
     themes/projector.qss
     DESTINATION ${GR_THEMES_DIR}
-    COMPONENT "qtgui"
 )
 
 endif(ENABLE_GR_QTGUI)
diff --git a/gr-qtgui/apps/CMakeLists.txt b/gr-qtgui/apps/CMakeLists.txt
index 3c64cb6e0a..6a8e6c51aa 100644
--- a/gr-qtgui/apps/CMakeLists.txt
+++ b/gr-qtgui/apps/CMakeLists.txt
@@ -33,7 +33,6 @@ GR_PYTHON_INSTALL(
     plot_time_form.py
     plot_time_raster_form.py
     DESTINATION ${GR_PYTHON_DIR}/gnuradio/qtgui
-    COMPONENT "qtgui_python"
 )
 
 GR_PYTHON_INSTALL(
@@ -58,5 +57,4 @@ GR_PYTHON_INSTALL(
     gr_spectrogram_plot
     gr_constellation_plot
     DESTINATION ${GR_RUNTIME_DIR}
-    COMPONENT "qtgui_python"
 )
diff --git a/gr-qtgui/apps/gr_constellation_plot b/gr-qtgui/apps/gr_constellation_plot
index 10f6954fb8..469908b7d4 100755
--- a/gr-qtgui/apps/gr_constellation_plot
+++ b/gr-qtgui/apps/gr_constellation_plot
@@ -22,8 +22,8 @@
 
 from gnuradio import gr
 from gnuradio import blocks
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
+from gnuradio.eng_arg import eng_float, intx
+from argparse import ArgumentParser
 import os, sys
 
 try:
@@ -143,32 +143,27 @@ class my_top_block(gr.top_block):
 
 def main():
     description = "Plots the constellations of a list of files."
-    parser = OptionParser(option_class=eng_option, description=description,
+    parser = ArgumentParser(description=description,
                           conflict_handler="resolve")
-    parser.add_option("-N", "--nsamples", type="int", default=1000000,
-                      help="Set the number of samples to display [default=%default]")
-    parser.add_option("-S", "--start", type="int", default=0,
-                      help="Starting sample number [default=%default]")
-    (options, args) = parser.parse_args()
+    parser.add_argument("-N", "--nsamples", type=int, default=1000000,
+                      help="Set the number of samples to display [default=%(default)r]")
+    parser.add_argument("-S", "--start", type=int, default=0,
+                      help="Starting sample number [default=%(default)r]")
+    parser.add_argument("files", nargs="+", metavar='FILE')
+    args = parser.parse_args()
 
-    if(len(args) < 1):
-        parser.print_help()
-        sys.exit(0)
-
-    filelist = list(args)
-
-    nsamples = options.nsamples
+    filelist = args.files
+    nsamples = args.nsamples
 
     # Find the smallest number of samples in all files and use that as
     # a maximum value possible.
     filesizes = []
     for f in filelist:
         if(os.path.exists(f)):
-            filesizes.append(os.path.getsize(f) / gr.sizeof_gr_complex)
+            filesizes.append(os.path.getsize(f) // gr.sizeof_gr_complex)
     max_nsamples = min(filesizes)
 
-    tb = my_top_block(filelist,
-                      options.start, nsamples, max_nsamples);
+    tb = my_top_block(filelist, args.start, nsamples, max_nsamples);
 
     main_box = plot_constellation_form(tb, 'GNU Radio Constellation Plot', 10000.0)
     for n in xrange(tb._nsigs):
diff --git a/gr-qtgui/apps/gr_psd_plot_b b/gr-qtgui/apps/gr_psd_plot_b
index a5a2e3f21e..10ce7e2256 100755
--- a/gr-qtgui/apps/gr_psd_plot_b
+++ b/gr-qtgui/apps/gr_psd_plot_b
@@ -54,16 +54,15 @@ class psd_plot_b(plot_base.plot_base):
 
 def main():
     description = "Plots the PSDs of a list of files. Files are a binary list of bytes."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = psd_plot_b(filelist,
-                    options.center_frequency, options.sample_rate,
-                    options.psd_size,
-                    options.start, options.nsamples, max_nsamples,
-                    options.average)
+    tb = psd_plot_b(args.files,
+                    args.center_frequency, args.sample_rate,
+                    args.psd_size,
+                    args.start, args.nsamples, max_nsamples,
+                    args.average)
 
     main_box = plot_base.plot_psd_form(tb, 'GNU Radio PSD Plot')
     main_box.show()
diff --git a/gr-qtgui/apps/gr_psd_plot_c b/gr-qtgui/apps/gr_psd_plot_c
index e8b83c33f5..afc024ee53 100755
--- a/gr-qtgui/apps/gr_psd_plot_c
+++ b/gr-qtgui/apps/gr_psd_plot_c
@@ -55,16 +55,15 @@ class psd_plot_c(plot_base.plot_base):
 
 def main():
     description = "Plots the PSDs of a list of files. Files are a binary list of complex floats."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = psd_plot_c(filelist,
-                    options.center_frequency, options.sample_rate,
-                    options.psd_size,
-                    options.start, options.nsamples, max_nsamples,
-                    options.average)
+    tb = psd_plot_c(args.files,
+                    args.center_frequency, args.sample_rate,
+                    args.psd_size,
+                    args.start, args.nsamples, max_nsamples,
+                    args.average)
 
     main_box = plot_base.plot_psd_form(tb, 'GNU Radio PSD Plot')
     main_box.show()
diff --git a/gr-qtgui/apps/gr_psd_plot_f b/gr-qtgui/apps/gr_psd_plot_f
index 8ad5a283bc..b1f0f0f34f 100755
--- a/gr-qtgui/apps/gr_psd_plot_f
+++ b/gr-qtgui/apps/gr_psd_plot_f
@@ -55,16 +55,15 @@ class psd_plot_f(plot_base.plot_base):
 
 def main():
     description = "Plots the PSDs of a list of files. Files are a binary list of floats."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = psd_plot_f(filelist,
-                    options.center_frequency, options.sample_rate,
-                    options.psd_size,
-                    options.start, options.nsamples, max_nsamples,
-                    options.average)
+    tb = psd_plot_f(args.files,
+                    args.center_frequency, args.sample_rate,
+                    args.psd_size,
+                    args.start, args.nsamples, max_nsamples,
+                    args.average)
 
     main_box = plot_base.plot_psd_form(tb, 'GNU Radio PSD Plot')
     main_box.show()
diff --git a/gr-qtgui/apps/gr_psd_plot_i b/gr-qtgui/apps/gr_psd_plot_i
index fda69cfbca..b52e9afb00 100755
--- a/gr-qtgui/apps/gr_psd_plot_i
+++ b/gr-qtgui/apps/gr_psd_plot_i
@@ -54,16 +54,15 @@ class psd_plot_i(plot_base.plot_base):
 
 def main():
     description = "Plots the PSDs of a list of files. Files are a binary list of integers."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = psd_plot_i(filelist,
-                    options.center_frequency, options.sample_rate,
-                    options.psd_size,
-                    options.start, options.nsamples, max_nsamples,
-                    options.average)
+    tb = psd_plot_i(args.files,
+                    args.center_frequency, args.sample_rate,
+                    args.psd_size,
+                    args.start, args.nsamples, max_nsamples,
+                    args.average)
 
     main_box = plot_base.plot_psd_form(tb, 'GNU Radio PSD Plot')
     main_box.show()
diff --git a/gr-qtgui/apps/gr_psd_plot_s b/gr-qtgui/apps/gr_psd_plot_s
index 02fe777dda..d62a59fd2f 100755
--- a/gr-qtgui/apps/gr_psd_plot_s
+++ b/gr-qtgui/apps/gr_psd_plot_s
@@ -54,16 +54,15 @@ class psd_plot_s(plot_base.plot_base):
 
 def main():
     description = "Plots the PSDs of a list of files. Files are a binary list of shorts."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = psd_plot_s(filelist,
-                    options.center_frequency, options.sample_rate,
-                    options.psd_size,
-                    options.start, options.nsamples, max_nsamples,
-                    options.average)
+    tb = psd_plot_s(args.files,
+                    args.center_frequency, args.sample_rate,
+                    args.psd_size,
+                    args.start, args.nsamples, max_nsamples,
+                    args.average)
 
     main_box = plot_base.plot_psd_form(tb, 'GNU Radio PSD Plot')
     main_box.show()
diff --git a/gr-qtgui/apps/gr_spectrogram_plot b/gr-qtgui/apps/gr_spectrogram_plot
index 6fb25651ac..31131078b6 100755
--- a/gr-qtgui/apps/gr_spectrogram_plot
+++ b/gr-qtgui/apps/gr_spectrogram_plot
@@ -142,55 +142,54 @@ def read_header(filelist):
 def main():
    description = 'Plots the spectrogram (waterfall) of a file with detached header.'
    description += ' Assumes header is <input_filename>.hdr'
-   (options, args) = plot_base.setup_options(description)
-   filelist = list(args)
+   args = plot_base.setup_options(description)
    # Attempt to read the header information
-   info = read_header(filelist)
+   info = read_header(args.files)
    # If no header, quit
    if not info:
       sys.stderr.write('Header not found\n')
       sys.exit(1)
 
-   max_nsamples = plot_base.find_max_nsamples(filelist)
+   max_nsamples = plot_base.find_max_nsamples(args.files)
    srate = info["rx_rate"]
 
    # Dispatch the proper function
    # Complex Types
    if(info["cplx"] == True):
       if( info["type"] == "float" ):
-         tb = spectrogram_plot_c(filelist,
-                            options.center_frequency,srate,
-                            options.psd_size,
-                            options.start, options.nsamples, max_nsamples,
-                            options.average);
+         tb = spectrogram_plot_c(args.files,
+                            args.center_frequency,srate,
+                            args.psd_size,
+                            args.start, args.nsamples, max_nsamples,
+                            args.average);
       else:
          sys.stderr.write("Complex File Type " + info["type"]+ " not supported.\n")
    # Real Types
    else:
       if( info["type"] == "bytes" ):
-         tb = spectrogram_plot_b(filelist,
-                            options.center_frequency,srate,
-                            options.psd_size,
-                            options.start, options.nsamples, max_nsamples,
-                            options.average);
+         tb = spectrogram_plot_b(args.files,
+                            args.center_frequency,srate,
+                            args.psd_size,
+                            args.start, args.nsamples, max_nsamples,
+                            args.average);
       elif( info["type"] == "int" ):
-         tb = spectrogram_plot_i(filelist,
-                            options.center_frequency,srate,
-                            options.psd_size,
-                            options.start, options.nsamples, max_nsamples,
-                            options.average);
+         tb = spectrogram_plot_i(args.files,
+                            args.center_frequency,srate,
+                            args.psd_size,
+                            args.start, args.nsamples, max_nsamples,
+                            args.average);
       elif( info["type"] == "float" ):
-         tb = spectrogram_plot_f(filelist,
-                            options.center_frequency,srate,
-                            options.psd_size,
-                            options.start, options.nsamples, max_nsamples,
-                            options.average);
+         tb = spectrogram_plot_f(args.files,
+                            args.center_frequency,srate,
+                            args.psd_size,
+                            args.start, args.nsamples, max_nsamples,
+                            args.average);
       elif( info["type"] == "short" ):
-         tb = spectrogram_plot_s(filelist,
-                            options.center_frequency,srate,
-                            options.psd_size,
-                            options.start, options.nsamples, max_nsamples,
-                            options.average);
+         tb = spectrogram_plot_s(args.files,
+                            args.center_frequency,srate,
+                            args.psd_size,
+                            args.start, args.nsamples, max_nsamples,
+                            args.average);
       else:
         sys.stderr.write("Real File Type " + info["type"] + " not supported\n")
    main_box = plot_base.plot_spectrogram_form(tb, 'GNU Radio Spectrogram Plot')
diff --git a/gr-qtgui/apps/gr_spectrogram_plot_b b/gr-qtgui/apps/gr_spectrogram_plot_b
index 917fc4e9e9..bb3fb0deff 100755
--- a/gr-qtgui/apps/gr_spectrogram_plot_b
+++ b/gr-qtgui/apps/gr_spectrogram_plot_b
@@ -54,16 +54,15 @@ class spectrogram_plot_b(plot_base.plot_base):
 
 def main():
     description = "Plots the spectrogram (waterfall) of a list of files. Files are a binary list of chars."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = spectrogram_plot_b(filelist,
-                            options.center_frequency, options.sample_rate,
-                            options.psd_size,
-                            options.start, options.nsamples, max_nsamples,
-                            options.average);
+    tb = spectrogram_plot_b(args.files,
+                            args.center_frequency, args.sample_rate,
+                            args.psd_size,
+                            args.start, args.nsamples, max_nsamples,
+                            args.average);
 
     main_box = plot_base.plot_spectrogram_form(tb, 'GNU Radio Time Plot')
     main_box.show()
diff --git a/gr-qtgui/apps/gr_spectrogram_plot_c b/gr-qtgui/apps/gr_spectrogram_plot_c
index e6d7455920..822ffbdd8f 100755
--- a/gr-qtgui/apps/gr_spectrogram_plot_c
+++ b/gr-qtgui/apps/gr_spectrogram_plot_c
@@ -55,16 +55,15 @@ class spectrogram_plot_c(plot_base.plot_base):
 
 def main():
     description = "Plots the spectrogram (waterfall) of a list of files. Files are a binary list of complex floats."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = spectrogram_plot_c(filelist,
-                            options.center_frequency, options.sample_rate,
-                            options.psd_size,
-                            options.start, options.nsamples, max_nsamples,
-                            options.average);
+    tb = spectrogram_plot_c(args.files,
+                            args.center_frequency, args.sample_rate,
+                            args.psd_size,
+                            args.start, args.nsamples, max_nsamples,
+                            args.average);
 
     main_box = plot_base.plot_spectrogram_form(tb, 'GNU Radio Spectrogram Plot')
     main_box.show()
diff --git a/gr-qtgui/apps/gr_spectrogram_plot_f b/gr-qtgui/apps/gr_spectrogram_plot_f
index 91eb48b5e5..114bb6d378 100755
--- a/gr-qtgui/apps/gr_spectrogram_plot_f
+++ b/gr-qtgui/apps/gr_spectrogram_plot_f
@@ -55,16 +55,15 @@ class spectrogram_plot_f(plot_base.plot_base):
 
 def main():
     description = "Plots the spectrogram (waterfall) of a list of files. Files are a binary list of floats."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = spectrogram_plot_f(filelist,
-                            options.center_frequency, options.sample_rate,
-                            options.psd_size,
-                            options.start, options.nsamples, max_nsamples,
-                            options.average);
+    tb = spectrogram_plot_f(args.files,
+                            args.center_frequency, args.sample_rate,
+                            args.psd_size,
+                            args.start, args.nsamples, max_nsamples,
+                            args.average);
 
     main_box = plot_base.plot_spectrogram_form(tb, 'GNU Radio Time Plot')
     main_box.show()
diff --git a/gr-qtgui/apps/gr_spectrogram_plot_i b/gr-qtgui/apps/gr_spectrogram_plot_i
index 4e66585811..4c09042104 100755
--- a/gr-qtgui/apps/gr_spectrogram_plot_i
+++ b/gr-qtgui/apps/gr_spectrogram_plot_i
@@ -54,16 +54,15 @@ class spectrogram_plot_i(plot_base.plot_base):
 
 def main():
     description = "Plots the spectrogram (waterfall) of a list of files. Files are a binary list of ints."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = spectrogram_plot_i(filelist,
-                            options.center_frequency, options.sample_rate,
-                            options.psd_size,
-                            options.start, options.nsamples, max_nsamples,
-                            options.average);
+    tb = spectrogram_plot_i(args.files,
+                            args.center_frequency, args.sample_rate,
+                            args.psd_size,
+                            args.start, args.nsamples, max_nsamples,
+                            args.average);
 
     main_box = plot_base.plot_spectrogram_form(tb, 'GNU Radio Time Plot')
     main_box.show()
diff --git a/gr-qtgui/apps/gr_spectrogram_plot_s b/gr-qtgui/apps/gr_spectrogram_plot_s
index 014663f20f..2fb19b956e 100755
--- a/gr-qtgui/apps/gr_spectrogram_plot_s
+++ b/gr-qtgui/apps/gr_spectrogram_plot_s
@@ -54,16 +54,15 @@ class spectrogram_plot_s(plot_base.plot_base):
 
 def main():
     description = "Plots the spectrogram (waterfall) of a list of files. Files are a binary list of shorts."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = spectrogram_plot_s(filelist,
-                            options.center_frequency, options.sample_rate,
-                            options.psd_size,
-                            options.start, options.nsamples, max_nsamples,
-                            options.average);
+    tb = spectrogram_plot_s(args.files,
+                            args.center_frequency, args.sample_rate,
+                            args.psd_size,
+                            args.start, args.nsamples, max_nsamples,
+                            args.average);
 
     main_box = plot_base.plot_spectrogram_form(tb, 'GNU Radio Time Plot')
     main_box.show()
diff --git a/gr-qtgui/apps/gr_time_plot_b b/gr-qtgui/apps/gr_time_plot_b
index 4a5ef3e8a8..ff94fd3f84 100755
--- a/gr-qtgui/apps/gr_time_plot_b
+++ b/gr-qtgui/apps/gr_time_plot_b
@@ -52,14 +52,13 @@ class plot_time_b(plot_base.plot_base):
 
 def main():
     description = "Plots a list of files on a scope plot. Files are a binary list of chars."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = plot_time_b(filelist, options.sample_rate,
-                     options.start, options.nsamples, max_nsamples,
-                     not options.no_auto_scale)
+    tb = plot_time_b(args.files, args.sample_rate,
+                     args.start, args.nsamples, max_nsamples,
+                     not args.no_auto_scale)
 
     main_box = plot_base.plot_time_form(tb, 'GNU Radio Time Plot')
     main_box.show()
diff --git a/gr-qtgui/apps/gr_time_plot_c b/gr-qtgui/apps/gr_time_plot_c
index 307cf9b534..db914a49b4 100755
--- a/gr-qtgui/apps/gr_time_plot_c
+++ b/gr-qtgui/apps/gr_time_plot_c
@@ -54,14 +54,13 @@ class plot_time_c(plot_base.plot_base):
 
 def main():
     description = "Plots a list of files on a scope plot. Files are a binary list of complex floats."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = plot_time_c(filelist, options.sample_rate,
-                     options.start, options.nsamples, max_nsamples,
-                     not options.no_auto_scale)
+    tb = plot_time_c(args.files, args.sample_rate,
+                     args.start, args.nsamples, max_nsamples,
+                     not args.no_auto_scale)
 
     main_box = plot_base.plot_time_form(tb, 'GNU Radio Time Plot', 10000.0)
     main_box.show()
diff --git a/gr-qtgui/apps/gr_time_plot_f b/gr-qtgui/apps/gr_time_plot_f
index 95d3a8a46e..354ccc6e08 100755
--- a/gr-qtgui/apps/gr_time_plot_f
+++ b/gr-qtgui/apps/gr_time_plot_f
@@ -53,14 +53,13 @@ class plot_time_f(plot_base.plot_base):
 
 def main():
     description = "Plots a list of files on a scope plot. Files are a binary list of floats."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = plot_time_f(filelist, options.sample_rate,
-                     options.start, options.nsamples, max_nsamples,
-                     not options.no_auto_scale)
+    tb = plot_time_f(args.files, args.sample_rate,
+                     args.start, args.nsamples, max_nsamples,
+                     not args.no_auto_scale)
 
     main_box = plot_base.plot_time_form(tb, 'GNU Radio Time Plot', 10000.0)
     main_box.show()
diff --git a/gr-qtgui/apps/gr_time_plot_i b/gr-qtgui/apps/gr_time_plot_i
index 1d70098ee3..34af6efe6f 100755
--- a/gr-qtgui/apps/gr_time_plot_i
+++ b/gr-qtgui/apps/gr_time_plot_i
@@ -52,14 +52,13 @@ class plot_time_i(plot_base.plot_base):
 
 def main():
     description = "Plots a list of files on a scope plot. Files are a binary list of integers."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = plot_time_i(filelist, options.sample_rate,
-                     options.start, options.nsamples, max_nsamples,
-                     not options.no_auto_scale)
+    tb = plot_time_i(args.files, args.sample_rate,
+                     args.start, args.nsamples, max_nsamples,
+                     not args.no_auto_scale)
 
     main_box = plot_base.plot_time_form(tb, 'GNU Radio Time Plot')
     main_box.show()
diff --git a/gr-qtgui/apps/gr_time_plot_s b/gr-qtgui/apps/gr_time_plot_s
index 50643e0ae2..0702362659 100755
--- a/gr-qtgui/apps/gr_time_plot_s
+++ b/gr-qtgui/apps/gr_time_plot_s
@@ -52,14 +52,13 @@ class plot_time_s(plot_base.plot_base):
 
 def main():
     description = "Plots a list of files on a scope plot. Files are a binary list of shorts."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = plot_time_s(filelist, options.sample_rate,
-                     options.start, options.nsamples, max_nsamples,
-                     not options.no_auto_scale)
+    tb = plot_time_s(args.files, args.sample_rate,
+                     args.start, args.nsamples, max_nsamples,
+                     not args.no_auto_scale)
 
     main_box = plot_base.plot_time_form(tb, 'GNU Radio Time Plot')
     main_box.show()
diff --git a/gr-qtgui/apps/gr_time_raster_b b/gr-qtgui/apps/gr_time_raster_b
index 370008a2ab..be1d8adbe6 100755
--- a/gr-qtgui/apps/gr_time_raster_b
+++ b/gr-qtgui/apps/gr_time_raster_b
@@ -56,15 +56,14 @@ class plot_time_raster_b(plot_base.plot_base):
 
 def main():
     description = "Plots a list of files on a scope plot. Files are a binary list of chars."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = plot_time_raster_b(filelist, options.sample_rate,
-                            options.start, options.nsamples, max_nsamples,
-                            options.nrows, options.ncols,
-                            not options.no_auto_scale)
+    tb = plot_time_raster_b(args.files, args.sample_rate,
+                            args.start, args.nsamples, max_nsamples,
+                            args.nrows, args.ncols,
+                            not args.no_auto_scale)
 
     main_box = plot_base.plot_time_raster_form(tb, 'GNU Radio Time Plot')
     main_box.show()
diff --git a/gr-qtgui/apps/gr_time_raster_f b/gr-qtgui/apps/gr_time_raster_f
index 7512348e86..768313601b 100755
--- a/gr-qtgui/apps/gr_time_raster_f
+++ b/gr-qtgui/apps/gr_time_raster_f
@@ -56,15 +56,14 @@ class plot_time_raster_f(plot_base.plot_base):
 
 def main():
     description = "Plots a list of files on a scope plot. Files are a binary list of floats."
-    (options, args) = plot_base.setup_options(description)
+    args = plot_base.setup_options(description)
 
-    filelist = list(args)
-    max_nsamples = plot_base.find_max_nsamples(filelist)
+    max_nsamples = plot_base.find_max_nsamples(args.files)
 
-    tb = plot_time_raster_f(filelist, options.sample_rate,
-                            options.start, options.nsamples, max_nsamples,
-                            options.nrows, options.ncols,
-                            not options.no_auto_scale)
+    tb = plot_time_raster_f(args.files, args.sample_rate,
+                            args.start, args.nsamples, max_nsamples,
+                            args.nrows, args.ncols,
+                            not args.no_auto_scale)
 
     main_box = plot_base.plot_time_raster_form(tb, 'GNU Radio Time Plot', 10000.0)
     main_box.show()
diff --git a/gr-qtgui/apps/plot_base.py b/gr-qtgui/apps/plot_base.py
index 4b57291e06..306c06ff47 100644
--- a/gr-qtgui/apps/plot_base.py
+++ b/gr-qtgui/apps/plot_base.py
@@ -21,8 +21,6 @@
 #
 
 from gnuradio import gr, blocks
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
 import os, sys
 
 os.environ['GR_CONF_CONTROLPORT_ON'] = 'False'
diff --git a/gr-qtgui/apps/plot_psd_base.py b/gr-qtgui/apps/plot_psd_base.py
index 0990e439bb..c0ba7c9fba 100644
--- a/gr-qtgui/apps/plot_psd_base.py
+++ b/gr-qtgui/apps/plot_psd_base.py
@@ -21,8 +21,8 @@
 #
 
 from gnuradio import gr, blocks
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
+from gnuradio.eng_arg import eng_float, intx
+from argparse import ArgumentParser
 import os, sys
 
 try:
@@ -141,23 +141,21 @@ class plot_base(gr.top_block):
         self.start()
 
 def setup_options(desc):
-    parser = OptionParser(option_class=eng_option, description=desc,
-                          conflict_handler="resolve")
-    parser.add_option("-N", "--nsamples", type="int", default=1000000,
+    parser = ArgumentParser(description=desc, conflict_handler="resolve")
+    parser.add_argument("-N", "--nsamples", type=int, default=1000000,
                       help="Set the number of samples to display [default=prints entire file]")
-    parser.add_option("-S", "--start", type="int", default=0,
-                      help="Starting sample number [default=%default]")
-    parser.add_option("-L", "--psd-size", type="int", default=2048,
-                      help="Set the FFT size of the PSD [default=%default]")
-    parser.add_option("-f", "--center-frequency", type="eng_float", default=0.0,
-                      help="Set the center frequency of the signal [default=%default]")
-    parser.add_option("-r", "--sample-rate", type="eng_float", default=1.0,
-                      help="Set the sample rate of the signal [default=%default]")
-    parser.add_option("-a", "--average", type="float", default=1.0,
-                      help="Set amount of averaging (smaller=more averaging) [default=%default]")
-    (options, args) = parser.parse_args()
-
-    if(len(args) < 1):
-        parser.print_help()
-        sys.exit(0)
-    return (options,args)
+    parser.add_argument("-S", "--start", type=int, default=0,
+                      help="Starting sample number [default=%(default)r]")
+    parser.add_argument("-L", "--psd-size", type=int, default=2048,
+                      help="Set the FFT size of the PSD [default=%(default)r]")
+    parser.add_argument("-f", "--center-frequency", type=eng_float, default=0.0,
+                      help="Set the center frequency of the signal [default=%(default)r]")
+    parser.add_argument("-r", "--sample-rate", type=eng_float, default=1.0,
+                      help="Set the sample rate of the signal [default=%(default)r]")
+    parser.add_argument("-a", "--average", type=float, default=1.0,
+                      help="Set amount of averaging (smaller=more averaging) [default=%(default)r]")
+    parser.add_argument("files", nargs='+', metavar='FILE',
+                      help="Complex samples")
+    args = parser.parse_args()
+
+    return args
diff --git a/gr-qtgui/apps/plot_spectrogram_base.py b/gr-qtgui/apps/plot_spectrogram_base.py
index 3fae5c252a..5021be8f82 100644
--- a/gr-qtgui/apps/plot_spectrogram_base.py
+++ b/gr-qtgui/apps/plot_spectrogram_base.py
@@ -21,8 +21,8 @@
 #
 
 from gnuradio import gr, blocks
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
+from gnuradio.eng_arg import eng_float, intx
+from argparse import ArgumentParser
 import os, sys
 
 try:
@@ -146,25 +146,22 @@ class plot_base(gr.top_block):
         self.start()
 
 def setup_options(desc):
-    parser = OptionParser(option_class=eng_option, description=desc,
-                          conflict_handler="resolve")
-    parser.add_option("-N", "--nsamples", type="int", default=1000000,
-                      help="Set the number of samples to display [default=%default]")
-    parser.add_option("-S", "--start", type="int", default=0,
-                      help="Starting sample number [default=%default]")
-    parser.add_option("-L", "--psd-size", type="int", default=2048,
-                      help="Set the FFT size of the PSD [default=%default]")
-    parser.add_option("-f", "--center-frequency", type="eng_float", default=0.0,
-                      help="Set the center frequency of the signal [default=%default]")
-    parser.add_option("-r", "--sample-rate", type="eng_float", default=1.0,
-                      help="Set the sample rate of the signal [default=%default]")
-    parser.add_option("-a", "--average", type="float", default=1.0,
-                      help="Set amount of averaging (smaller=more averaging) [default=%default]")
-    (options, args) = parser.parse_args()
-
-    if(len(args) < 1):
-        parser.print_help()
-        sys.exit(0)
-
-    return (options, args)
+    parser = ArgumentParser(description=desc, conflict_handler="resolve")
+    parser.add_argument("-N", "--nsamples", type=int, default=1000000,
+                      help="Set the number of samples to display [default=%(default)r]")
+    parser.add_argument("-S", "--start", type=int, default=0,
+                      help="Starting sample number [default=%(default)r]")
+    parser.add_argument("-L", "--psd-size", type=int, default=2048,
+                      help="Set the FFT size of the PSD [default=%(default)r]")
+    parser.add_argument("-f", "--center-frequency", type=eng_float, default=0.0,
+                      help="Set the center frequency of the signal [default=%(default)r]")
+    parser.add_argument("-r", "--sample-rate", type=eng_float, default=1.0,
+                      help="Set the sample rate of the signal [default=%(default)r]")
+    parser.add_argument("-a", "--average", type=float, default=1.0,
+                      help="Set amount of averaging (smaller=more averaging) [default=%(default)r]")
+    parser.add_argument('files', nargs='+', metavar='FILE',
+                      help="File with complex samples")
+    args = parser.parse_args()
+
+    return args
 
diff --git a/gr-qtgui/apps/plot_time_base.py b/gr-qtgui/apps/plot_time_base.py
index 31c96ab804..03b0338b0e 100644
--- a/gr-qtgui/apps/plot_time_base.py
+++ b/gr-qtgui/apps/plot_time_base.py
@@ -21,8 +21,8 @@
 #
 
 from gnuradio import gr, blocks
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
+from gnuradio.eng_arg import eng_float, intx
+from argparse import ArgumentParser
 import os, sys
 
 try:
@@ -166,19 +166,18 @@ class plot_base(gr.top_block):
             self._auto_scale = False
 
 def setup_options(desc):
-    parser = OptionParser(option_class=eng_option, description=desc,
-                          conflict_handler="resolve")
-    parser.add_option("-N", "--nsamples", type="int", default=1000000,
-                      help="Set the number of samples to display [default=%default]")
-    parser.add_option("-S", "--start", type="int", default=0,
-                      help="Starting sample number [default=%default]")
-    parser.add_option("-r", "--sample-rate", type="eng_float", default=1.0,
-                      help="Set the sample rate of the signal [default=%default]")
-    parser.add_option("", "--no-auto-scale", action="store_true", default=False,
-                      help="Do not auto-scale the plot [default=%default]")
-    (options,args) = parser.parse_args()
-    if(len(args) < 1):
-        parser.print_help()
-        sys.exit(0)
-    return (options,args)
+    parser = ArgumentParser(description=desc, conflict_handler="resolve")
+    parser.add_argument("-N", "--nsamples", type=int, default=1000000,
+                      help="Set the number of samples to display [default=%(default)r]")
+    parser.add_argument("-S", "--start", type=int, default=0,
+                      help="Starting sample number [default=%(default)r]")
+    parser.add_argument("-r", "--sample-rate", type=eng_float, default=1.0,
+                      help="Set the sample rate of the signal [default=%(default)r]")
+    parser.add_argument("--no-auto-scale", action="store_true",
+                      help="Do not auto-scale the plot [default=%(default)r]")
+    parser.add_argument("files", nargs='+', metavar="FILE",
+                      help="File with complex samples")
+    args = parser.parse_args()
+
+    return args
 
diff --git a/gr-qtgui/apps/plot_time_raster_base.py b/gr-qtgui/apps/plot_time_raster_base.py
index 252f4154e8..97fdd61c82 100644
--- a/gr-qtgui/apps/plot_time_raster_base.py
+++ b/gr-qtgui/apps/plot_time_raster_base.py
@@ -21,8 +21,8 @@
 #
 
 from gnuradio import gr, blocks
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
+from gnuradio.eng_arg import eng_float, intx
+from argparse import ArgumentParser
 import os, sys
 
 try:
@@ -161,23 +161,22 @@ class plot_base(gr.top_block):
             self._auto_scale = False
 
 def setup_options(desc):
-    parser = OptionParser(option_class=eng_option, description=desc,
-                          conflict_handler="resolve")
-    parser.add_option("-N", "--nsamples", type="int", default=1000000,
-                      help="Set the number of samples to display [default=%default]")
-    parser.add_option("-S", "--start", type="int", default=0,
-                      help="Starting sample number [default=%default]")
-    parser.add_option("-C", "--ncols", type="int", default=100,
-                      help="Number of columns [default=%default]")
-    parser.add_option("-R", "--nrows", type="int", default=100,
-                      help="Number of rows [default=%default]")
-    parser.add_option("-r", "--sample-rate", type="eng_float", default=1.0,
-                      help="Set the sample rate of the signal [default=%default]")
-    parser.add_option("", "--no-auto-scale", action="store_true", default=False,
-                      help="Do not auto-scale the plot [default=%default]")
-    (options,args) = parser.parse_args()
-    if(len(args) < 1):
-        parser.print_help()
-        sys.exit(0)
-    return (options,args)
+    parser = ArgumentParser(description=desc, conflict_handler="resolve")
+    parser.add_argument("-N", "--nsamples", type=int, default=1000000,
+                      help="Set the number of samples to display [default=%(default)r]")
+    parser.add_argument("-S", "--start", type=int, default=0,
+                      help="Starting sample number [default=%(default)r]")
+    parser.add_argument("-C", "--ncols", type=int, default=100,
+                      help="Number of columns [default=%(default)r]")
+    parser.add_argument("-R", "--nrows", type=int, default=100,
+                      help="Number of rows [default=%(default)r]")
+    parser.add_argument("-r", "--sample-rate", type=eng_float, default=1.0,
+                      help="Set the sample rate of the signal [default=%(default)r]")
+    parser.add_argument("--no-auto-scale", action="store_true",
+                      help="Do not auto-scale the plot [default=%(default)r]")
+    parser.add_argument("files", nargs="+", metavar="FILE",
+                      help="Input files with complex samples")
+    args = parser.parse_args()
+
+    return args
 
diff --git a/gr-qtgui/apps/qt_digital.py b/gr-qtgui/apps/qt_digital.py
index fef4f448b4..92c81c312d 100755
--- a/gr-qtgui/apps/qt_digital.py
+++ b/gr-qtgui/apps/qt_digital.py
@@ -29,10 +29,10 @@ import sys
 
 try:
     from gnuradio import qtgui
-    from PyQt4 import QtGui, QtCore
+    from PyQt5 import QtGui, QtCore
     import sip
 except ImportError:
-    print "Error: Program requires PyQt4 and gr-qtgui."
+    print "Error: Program requires PyQt5 and gr-qtgui."
     sys.exit(1)
 
 try:
@@ -45,7 +45,7 @@ try:
     from qt_digital_window import Ui_DigitalWindow
 except ImportError:
     print "Error: could not find qt_digital_window.py:"
-    print "\t\"Please run: pyuic4 qt_digital_window.ui -o qt_digital_window.py\""
+    print "\t\"Please run: pyuic5 qt_digital_window.ui -o qt_digital_window.py\""
     sys.exit(1)
 
 class dialog_box(QtGui.QMainWindow):
diff --git a/gr-qtgui/apps/qt_digital_window.py b/gr-qtgui/apps/qt_digital_window.py
index 50dd53a923..04ecfe1030 100644
--- a/gr-qtgui/apps/qt_digital_window.py
+++ b/gr-qtgui/apps/qt_digital_window.py
@@ -2,36 +2,35 @@
 
 # Form implementation generated from reading ui file 'qt_digital_window.ui'
 #
-# Created: Sat May  1 20:14:02 2010
-#      by: PyQt4 UI code generator 4.6.1
+# Created by: PyQt5 UI code generator 5.7
 #
 # WARNING! All changes made in this file will be lost!
 
-from PyQt4 import QtCore, QtGui
+from PyQt5 import QtCore, QtGui, QtWidgets
 
 class Ui_DigitalWindow(object):
     def setupUi(self, DigitalWindow):
         DigitalWindow.setObjectName("DigitalWindow")
         DigitalWindow.resize(1236, 741)
-        self.centralwidget = QtGui.QWidget(DigitalWindow)
+        self.centralwidget = QtWidgets.QWidget(DigitalWindow)
         self.centralwidget.setObjectName("centralwidget")
-        self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
+        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
         self.verticalLayout.setObjectName("verticalLayout")
-        self.sinkFrame = QtGui.QFrame(self.centralwidget)
+        self.sinkFrame = QtWidgets.QFrame(self.centralwidget)
         self.sinkFrame.setMinimumSize(QtCore.QSize(0, 550))
-        self.sinkFrame.setFrameShape(QtGui.QFrame.StyledPanel)
-        self.sinkFrame.setFrameShadow(QtGui.QFrame.Raised)
+        self.sinkFrame.setFrameShape(QtWidgets.QFrame.StyledPanel)
+        self.sinkFrame.setFrameShadow(QtWidgets.QFrame.Raised)
         self.sinkFrame.setObjectName("sinkFrame")
-        self.horizontalLayout_2 = QtGui.QHBoxLayout(self.sinkFrame)
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.sinkFrame)
         self.horizontalLayout_2.setObjectName("horizontalLayout_2")
-        self.sinkLayout = QtGui.QHBoxLayout()
+        self.sinkLayout = QtWidgets.QHBoxLayout()
         self.sinkLayout.setObjectName("sinkLayout")
         self.horizontalLayout_2.addLayout(self.sinkLayout)
         self.verticalLayout.addWidget(self.sinkFrame)
-        self.horizontalLayout = QtGui.QHBoxLayout()
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
         self.horizontalLayout.setObjectName("horizontalLayout")
-        self.sysBox = QtGui.QGroupBox(self.centralwidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
+        self.sysBox = QtWidgets.QGroupBox(self.centralwidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.sysBox.sizePolicy().hasHeightForWidth())
@@ -40,74 +39,74 @@ class Ui_DigitalWindow(object):
         self.sysBox.setMaximumSize(QtCore.QSize(16777215, 120))
         self.sysBox.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
         self.sysBox.setObjectName("sysBox")
-        self.gridLayout_2 = QtGui.QGridLayout(self.sysBox)
+        self.gridLayout_2 = QtWidgets.QGridLayout(self.sysBox)
         self.gridLayout_2.setObjectName("gridLayout_2")
-        self.sampleRateEdit = QtGui.QLineEdit(self.sysBox)
+        self.sampleRateEdit = QtWidgets.QLineEdit(self.sysBox)
         self.sampleRateEdit.setMaximumSize(QtCore.QSize(100, 16777215))
         self.sampleRateEdit.setObjectName("sampleRateEdit")
         self.gridLayout_2.addWidget(self.sampleRateEdit, 0, 3, 1, 1)
-        self.sampleRateLabel = QtGui.QLabel(self.sysBox)
+        self.sampleRateLabel = QtWidgets.QLabel(self.sysBox)
         self.sampleRateLabel.setObjectName("sampleRateLabel")
         self.gridLayout_2.addWidget(self.sampleRateLabel, 0, 2, 1, 1)
         self.horizontalLayout.addWidget(self.sysBox)
-        self.rxBox = QtGui.QGroupBox(self.centralwidget)
+        self.rxBox = QtWidgets.QGroupBox(self.centralwidget)
         self.rxBox.setMaximumSize(QtCore.QSize(16777215, 120))
         self.rxBox.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
         self.rxBox.setObjectName("rxBox")
-        self.gridLayout_3 = QtGui.QGridLayout(self.rxBox)
+        self.gridLayout_3 = QtWidgets.QGridLayout(self.rxBox)
         self.gridLayout_3.setObjectName("gridLayout_3")
-        self.alphaLabel = QtGui.QLabel(self.rxBox)
+        self.alphaLabel = QtWidgets.QLabel(self.rxBox)
         self.alphaLabel.setObjectName("alphaLabel")
         self.gridLayout_3.addWidget(self.alphaLabel, 1, 0, 1, 1)
-        self.alphaEdit = QtGui.QLineEdit(self.rxBox)
+        self.alphaEdit = QtWidgets.QLineEdit(self.rxBox)
         self.alphaEdit.setMaximumSize(QtCore.QSize(100, 16777215))
         self.alphaEdit.setObjectName("alphaEdit")
         self.gridLayout_3.addWidget(self.alphaEdit, 1, 1, 1, 1)
-        self.gainMuLabel = QtGui.QLabel(self.rxBox)
+        self.gainMuLabel = QtWidgets.QLabel(self.rxBox)
         self.gainMuLabel.setObjectName("gainMuLabel")
         self.gridLayout_3.addWidget(self.gainMuLabel, 0, 0, 1, 1)
-        self.gainMuEdit = QtGui.QLineEdit(self.rxBox)
+        self.gainMuEdit = QtWidgets.QLineEdit(self.rxBox)
         self.gainMuEdit.setMaximumSize(QtCore.QSize(100, 16777215))
         self.gainMuEdit.setObjectName("gainMuEdit")
         self.gridLayout_3.addWidget(self.gainMuEdit, 0, 1, 1, 1)
         self.horizontalLayout.addWidget(self.rxBox)
-        self.channelModeBox = QtGui.QGroupBox(self.centralwidget)
+        self.channelModeBox = QtWidgets.QGroupBox(self.centralwidget)
         self.channelModeBox.setMaximumSize(QtCore.QSize(16777215, 120))
         self.channelModeBox.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
         self.channelModeBox.setObjectName("channelModeBox")
-        self.gridLayout = QtGui.QGridLayout(self.channelModeBox)
-        self.gridLayout.setSizeConstraint(QtGui.QLayout.SetMinimumSize)
+        self.gridLayout = QtWidgets.QGridLayout(self.channelModeBox)
+        self.gridLayout.setSizeConstraint(QtWidgets.QLayout.SetMinimumSize)
         self.gridLayout.setObjectName("gridLayout")
-        self.snrLabel = QtGui.QLabel(self.channelModeBox)
+        self.snrLabel = QtWidgets.QLabel(self.channelModeBox)
         self.snrLabel.setObjectName("snrLabel")
         self.gridLayout.addWidget(self.snrLabel, 0, 1, 1, 1)
-        self.snrEdit = QtGui.QLineEdit(self.channelModeBox)
+        self.snrEdit = QtWidgets.QLineEdit(self.channelModeBox)
         self.snrEdit.setMaximumSize(QtCore.QSize(100, 16777215))
         self.snrEdit.setObjectName("snrEdit")
         self.gridLayout.addWidget(self.snrEdit, 0, 2, 1, 1)
-        self.freqLabel = QtGui.QLabel(self.channelModeBox)
+        self.freqLabel = QtWidgets.QLabel(self.channelModeBox)
         self.freqLabel.setObjectName("freqLabel")
         self.gridLayout.addWidget(self.freqLabel, 1, 1, 1, 1)
-        self.freqEdit = QtGui.QLineEdit(self.channelModeBox)
+        self.freqEdit = QtWidgets.QLineEdit(self.channelModeBox)
         self.freqEdit.setMaximumSize(QtCore.QSize(100, 16777215))
         self.freqEdit.setObjectName("freqEdit")
         self.gridLayout.addWidget(self.freqEdit, 1, 2, 1, 1)
-        self.timeLabel = QtGui.QLabel(self.channelModeBox)
+        self.timeLabel = QtWidgets.QLabel(self.channelModeBox)
         self.timeLabel.setObjectName("timeLabel")
         self.gridLayout.addWidget(self.timeLabel, 2, 1, 1, 1)
-        self.timeEdit = QtGui.QLineEdit(self.channelModeBox)
+        self.timeEdit = QtWidgets.QLineEdit(self.channelModeBox)
         self.timeEdit.setMaximumSize(QtCore.QSize(100, 16777215))
         self.timeEdit.setObjectName("timeEdit")
         self.gridLayout.addWidget(self.timeEdit, 2, 2, 1, 1)
         self.horizontalLayout.addWidget(self.channelModeBox)
-        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
         self.horizontalLayout.addItem(spacerItem)
-        self.verticalLayout_2 = QtGui.QVBoxLayout()
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
         self.verticalLayout_2.setObjectName("verticalLayout_2")
-        spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
         self.verticalLayout_2.addItem(spacerItem1)
-        self.pauseButton = QtGui.QPushButton(self.centralwidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
+        self.pauseButton = QtWidgets.QPushButton(self.centralwidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.pauseButton.sizePolicy().hasHeightForWidth())
@@ -115,47 +114,48 @@ class Ui_DigitalWindow(object):
         self.pauseButton.setMaximumSize(QtCore.QSize(80, 16777215))
         self.pauseButton.setObjectName("pauseButton")
         self.verticalLayout_2.addWidget(self.pauseButton)
-        self.closeButton = QtGui.QPushButton(self.centralwidget)
+        self.closeButton = QtWidgets.QPushButton(self.centralwidget)
         self.closeButton.setMaximumSize(QtCore.QSize(80, 16777215))
         self.closeButton.setObjectName("closeButton")
         self.verticalLayout_2.addWidget(self.closeButton)
         self.horizontalLayout.addLayout(self.verticalLayout_2)
         self.verticalLayout.addLayout(self.horizontalLayout)
         DigitalWindow.setCentralWidget(self.centralwidget)
-        self.menubar = QtGui.QMenuBar(DigitalWindow)
+        self.menubar = QtWidgets.QMenuBar(DigitalWindow)
         self.menubar.setGeometry(QtCore.QRect(0, 0, 1236, 23))
         self.menubar.setObjectName("menubar")
-        self.menuFile = QtGui.QMenu(self.menubar)
+        self.menuFile = QtWidgets.QMenu(self.menubar)
         self.menuFile.setObjectName("menuFile")
         DigitalWindow.setMenuBar(self.menubar)
-        self.statusbar = QtGui.QStatusBar(DigitalWindow)
+        self.statusbar = QtWidgets.QStatusBar(DigitalWindow)
         self.statusbar.setObjectName("statusbar")
         DigitalWindow.setStatusBar(self.statusbar)
-        self.actionExit = QtGui.QAction(DigitalWindow)
+        self.actionExit = QtWidgets.QAction(DigitalWindow)
         self.actionExit.setObjectName("actionExit")
         self.menuFile.addAction(self.actionExit)
         self.menubar.addAction(self.menuFile.menuAction())
 
         self.retranslateUi(DigitalWindow)
-        QtCore.QObject.connect(self.closeButton, QtCore.SIGNAL("clicked()"), DigitalWindow.close)
-        QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL("triggered()"), DigitalWindow.close)
+        self.closeButton.clicked.connect(DigitalWindow.close)
+        self.actionExit.triggered.connect(DigitalWindow.close)
         QtCore.QMetaObject.connectSlotsByName(DigitalWindow)
         DigitalWindow.setTabOrder(self.snrEdit, self.freqEdit)
         DigitalWindow.setTabOrder(self.freqEdit, self.timeEdit)
 
     def retranslateUi(self, DigitalWindow):
-        DigitalWindow.setWindowTitle(QtGui.QApplication.translate("DigitalWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
-        self.sysBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "System Parameters", None, QtGui.QApplication.UnicodeUTF8))
-        self.sampleRateLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Sample Rate (sps)", None, QtGui.QApplication.UnicodeUTF8))
-        self.rxBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Receiver Parameters", None, QtGui.QApplication.UnicodeUTF8))
-        self.alphaLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Alpha", None, QtGui.QApplication.UnicodeUTF8))
-        self.gainMuLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Gain mu", None, QtGui.QApplication.UnicodeUTF8))
-        self.channelModeBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Channel Model Parameters", None, QtGui.QApplication.UnicodeUTF8))
-        self.snrLabel.setText(QtGui.QApplication.translate("DigitalWindow", "SNR (dB)", None, QtGui.QApplication.UnicodeUTF8))
-        self.freqLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Frequency Offset (Hz)", None, QtGui.QApplication.UnicodeUTF8))
-        self.timeLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Timing Offset", None, QtGui.QApplication.UnicodeUTF8))
-        self.pauseButton.setText(QtGui.QApplication.translate("DigitalWindow", "Pause", None, QtGui.QApplication.UnicodeUTF8))
-        self.closeButton.setText(QtGui.QApplication.translate("DigitalWindow", "Close", None, QtGui.QApplication.UnicodeUTF8))
-        self.menuFile.setTitle(QtGui.QApplication.translate("DigitalWindow", "&File", None, QtGui.QApplication.UnicodeUTF8))
-        self.actionExit.setText(QtGui.QApplication.translate("DigitalWindow", "E&xit", None, QtGui.QApplication.UnicodeUTF8))
+        _translate = QtCore.QCoreApplication.translate
+        DigitalWindow.setWindowTitle(_translate("DigitalWindow", "MainWindow"))
+        self.sysBox.setTitle(_translate("DigitalWindow", "System Parameters"))
+        self.sampleRateLabel.setText(_translate("DigitalWindow", "Sample Rate (sps)"))
+        self.rxBox.setTitle(_translate("DigitalWindow", "Receiver Parameters"))
+        self.alphaLabel.setText(_translate("DigitalWindow", "Alpha"))
+        self.gainMuLabel.setText(_translate("DigitalWindow", "Gain mu"))
+        self.channelModeBox.setTitle(_translate("DigitalWindow", "Channel Model Parameters"))
+        self.snrLabel.setText(_translate("DigitalWindow", "SNR (dB)"))
+        self.freqLabel.setText(_translate("DigitalWindow", "Frequency Offset (Hz)"))
+        self.timeLabel.setText(_translate("DigitalWindow", "Timing Offset"))
+        self.pauseButton.setText(_translate("DigitalWindow", "Pause"))
+        self.closeButton.setText(_translate("DigitalWindow", "Close"))
+        self.menuFile.setTitle(_translate("DigitalWindow", "&File"))
+        self.actionExit.setText(_translate("DigitalWindow", "E&xit"))
 
diff --git a/gr-qtgui/apps/usrp_display_qtgui.py b/gr-qtgui/apps/usrp_display_qtgui.py
index 4c9de3a53c..8f8af003d8 100644
--- a/gr-qtgui/apps/usrp_display_qtgui.py
+++ b/gr-qtgui/apps/usrp_display_qtgui.py
@@ -2,25 +2,24 @@
 
 # Form implementation generated from reading ui file 'usrp_display_qtgui.ui'
 #
-# Created: Thu Jul 16 22:06:24 2009
-#      by: PyQt4 UI code generator 4.4.3
+# Created by: PyQt5 UI code generator 5.7
 #
 # WARNING! All changes made in this file will be lost!
 
-from PyQt4 import QtCore, QtGui
+from PyQt5 import QtCore, QtGui, QtWidgets
 
 class Ui_MainWindow(object):
     def setupUi(self, MainWindow):
         MainWindow.setObjectName("MainWindow")
         MainWindow.resize(820, 774)
-        self.centralwidget = QtGui.QWidget(MainWindow)
+        self.centralwidget = QtWidgets.QWidget(MainWindow)
         self.centralwidget.setObjectName("centralwidget")
-        self.gridLayout_2 = QtGui.QGridLayout(self.centralwidget)
+        self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
         self.gridLayout_2.setObjectName("gridLayout_2")
-        self.horizontalLayout_2 = QtGui.QHBoxLayout()
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
         self.horizontalLayout_2.setObjectName("horizontalLayout_2")
-        self.groupBox = QtGui.QGroupBox(self.centralwidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth())
@@ -28,101 +27,103 @@ class Ui_MainWindow(object):
         self.groupBox.setMinimumSize(QtCore.QSize(240, 150))
         self.groupBox.setMaximumSize(QtCore.QSize(240, 16777215))
         self.groupBox.setObjectName("groupBox")
-        self.formLayoutWidget = QtGui.QWidget(self.groupBox)
+        self.formLayoutWidget = QtWidgets.QWidget(self.groupBox)
         self.formLayoutWidget.setGeometry(QtCore.QRect(10, 20, 221, 124))
         self.formLayoutWidget.setObjectName("formLayoutWidget")
-        self.formLayout = QtGui.QFormLayout(self.formLayoutWidget)
+        self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget)
+        self.formLayout.setContentsMargins(0, 0, 0, 0)
         self.formLayout.setObjectName("formLayout")
-        self.frequencyLabel = QtGui.QLabel(self.formLayoutWidget)
+        self.frequencyLabel = QtWidgets.QLabel(self.formLayoutWidget)
         self.frequencyLabel.setObjectName("frequencyLabel")
-        self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.frequencyLabel)
-        self.gainLabel = QtGui.QLabel(self.formLayoutWidget)
+        self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.frequencyLabel)
+        self.gainLabel = QtWidgets.QLabel(self.formLayoutWidget)
         self.gainLabel.setObjectName("gainLabel")
-        self.formLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.gainLabel)
-        self.bandwidthLabel = QtGui.QLabel(self.formLayoutWidget)
+        self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.gainLabel)
+        self.bandwidthLabel = QtWidgets.QLabel(self.formLayoutWidget)
         self.bandwidthLabel.setObjectName("bandwidthLabel")
-        self.formLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.bandwidthLabel)
-        self.frequencyEdit = QtGui.QLineEdit(self.formLayoutWidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.bandwidthLabel)
+        self.frequencyEdit = QtWidgets.QLineEdit(self.formLayoutWidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.frequencyEdit.sizePolicy().hasHeightForWidth())
         self.frequencyEdit.setSizePolicy(sizePolicy)
         self.frequencyEdit.setMinimumSize(QtCore.QSize(120, 26))
         self.frequencyEdit.setObjectName("frequencyEdit")
-        self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.frequencyEdit)
-        self.gainEdit = QtGui.QLineEdit(self.formLayoutWidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.frequencyEdit)
+        self.gainEdit = QtWidgets.QLineEdit(self.formLayoutWidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.gainEdit.sizePolicy().hasHeightForWidth())
         self.gainEdit.setSizePolicy(sizePolicy)
         self.gainEdit.setMinimumSize(QtCore.QSize(120, 26))
         self.gainEdit.setObjectName("gainEdit")
-        self.formLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.gainEdit)
-        self.bandwidthEdit = QtGui.QLineEdit(self.formLayoutWidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.gainEdit)
+        self.bandwidthEdit = QtWidgets.QLineEdit(self.formLayoutWidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.bandwidthEdit.sizePolicy().hasHeightForWidth())
         self.bandwidthEdit.setSizePolicy(sizePolicy)
         self.bandwidthEdit.setMinimumSize(QtCore.QSize(120, 26))
         self.bandwidthEdit.setObjectName("bandwidthEdit")
-        self.formLayout.setWidget(2, QtGui.QFormLayout.FieldRole, self.bandwidthEdit)
-        self.amplifierLabel = QtGui.QLabel(self.formLayoutWidget)
+        self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.bandwidthEdit)
+        self.amplifierLabel = QtWidgets.QLabel(self.formLayoutWidget)
         self.amplifierLabel.setObjectName("amplifierLabel")
-        self.formLayout.setWidget(3, QtGui.QFormLayout.LabelRole, self.amplifierLabel)
-        self.amplifierEdit = QtGui.QLineEdit(self.formLayoutWidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.amplifierLabel)
+        self.amplifierEdit = QtWidgets.QLineEdit(self.formLayoutWidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.amplifierEdit.sizePolicy().hasHeightForWidth())
         self.amplifierEdit.setSizePolicy(sizePolicy)
         self.amplifierEdit.setMinimumSize(QtCore.QSize(120, 26))
         self.amplifierEdit.setObjectName("amplifierEdit")
-        self.formLayout.setWidget(3, QtGui.QFormLayout.FieldRole, self.amplifierEdit)
+        self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.amplifierEdit)
         self.horizontalLayout_2.addWidget(self.groupBox)
-        self.frame_2 = QtGui.QFrame(self.centralwidget)
+        self.frame_2 = QtWidgets.QFrame(self.centralwidget)
         self.frame_2.setMinimumSize(QtCore.QSize(200, 0))
-        self.frame_2.setFrameShape(QtGui.QFrame.StyledPanel)
-        self.frame_2.setFrameShadow(QtGui.QFrame.Raised)
+        self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
+        self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
         self.frame_2.setObjectName("frame_2")
-        self.verticalLayoutWidget = QtGui.QWidget(self.frame_2)
+        self.verticalLayoutWidget = QtWidgets.QWidget(self.frame_2)
         self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, -1, 191, 151))
         self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
-        self.verticalLayout_3 = QtGui.QVBoxLayout(self.verticalLayoutWidget)
+        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
+        self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
         self.verticalLayout_3.setObjectName("verticalLayout_3")
-        self.dcCancelCheckBox = QtGui.QCheckBox(self.verticalLayoutWidget)
+        self.dcCancelCheckBox = QtWidgets.QCheckBox(self.verticalLayoutWidget)
         self.dcCancelCheckBox.setObjectName("dcCancelCheckBox")
         self.verticalLayout_3.addWidget(self.dcCancelCheckBox)
-        self.horizontalLayout = QtGui.QHBoxLayout()
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
         self.horizontalLayout.setObjectName("horizontalLayout")
-        self.dcGainLabel = QtGui.QLabel(self.verticalLayoutWidget)
+        self.dcGainLabel = QtWidgets.QLabel(self.verticalLayoutWidget)
         self.dcGainLabel.setObjectName("dcGainLabel")
         self.horizontalLayout.addWidget(self.dcGainLabel)
-        self.dcGainEdit = QtGui.QLineEdit(self.verticalLayoutWidget)
+        self.dcGainEdit = QtWidgets.QLineEdit(self.verticalLayoutWidget)
         self.dcGainEdit.setObjectName("dcGainEdit")
         self.horizontalLayout.addWidget(self.dcGainEdit)
         self.verticalLayout_3.addLayout(self.horizontalLayout)
-        spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
         self.verticalLayout_3.addItem(spacerItem)
         self.horizontalLayout_2.addWidget(self.frame_2)
-        spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
         self.horizontalLayout_2.addItem(spacerItem1)
-        self.verticalLayout = QtGui.QVBoxLayout()
+        self.verticalLayout = QtWidgets.QVBoxLayout()
         self.verticalLayout.setObjectName("verticalLayout")
-        spacerItem2 = QtGui.QSpacerItem(20, 80, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
+        spacerItem2 = QtWidgets.QSpacerItem(20, 80, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
         self.verticalLayout.addItem(spacerItem2)
-        self.pauseButton = QtGui.QPushButton(self.centralwidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        self.pauseButton = QtWidgets.QPushButton(self.centralwidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.pauseButton.sizePolicy().hasHeightForWidth())
         self.pauseButton.setSizePolicy(sizePolicy)
         self.pauseButton.setObjectName("pauseButton")
         self.verticalLayout.addWidget(self.pauseButton)
-        self.closeButton = QtGui.QPushButton(self.centralwidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        self.closeButton = QtWidgets.QPushButton(self.centralwidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(0)
         sizePolicy.setHeightForWidth(self.closeButton.sizePolicy().hasHeightForWidth())
@@ -132,60 +133,61 @@ class Ui_MainWindow(object):
         self.verticalLayout.addWidget(self.closeButton)
         self.horizontalLayout_2.addLayout(self.verticalLayout)
         self.gridLayout_2.addLayout(self.horizontalLayout_2, 1, 0, 1, 1)
-        self.verticalLayout_2 = QtGui.QVBoxLayout()
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
         self.verticalLayout_2.setObjectName("verticalLayout_2")
-        self.frame = QtGui.QFrame(self.centralwidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
+        self.frame = QtWidgets.QFrame(self.centralwidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
         sizePolicy.setHorizontalStretch(0)
         sizePolicy.setVerticalStretch(1)
         sizePolicy.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth())
         self.frame.setSizePolicy(sizePolicy)
         self.frame.setMinimumSize(QtCore.QSize(800, 550))
-        self.frame.setFrameShape(QtGui.QFrame.StyledPanel)
-        self.frame.setFrameShadow(QtGui.QFrame.Raised)
+        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
+        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
         self.frame.setObjectName("frame")
-        self.gridLayout = QtGui.QGridLayout(self.frame)
+        self.gridLayout = QtWidgets.QGridLayout(self.frame)
         self.gridLayout.setObjectName("gridLayout")
-        self.sinkLayout = QtGui.QHBoxLayout()
+        self.sinkLayout = QtWidgets.QHBoxLayout()
         self.sinkLayout.setObjectName("sinkLayout")
         self.gridLayout.addLayout(self.sinkLayout, 0, 0, 1, 1)
         self.verticalLayout_2.addWidget(self.frame)
         self.gridLayout_2.addLayout(self.verticalLayout_2, 0, 0, 1, 1)
         MainWindow.setCentralWidget(self.centralwidget)
-        self.menubar = QtGui.QMenuBar(MainWindow)
+        self.menubar = QtWidgets.QMenuBar(MainWindow)
         self.menubar.setGeometry(QtCore.QRect(0, 0, 820, 24))
         self.menubar.setObjectName("menubar")
-        self.menuFile = QtGui.QMenu(self.menubar)
+        self.menuFile = QtWidgets.QMenu(self.menubar)
         self.menuFile.setObjectName("menuFile")
         MainWindow.setMenuBar(self.menubar)
-        self.statusbar = QtGui.QStatusBar(MainWindow)
+        self.statusbar = QtWidgets.QStatusBar(MainWindow)
         self.statusbar.setObjectName("statusbar")
         MainWindow.setStatusBar(self.statusbar)
-        self.actionExit = QtGui.QAction(MainWindow)
+        self.actionExit = QtWidgets.QAction(MainWindow)
         self.actionExit.setObjectName("actionExit")
-        self.actionSaveData = QtGui.QAction(MainWindow)
+        self.actionSaveData = QtWidgets.QAction(MainWindow)
         self.actionSaveData.setObjectName("actionSaveData")
         self.menuFile.addAction(self.actionSaveData)
         self.menuFile.addAction(self.actionExit)
         self.menubar.addAction(self.menuFile.menuAction())
 
         self.retranslateUi(MainWindow)
-        QtCore.QObject.connect(self.closeButton, QtCore.SIGNAL("clicked()"), MainWindow.close)
-        QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL("triggered()"), MainWindow.close)
+        self.closeButton.clicked.connect(MainWindow.close)
+        self.actionExit.triggered.connect(MainWindow.close)
         QtCore.QMetaObject.connectSlotsByName(MainWindow)
 
     def retranslateUi(self, MainWindow):
-        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "USRP Display", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox.setTitle(QtGui.QApplication.translate("MainWindow", "Receiver Parameters", None, QtGui.QApplication.UnicodeUTF8))
-        self.frequencyLabel.setText(QtGui.QApplication.translate("MainWindow", "Frequency (Hz)", None, QtGui.QApplication.UnicodeUTF8))
-        self.gainLabel.setText(QtGui.QApplication.translate("MainWindow", "RF Gain", None, QtGui.QApplication.UnicodeUTF8))
-        self.bandwidthLabel.setText(QtGui.QApplication.translate("MainWindow", "Bandwidth", None, QtGui.QApplication.UnicodeUTF8))
-        self.amplifierLabel.setText(QtGui.QApplication.translate("MainWindow", "Amplifier", None, QtGui.QApplication.UnicodeUTF8))
-        self.dcCancelCheckBox.setText(QtGui.QApplication.translate("MainWindow", "Cancel DC", None, QtGui.QApplication.UnicodeUTF8))
-        self.dcGainLabel.setText(QtGui.QApplication.translate("MainWindow", "DC Canceller Gain", None, QtGui.QApplication.UnicodeUTF8))
-        self.pauseButton.setText(QtGui.QApplication.translate("MainWindow", "Pause", None, QtGui.QApplication.UnicodeUTF8))
-        self.closeButton.setText(QtGui.QApplication.translate("MainWindow", "Close", None, QtGui.QApplication.UnicodeUTF8))
-        self.menuFile.setTitle(QtGui.QApplication.translate("MainWindow", "&File", None, QtGui.QApplication.UnicodeUTF8))
-        self.actionExit.setText(QtGui.QApplication.translate("MainWindow", "E&xit", None, QtGui.QApplication.UnicodeUTF8))
-        self.actionSaveData.setText(QtGui.QApplication.translate("MainWindow", "&Save Data", None, QtGui.QApplication.UnicodeUTF8))
+        _translate = QtCore.QCoreApplication.translate
+        MainWindow.setWindowTitle(_translate("MainWindow", "USRP Display"))
+        self.groupBox.setTitle(_translate("MainWindow", "Receiver Parameters"))
+        self.frequencyLabel.setText(_translate("MainWindow", "Frequency (Hz)"))
+        self.gainLabel.setText(_translate("MainWindow", "RF Gain"))
+        self.bandwidthLabel.setText(_translate("MainWindow", "Bandwidth"))
+        self.amplifierLabel.setText(_translate("MainWindow", "Amplifier"))
+        self.dcCancelCheckBox.setText(_translate("MainWindow", "Cancel DC"))
+        self.dcGainLabel.setText(_translate("MainWindow", "DC Canceller Gain"))
+        self.pauseButton.setText(_translate("MainWindow", "Pause"))
+        self.closeButton.setText(_translate("MainWindow", "Close"))
+        self.menuFile.setTitle(_translate("MainWindow", "&File"))
+        self.actionExit.setText(_translate("MainWindow", "E&xit"))
+        self.actionSaveData.setText(_translate("MainWindow", "&Save Data"))
 
diff --git a/gr-qtgui/examples/CMakeLists.txt b/gr-qtgui/examples/CMakeLists.txt
index 5662dfa9c8..a91e374772 100644
--- a/gr-qtgui/examples/CMakeLists.txt
+++ b/gr-qtgui/examples/CMakeLists.txt
@@ -33,7 +33,6 @@ GR_PYTHON_INSTALL(PROGRAMS
   pyqt_waterfall_c.py
   pyqt_waterfall_f.py
   DESTINATION ${GR_PKG_QTGUI_EXAMPLES_DIR}
-  COMPONENT "qtgui_python"
 )
 
 install(
@@ -43,5 +42,4 @@ install(
     qtgui_message_inputs.grc
     test_qtgui_msg.grc
     DESTINATION ${GR_PKG_QTGUI_EXAMPLES_DIR}
-    COMPONENT "qtgui_python"
 )
diff --git a/gr-qtgui/examples/c++/CMakeLists.txt b/gr-qtgui/examples/c++/CMakeLists.txt
index 49c41a0c64..dacd782e1b 100644
--- a/gr-qtgui/examples/c++/CMakeLists.txt
+++ b/gr-qtgui/examples/c++/CMakeLists.txt
@@ -35,9 +35,15 @@ list(APPEND QTGUI_LIBRARIES
   gnuradio-blocks
   gnuradio-fft
   gnuradio-runtime
+  ${QT_LIBRARIES}
 )
 
-QT4_WRAP_CPP(qtgui_moc_sources display_qt.h)
+if (${DESIRED_QT_VERSION} MATCHES 4)
+    QT4_WRAP_CPP(qtgui_moc_sources display_qt.h)
+else()
+    QT5_WRAP_CPP(qtgui_moc_sources display_qt.h)
+endif()
+
 add_executable(display_qt display_qt.cc ${qtgui_moc_sources})
 target_link_libraries(display_qt ${QTGUI_LIBRARIES})
 
diff --git a/gr-qtgui/examples/pyqt_const_c.py b/gr-qtgui/examples/pyqt_const_c.py
index 3a43bf9a92..0bb6c20d59 100755
--- a/gr-qtgui/examples/pyqt_const_c.py
+++ b/gr-qtgui/examples/pyqt_const_c.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# Copyright 2011,2012 Free Software Foundation, Inc.
+# Copyright 2011,2012,2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -26,10 +26,10 @@ import sys
 
 try:
     from gnuradio import qtgui
-    from PyQt4 import QtGui, QtCore
+    from PyQt5 import QtWidgets, Qt
     import sip
 except ImportError:
-    sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+    sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
     sys.exit(1)
 
 try:
@@ -44,71 +44,65 @@ except ImportError:
     sys.stderr.write("Error: Program requires gr-channels.\n")
     sys.exit(1)
 
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
     def __init__(self, display, control):
-        QtGui.QWidget.__init__(self, None)
+        QtWidgets.QWidget.__init__(self, None)
         self.setWindowTitle('PyQt Test GUI')
 
-        self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+        self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
         self.boxlayout.addWidget(display, 1)
         self.boxlayout.addWidget(control)
 
         self.resize(800, 500)
 
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
     def __init__(self, parent=None):
-        QtGui.QWidget.__init__(self, parent)
+        QtWidgets.QWidget.__init__(self, parent)
         self.setWindowTitle('Control Panel')
 
         self.setToolTip('Control the signals')
-        QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+        QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
 
-        self.layout = QtGui.QFormLayout(self)
+        self.layout = QtWidgets.QFormLayout(self)
 
         # Control the first signal
-        self.freq1Edit = QtGui.QLineEdit(self)
+        self.freq1Edit = QtWidgets.QLineEdit(self)
         self.freq1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
-        self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq1EditText)
+        self.freq1Edit.editingFinished.connect(self.freq1EditText)
 
-        self.amp1Edit = QtGui.QLineEdit(self)
+        self.amp1Edit = QtWidgets.QLineEdit(self)
         self.amp1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
-        self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp1EditText)
+        self.amp1Edit.editingFinished.connect(self.amp1EditText)
 
 
         # Control the second signal
-        self.freq2Edit = QtGui.QLineEdit(self)
+        self.freq2Edit = QtWidgets.QLineEdit(self)
         self.freq2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
-        self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq2EditText)
+        self.freq2Edit.editingFinished.connect(self.freq2EditText)
 
 
-        self.amp2Edit = QtGui.QLineEdit(self)
+        self.amp2Edit = QtWidgets.QLineEdit(self)
         self.amp2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
-        self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp2EditText)
+        self.amp2Edit.editingFinished.connect(self.amp2EditText)
 
-        self.quit = QtGui.QPushButton('Close', self)
+        self.quit = QtWidgets.QPushButton('Close', self)
         self.quit.setMinimumWidth(100)
+        self.quit.clicked.connect(QtWidgets.qApp.quit)
         self.layout.addWidget(self.quit)
 
-        self.connect(self.quit, QtCore.SIGNAL('clicked()'),
-                     QtGui.qApp, QtCore.SLOT('quit()'))
-
     def attach_signal1(self, signal):
         self.signal1 = signal
-        self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
-        self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+        self.freq1Edit.setText("{0}".format(self.signal1.frequency()))
+        self.amp1Edit.setText("{0}".format(self.signal1.amplitude()))
 
     def attach_signal2(self, signal):
         self.signal2 = signal
-        self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
-        self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+        self.freq2Edit.setText("{0}".format(self.signal2.frequency()))
+        self.amp2Edit.setText("{0}".format(self.signal2.amplitude()))
 
     def freq1EditText(self):
         try:
@@ -150,7 +144,7 @@ class my_top_block(gr.top_block):
 
         npts = 2048
 
-        self.qapp = QtGui.QApplication(sys.argv)
+        self.qapp = QtWidgets.QApplication(sys.argv)
 
         src1 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, f1, 0.5, 0)
         src2 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, f2, 0.5, 0)
@@ -158,6 +152,7 @@ class my_top_block(gr.top_block):
         channel = channels.channel_model(0.001)
         thr = blocks.throttle(gr.sizeof_gr_complex, 100*npts)
         self.snk1 = qtgui.const_sink_c(npts, "Constellation Example", 1)
+        self.snk1.disable_legend()
 
         self.connect(src1, (src,0))
         self.connect(src2, (src,1))
@@ -171,8 +166,8 @@ class my_top_block(gr.top_block):
         pyQt  = self.snk1.pyqwidget()
 
         # Wrap the pointer as a PyQt SIP object
-        # This can now be manipulated as a PyQt4.QtGui.QWidget
-        pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+        # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+        pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
 
         self.main_box = dialog_box(pyWin, self.ctrl_win)
         self.main_box.show()
@@ -182,4 +177,3 @@ if __name__ == "__main__":
     tb.start()
     tb.qapp.exec_()
     tb.stop()
-
diff --git a/gr-qtgui/examples/pyqt_example_c.py b/gr-qtgui/examples/pyqt_example_c.py
index 1bf61d949d..89ca7b2820 100755
--- a/gr-qtgui/examples/pyqt_example_c.py
+++ b/gr-qtgui/examples/pyqt_example_c.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# Copyright 2011,2012 Free Software Foundation, Inc.
+# Copyright 2011,2012,2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -26,10 +26,10 @@ import sys
 
 try:
     from gnuradio import qtgui
-    from PyQt4 import QtGui, QtCore
+    from PyQt5 import QtWidgets, Qt
     import sip
 except ImportError:
-    sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+    sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
     sys.exit(1)
 
 try:
@@ -44,71 +44,66 @@ except ImportError:
     sys.stderr.write("Error: Program requires gr-channels.\n")
     sys.exit(1)
 
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
     def __init__(self, display, control):
-        QtGui.QWidget.__init__(self, None)
+        QtWidgets.QWidget.__init__(self, None)
         self.setWindowTitle('PyQt Test GUI')
 
-        self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+        self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
         self.boxlayout.addWidget(display, 1)
         self.boxlayout.addWidget(control)
 
         self.resize(800, 500)
 
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
     def __init__(self, parent=None):
-        QtGui.QWidget.__init__(self, parent)
+        QtWidgets.QWidget.__init__(self, parent)
         self.setWindowTitle('Control Panel')
 
         self.setToolTip('Control the signals')
-        QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+        QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
 
-        self.layout = QtGui.QFormLayout(self)
+        self.layout = QtWidgets.QFormLayout(self)
 
         # Control the first signal
-        self.freq1Edit = QtGui.QLineEdit(self)
+        self.freq1Edit = QtWidgets.QLineEdit(self)
         self.freq1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
-        self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq1EditText)
+        self.freq1Edit.editingFinished.connect(self.freq1EditText)
 
-        self.amp1Edit = QtGui.QLineEdit(self)
+        self.amp1Edit = QtWidgets.QLineEdit(self)
         self.amp1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
-        self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp1EditText)
+        self.amp1Edit.editingFinished.connect(self.amp1EditText)
 
 
         # Control the second signal
-        self.freq2Edit = QtGui.QLineEdit(self)
+        self.freq2Edit = QtWidgets.QLineEdit(self)
         self.freq2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
-        self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq2EditText)
+        self.freq2Edit.editingFinished.connect(self.freq2EditText)
 
 
-        self.amp2Edit = QtGui.QLineEdit(self)
+        self.amp2Edit = QtWidgets.QLineEdit(self)
         self.amp2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
-        self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp2EditText)
+        self.amp2Edit.editingFinished.connect(self.amp2EditText)
 
-        self.quit = QtGui.QPushButton('Close', self)
+        self.quit = QtWidgets.QPushButton('Close', self)
         self.quit.setMinimumWidth(100)
         self.layout.addWidget(self.quit)
 
-        self.connect(self.quit, QtCore.SIGNAL('clicked()'),
-                     QtGui.qApp, QtCore.SLOT('quit()'))
+        self.quit.clicked.connect(QtWidgets.qApp.quit)
 
     def attach_signal1(self, signal):
         self.signal1 = signal
-        self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
-        self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+        self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+        self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
 
     def attach_signal2(self, signal):
         self.signal2 = signal
-        self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
-        self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+        self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+        self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
 
     def freq1EditText(self):
         try:
@@ -150,7 +145,7 @@ class my_top_block(gr.top_block):
 
         fftsize = 2048
 
-        self.qapp = QtGui.QApplication(sys.argv)
+        self.qapp = QtWidgets.QApplication(sys.argv)
         ss = open(gr.prefix() + '/share/gnuradio/themes/dark.qss')
         sstext = ss.read()
         ss.close()
@@ -178,8 +173,8 @@ class my_top_block(gr.top_block):
         pyQt  = self.snk1.pyqwidget()
 
         # Wrap the pointer as a PyQt SIP object
-        # This can now be manipulated as a PyQt4.QtGui.QWidget
-        pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+        # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+        pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
 
         self.main_box = dialog_box(pyWin, self.ctrl_win)
 
diff --git a/gr-qtgui/examples/pyqt_example_f.py b/gr-qtgui/examples/pyqt_example_f.py
index 5bd582d1e1..77a7478aa2 100755
--- a/gr-qtgui/examples/pyqt_example_f.py
+++ b/gr-qtgui/examples/pyqt_example_f.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# Copyright 2011,2012 Free Software Foundation, Inc.
+# Copyright 2011,2012,2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -26,10 +26,10 @@ import sys
 
 try:
     from gnuradio import qtgui
-    from PyQt4 import QtGui, QtCore
+    from PyQt5 import QtWidgets, Qt
     import sip
 except ImportError:
-    sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+    sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
     sys.exit(1)
 
 try:
@@ -38,71 +38,66 @@ except ImportError:
     sys.stderr.write("Error: Program requires gr-analog.\n")
     sys.exit(1)
 
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
     def __init__(self, display, control):
-        QtGui.QWidget.__init__(self, None)
+        QtWidgets.QWidget.__init__(self, None)
         self.setWindowTitle('PyQt Test GUI')
 
-        self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+        self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
         self.boxlayout.addWidget(display, 1)
         self.boxlayout.addWidget(control)
 
         self.resize(800, 500)
 
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
     def __init__(self, parent=None):
-        QtGui.QWidget.__init__(self, parent)
+        QtWidgets.QWidget.__init__(self, parent)
         self.setWindowTitle('Control Panel')
 
         self.setToolTip('Control the signals')
-        QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+        QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
 
-        self.layout = QtGui.QFormLayout(self)
+        self.layout = QtWidgets.QFormLayout(self)
 
         # Control the first signal
-        self.freq1Edit = QtGui.QLineEdit(self)
+        self.freq1Edit = QtWidgets.QLineEdit(self)
         self.freq1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
-        self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq1EditText)
+        self.freq1Edit.editingFinished.connect(self.freq1EditText)
 
-        self.amp1Edit = QtGui.QLineEdit(self)
+        self.amp1Edit = QtWidgets.QLineEdit(self)
         self.amp1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
-        self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp1EditText)
+        self.amp1Edit.editingFinished.connect(self.amp1EditText)
 
 
         # Control the second signal
-        self.freq2Edit = QtGui.QLineEdit(self)
+        self.freq2Edit = QtWidgets.QLineEdit(self)
         self.freq2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
-        self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq2EditText)
+        self.freq2Edit.editingFinished.connect(self.freq2EditText)
 
 
-        self.amp2Edit = QtGui.QLineEdit(self)
+        self.amp2Edit = QtWidgets.QLineEdit(self)
         self.amp2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
-        self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp2EditText)
+        self.amp2Edit.editingFinished.connect(self.amp2EditText)
 
-        self.quit = QtGui.QPushButton('Close', self)
+        self.quit = QtWidgets.QPushButton('Close', self)
         self.quit.setMinimumWidth(100)
         self.layout.addWidget(self.quit)
 
-        self.connect(self.quit, QtCore.SIGNAL('clicked()'),
-                     QtGui.qApp, QtCore.SLOT('quit()'))
+        self.quit.clicked.connect(QtWidgets.qApp.quit)
 
     def attach_signal1(self, signal):
         self.signal1 = signal
-        self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
-        self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+        self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+        self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
 
     def attach_signal2(self, signal):
         self.signal2 = signal
-        self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
-        self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+        self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+        self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
 
     def freq1EditText(self):
         try:
@@ -144,7 +139,7 @@ class my_top_block(gr.top_block):
 
         fftsize = 2048
 
-        self.qapp = QtGui.QApplication(sys.argv)
+        self.qapp = QtWidgets.QApplication(sys.argv)
 
         src1 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0)
         src2 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0)
@@ -171,8 +166,8 @@ class my_top_block(gr.top_block):
         pyQt  = self.snk1.pyqwidget()
 
         # Wrap the pointer as a PyQt SIP object
-        # This can now be manipulated as a PyQt4.QtGui.QWidget
-        pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+        # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+        pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
 
         self.main_box = dialog_box(pyWin, self.ctrl_win)
 
diff --git a/gr-qtgui/examples/pyqt_freq_c.py b/gr-qtgui/examples/pyqt_freq_c.py
index c53feb93d4..954a078df8 100755
--- a/gr-qtgui/examples/pyqt_freq_c.py
+++ b/gr-qtgui/examples/pyqt_freq_c.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2012,2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -26,10 +26,10 @@ import sys
 
 try:
     from gnuradio import qtgui
-    from PyQt4 import QtGui, QtCore
+    from PyQt5 import QtWidgets, Qt
     import sip
 except ImportError:
-    sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+    sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
     sys.exit(1)
 
 try:
@@ -44,71 +44,66 @@ except ImportError:
     sys.stderr.write("Error: Program requires gr-channels.\n")
     sys.exit(1)
 
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
     def __init__(self, display, control):
-        QtGui.QWidget.__init__(self, None)
+        QtWidgets.QWidget.__init__(self, None)
         self.setWindowTitle('PyQt Test GUI')
 
-        self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+        self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
         self.boxlayout.addWidget(display, 1)
         self.boxlayout.addWidget(control)
 
         self.resize(800, 500)
 
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
     def __init__(self, parent=None):
-        QtGui.QWidget.__init__(self, parent)
+        QtWidgets.QWidget.__init__(self, parent)
         self.setWindowTitle('Control Panel')
 
         self.setToolTip('Control the signals')
-        QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+        QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
 
-        self.layout = QtGui.QFormLayout(self)
+        self.layout = QtWidgets.QFormLayout(self)
 
         # Control the first signal
-        self.freq1Edit = QtGui.QLineEdit(self)
+        self.freq1Edit = QtWidgets.QLineEdit(self)
         self.freq1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
-        self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq1EditText)
+        self.freq1Edit.editingFinished.connect(self.freq1EditText)
 
-        self.amp1Edit = QtGui.QLineEdit(self)
+        self.amp1Edit = QtWidgets.QLineEdit(self)
         self.amp1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
-        self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp1EditText)
+        self.amp1Edit.editingFinished.connect(self.amp1EditText)
 
 
         # Control the second signal
-        self.freq2Edit = QtGui.QLineEdit(self)
+        self.freq2Edit = QtWidgets.QLineEdit(self)
         self.freq2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
-        self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq2EditText)
+        self.freq2Edit.editingFinished.connect(self.freq2EditText)
 
 
-        self.amp2Edit = QtGui.QLineEdit(self)
+        self.amp2Edit = QtWidgets.QLineEdit(self)
         self.amp2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
-        self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp2EditText)
+        self.amp2Edit.editingFinished.connect(self.amp2EditText)
 
-        self.quit = QtGui.QPushButton('Close', self)
+        self.quit = QtWidgets.QPushButton('Close', self)
         self.quit.setMinimumWidth(100)
         self.layout.addWidget(self.quit)
 
-        self.connect(self.quit, QtCore.SIGNAL('clicked()'),
-                     QtGui.qApp, QtCore.SLOT('quit()'))
+        self.quit.clicked.connect(QtWidgets.qApp.quit)
 
     def attach_signal1(self, signal):
         self.signal1 = signal
-        self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
-        self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+        self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+        self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
 
     def attach_signal2(self, signal):
         self.signal2 = signal
-        self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
-        self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+        self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+        self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
 
     def freq1EditText(self):
         try:
@@ -150,7 +145,7 @@ class my_top_block(gr.top_block):
 
         npts = 2048
 
-        self.qapp = QtGui.QApplication(sys.argv)
+        self.qapp = QtWidgets.QApplication(sys.argv)
         ss = open(gr.prefix() + '/share/gnuradio/themes/dark.qss')
         sstext = ss.read()
         ss.close()
@@ -179,8 +174,8 @@ class my_top_block(gr.top_block):
         pyQt  = self.snk1.pyqwidget()
 
         # Wrap the pointer as a PyQt SIP object
-        # This can now be manipulated as a PyQt4.QtGui.QWidget
-        pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+        # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+        pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
 
         #pyWin.show()
         self.main_box = dialog_box(pyWin, self.ctrl_win)
diff --git a/gr-qtgui/examples/pyqt_freq_f.py b/gr-qtgui/examples/pyqt_freq_f.py
index 668b54d249..d7d389b736 100755
--- a/gr-qtgui/examples/pyqt_freq_f.py
+++ b/gr-qtgui/examples/pyqt_freq_f.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2012,2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -26,10 +26,10 @@ import sys
 
 try:
     from gnuradio import qtgui
-    from PyQt4 import QtGui, QtCore
+    from PyQt5 import QtWidgets, Qt
     import sip
 except ImportError:
-    sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+    sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
     sys.exit(1)
 
 try:
@@ -39,71 +39,66 @@ except ImportError:
     sys.exit(1)
 
 
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
     def __init__(self, display, control):
-        QtGui.QWidget.__init__(self, None)
+        QtWidgets.QWidget.__init__(self, None)
         self.setWindowTitle('PyQt Test GUI')
 
-        self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+        self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
         self.boxlayout.addWidget(display, 1)
         self.boxlayout.addWidget(control)
 
         self.resize(800, 500)
 
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
     def __init__(self, parent=None):
-        QtGui.QWidget.__init__(self, parent)
+        QtWidgets.QWidget.__init__(self, parent)
         self.setWindowTitle('Control Panel')
 
         self.setToolTip('Control the signals')
-        QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+        QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
 
-        self.layout = QtGui.QFormLayout(self)
+        self.layout = QtWidgets.QFormLayout(self)
 
         # Control the first signal
-        self.freq1Edit = QtGui.QLineEdit(self)
+        self.freq1Edit = QtWidgets.QLineEdit(self)
         self.freq1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
-        self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq1EditText)
+        self.freq1Edit.editingFinished.connect(self.freq1EditText)
 
-        self.amp1Edit = QtGui.QLineEdit(self)
+        self.amp1Edit = QtWidgets.QLineEdit(self)
         self.amp1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
-        self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp1EditText)
+        self.amp1Edit.editingFinished.connect(self.amp1EditText)
 
 
         # Control the second signal
-        self.freq2Edit = QtGui.QLineEdit(self)
+        self.freq2Edit = QtWidgets.QLineEdit(self)
         self.freq2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
-        self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq2EditText)
+        self.freq2Edit.editingFinished.connect(self.freq2EditText)
 
 
-        self.amp2Edit = QtGui.QLineEdit(self)
+        self.amp2Edit = QtWidgets.QLineEdit(self)
         self.amp2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
-        self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp2EditText)
+        self.amp2Edit.editingFinished.connect(self.amp2EditText)
 
-        self.quit = QtGui.QPushButton('Close', self)
+        self.quit = QtWidgets.QPushButton('Close', self)
         self.quit.setMinimumWidth(100)
         self.layout.addWidget(self.quit)
 
-        self.connect(self.quit, QtCore.SIGNAL('clicked()'),
-                     QtGui.qApp, QtCore.SLOT('quit()'))
+        self.quit.clicked.connect(QtWidgets.qApp.quit)
 
     def attach_signal1(self, signal):
         self.signal1 = signal
-        self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
-        self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+        self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+        self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
 
     def attach_signal2(self, signal):
         self.signal2 = signal
-        self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
-        self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+        self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+        self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
 
     def freq1EditText(self):
         try:
@@ -145,7 +140,7 @@ class my_top_block(gr.top_block):
 
         npts = 2048
 
-        self.qapp = QtGui.QApplication(sys.argv)
+        self.qapp = QtWidgets.QApplication(sys.argv)
 
         src1 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0)
         src2 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0)
@@ -169,8 +164,8 @@ class my_top_block(gr.top_block):
         pyQt  = self.snk1.pyqwidget()
 
         # Wrap the pointer as a PyQt SIP object
-        # This can now be manipulated as a PyQt4.QtGui.QWidget
-        pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+        # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+        pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
 
         #pyWin.show()
         self.main_box = dialog_box(pyWin, self.ctrl_win)
@@ -181,4 +176,3 @@ if __name__ == "__main__":
     tb.start()
     tb.qapp.exec_()
     tb.stop()
-
diff --git a/gr-qtgui/examples/pyqt_histogram_f.py b/gr-qtgui/examples/pyqt_histogram_f.py
index a960275f41..81f7b9d40b 100755
--- a/gr-qtgui/examples/pyqt_histogram_f.py
+++ b/gr-qtgui/examples/pyqt_histogram_f.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# Copyright 2013 Free Software Foundation, Inc.
+# Copyright 2013,2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -26,10 +26,10 @@ import sys
 
 try:
     from gnuradio import qtgui
-    from PyQt4 import QtGui, QtCore
+    from PyQt5 import QtWidgets, Qt
     import sip
 except ImportError:
-    sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+    sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
     sys.exit(1)
 
 try:
@@ -38,87 +38,80 @@ except ImportError:
     sys.stderr.write("Error: Program requires gr-analog.\n")
     sys.exit(1)
 
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
     def __init__(self, display, control):
-        QtGui.QWidget.__init__(self, None)
+        QtWidgets.QWidget.__init__(self, None)
         self.setWindowTitle('PyQt Test GUI')
 
-        self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+        self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
         self.boxlayout.addWidget(display, 1)
         self.boxlayout.addWidget(control)
 
         self.resize(800, 500)
 
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
     def __init__(self, snk, parent=None):
-        QtGui.QWidget.__init__(self, parent)
+        QtWidgets.QWidget.__init__(self, parent)
         self.setWindowTitle('Control Panel')
         self.snk = snk
 
         self.setToolTip('Control the signals')
-        QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+        QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
 
-        self.layout = QtGui.QFormLayout(self)
+        self.layout = QtWidgets.QFormLayout(self)
 
         # Control the first signal
-        self.freq1Edit = QtGui.QLineEdit(self)
+        self.freq1Edit = QtWidgets.QLineEdit(self)
         self.freq1Edit.setMinimumWidth(100)
         self.layout.addRow("Sine Frequency:", self.freq1Edit)
-        self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq1EditText)
+        self.freq1Edit.editingFinished.connect(self.freq1EditText)
 
-        self.amp1Edit = QtGui.QLineEdit(self)
+        self.amp1Edit = QtWidgets.QLineEdit(self)
         self.amp1Edit.setMinimumWidth(100)
         self.layout.addRow("Sine Amplitude:", self.amp1Edit)
-        self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp1EditText)
+        self.amp1Edit.editingFinished.connect(self.amp1EditText)
 
 
         # Control the second signal
-        self.amp2Edit = QtGui.QLineEdit(self)
+        self.amp2Edit = QtWidgets.QLineEdit(self)
         self.amp2Edit.setMinimumWidth(100)
         self.layout.addRow("Noise Amplitude:", self.amp2Edit)
-        self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp2EditText)
+        self.amp2Edit.editingFinished.connect(self.amp2EditText)
 
         # Control the histogram
-        self.hist_npts = QtGui.QLineEdit(self)
+        self.hist_npts = QtWidgets.QLineEdit(self)
         self.hist_npts.setMinimumWidth(100)
-        self.hist_npts.setValidator(QtGui.QIntValidator(0, 8191))
+        self.hist_npts.setValidator(Qt.QIntValidator(0, 8191))
         self.hist_npts.setText("{0}".format(self.snk.nsamps()))
         self.layout.addRow("Number of Points:", self.hist_npts)
-        self.connect(self.hist_npts, QtCore.SIGNAL("editingFinished()"),
-                     self.set_nsamps)
+        self.hist_npts.editingFinished.connect(self.set_nsamps)
 
-        self.hist_bins = QtGui.QLineEdit(self)
+        self.hist_bins = QtWidgets.QLineEdit(self)
         self.hist_bins.setMinimumWidth(100)
-        self.hist_bins.setValidator(QtGui.QIntValidator(0, 1000))
+        self.hist_bins.setValidator(Qt.QIntValidator(0, 1000))
         self.hist_bins.setText("{0}".format(self.snk.bins()))
         self.layout.addRow("Number of Bins:", self.hist_bins)
-        self.connect(self.hist_bins, QtCore.SIGNAL("editingFinished()"),
-                     self.set_bins)
+        self.hist_bins.editingFinished.connect(self.set_bins)
 
-        self.hist_auto = QtGui.QPushButton("scale", self)
+        self.hist_auto = QtWidgets.QPushButton("scale", self)
         self.layout.addRow("Autoscale X:", self.hist_auto)
-        self.connect(self.hist_auto, QtCore.SIGNAL("pressed()"),
-                     self.autoscalex)
+        self.hist_auto.pressed.connect(self.autoscalex)
 
-        self.quit = QtGui.QPushButton('Close', self)
+        self.quit = QtWidgets.QPushButton('Close', self)
         self.quit.setMinimumWidth(100)
         self.layout.addWidget(self.quit)
 
-        self.connect(self.quit, QtCore.SIGNAL('clicked()'),
-                     QtGui.qApp, QtCore.SLOT('quit()'))
+        self.quit.clicked.connect(QtWidgets.qApp.quit)
 
 
     def attach_signal1(self, signal):
         self.signal1 = signal
-        self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
-        self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+        self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+        self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
 
     def attach_signal2(self, signal):
         self.signal2 = signal
-        self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+        self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
 
     def freq1EditText(self):
         try:
@@ -164,7 +157,7 @@ class my_top_block(gr.top_block):
 
         npts = 2048
 
-        self.qapp = QtGui.QApplication(sys.argv)
+        self.qapp = QtWidgets.QApplication(sys.argv)
 
         src1 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f1, 0, 0)
         src2 = analog.noise_source_f(analog.GR_GAUSSIAN, 1)
@@ -172,6 +165,7 @@ class my_top_block(gr.top_block):
         thr = blocks.throttle(gr.sizeof_float, 100*npts)
         self.snk1 = qtgui.histogram_sink_f(npts, 200, -5, 5,
                                            "Histogram")
+        self.snk1.disable_legend()
 
         self.connect(src1, (src,0))
         self.connect(src2, (src,1))
@@ -185,8 +179,8 @@ class my_top_block(gr.top_block):
         pyQt  = self.snk1.pyqwidget()
 
         # Wrap the pointer as a PyQt SIP object
-        # This can now be manipulated as a PyQt4.QtGui.QWidget
-        pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+        # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+        pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
 
         #pyWin.show()
         self.main_box = dialog_box(pyWin, self.ctrl_win)
@@ -197,4 +191,3 @@ if __name__ == "__main__":
     tb.start()
     tb.qapp.exec_()
     tb.stop()
-
diff --git a/gr-qtgui/examples/pyqt_time_c.py b/gr-qtgui/examples/pyqt_time_c.py
index 0162bb6ffc..b595c8ff85 100755
--- a/gr-qtgui/examples/pyqt_time_c.py
+++ b/gr-qtgui/examples/pyqt_time_c.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# Copyright 2011,2012 Free Software Foundation, Inc.
+# Copyright 2011,2012,2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -26,10 +26,10 @@ import sys
 
 try:
     from gnuradio import qtgui
-    from PyQt4 import QtGui, QtCore
+    from PyQt5 import QtWidgets, Qt
     import sip
 except ImportError:
-    sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+    sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
     sys.exit(1)
 
 try:
@@ -44,71 +44,66 @@ except ImportError:
     sys.stderr.write("Error: Program requires gr-channels.\n")
     sys.exit(1)
 
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
     def __init__(self, display, control):
-        QtGui.QWidget.__init__(self, None)
+        QtWidgets.QWidget.__init__(self, None)
         self.setWindowTitle('PyQt Test GUI')
 
-        self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+        self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
         self.boxlayout.addWidget(display, 1)
         self.boxlayout.addWidget(control)
 
         self.resize(800, 500)
 
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
     def __init__(self, parent=None):
-        QtGui.QWidget.__init__(self, parent)
+        QtWidgets.QWidget.__init__(self, parent)
         self.setWindowTitle('Control Panel')
 
         self.setToolTip('Control the signals')
-        QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+        QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
 
-        self.layout = QtGui.QFormLayout(self)
+        self.layout = QtWidgets.QFormLayout(self)
 
         # Control the first signal
-        self.freq1Edit = QtGui.QLineEdit(self)
+        self.freq1Edit = QtWidgets.QLineEdit(self)
         self.freq1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
-        self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq1EditText)
+        self.freq1Edit.editingFinished.connect(self.freq1EditText)
 
-        self.amp1Edit = QtGui.QLineEdit(self)
+        self.amp1Edit = QtWidgets.QLineEdit(self)
         self.amp1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
-        self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp1EditText)
+        self.amp1Edit.editingFinished.connect(self.amp1EditText)
 
 
         # Control the second signal
-        self.freq2Edit = QtGui.QLineEdit(self)
+        self.freq2Edit = QtWidgets.QLineEdit(self)
         self.freq2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
-        self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq2EditText)
+        self.freq2Edit.editingFinished.connect(self.freq2EditText)
 
 
-        self.amp2Edit = QtGui.QLineEdit(self)
+        self.amp2Edit = QtWidgets.QLineEdit(self)
         self.amp2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
-        self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp2EditText)
+        self.amp2Edit.editingFinished.connect(self.amp2EditText)
 
-        self.quit = QtGui.QPushButton('Close', self)
+        self.quit = QtWidgets.QPushButton('Close', self)
         self.quit.setMinimumWidth(100)
         self.layout.addWidget(self.quit)
 
-        self.connect(self.quit, QtCore.SIGNAL('clicked()'),
-                     QtGui.qApp, QtCore.SLOT('quit()'))
+        self.quit.clicked.connect(QtWidgets.qApp.quit)
 
     def attach_signal1(self, signal):
         self.signal1 = signal
-        self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
-        self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+        self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+        self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
 
     def attach_signal2(self, signal):
         self.signal2 = signal
-        self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
-        self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+        self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+        self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
 
     def freq1EditText(self):
         try:
@@ -150,7 +145,7 @@ class my_top_block(gr.top_block):
 
         npts = 2048
 
-        self.qapp = QtGui.QApplication(sys.argv)
+        self.qapp = QtWidgets.QApplication(sys.argv)
         ss = open(gr.prefix() + '/share/gnuradio/themes/dark.qss')
         sstext = ss.read()
         ss.close()
@@ -178,13 +173,14 @@ class my_top_block(gr.top_block):
         pyQt  = self.snk1.pyqwidget()
 
         # Wrap the pointer as a PyQt SIP object
-        # This can now be manipulated as a PyQt4.QtGui.QWidget
-        pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+        # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+        pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
 
         # Example of using signal/slot to set the title of a curve
-        pyWin.connect(pyWin, QtCore.SIGNAL("setLineLabel(int, QString)"),
-                      pyWin, QtCore.SLOT("setLineLabel(int, QString)"))
-        pyWin.emit(QtCore.SIGNAL("setLineLabel(int, QString)"), 0, "Re{sum}")
+        # FIXME: update for Qt5
+        #pyWin.setLineLabel.connect(pyWin.setLineLabel)
+        #pyWin.emit(QtCore.SIGNAL("setLineLabel(int, QString)"), 0, "Re{sum}")
+        self.snk1.set_line_label(0, "Re{Sum}")
         self.snk1.set_line_label(1, "Im{Sum}")
         #self.snk1.set_line_label(2, "Re{src1}")
         #self.snk1.set_line_label(3, "Im{src1}")
diff --git a/gr-qtgui/examples/pyqt_time_f.py b/gr-qtgui/examples/pyqt_time_f.py
index b733a5a809..3689ebff54 100755
--- a/gr-qtgui/examples/pyqt_time_f.py
+++ b/gr-qtgui/examples/pyqt_time_f.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# Copyright 2011,2012 Free Software Foundation, Inc.
+# Copyright 2011,2012,2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -26,10 +26,10 @@ import sys
 
 try:
     from gnuradio import qtgui
-    from PyQt4 import QtGui, QtCore
+    from PyQt5 import QtWidgets, Qt
     import sip
 except ImportError:
-    sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+    sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
     sys.exit(1)
 
 try:
@@ -38,71 +38,66 @@ except ImportError:
     sys.stderr.write("Error: Program requires gr-analog.\n")
     sys.exit(1)
 
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
     def __init__(self, display, control):
-        QtGui.QWidget.__init__(self, None)
+        QtWidgets.QWidget.__init__(self, None)
         self.setWindowTitle('PyQt Test GUI')
 
-        self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+        self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
         self.boxlayout.addWidget(display, 1)
         self.boxlayout.addWidget(control)
 
         self.resize(800, 500)
 
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
     def __init__(self, parent=None):
-        QtGui.QWidget.__init__(self, parent)
+        QtWidgets.QWidget.__init__(self, parent)
         self.setWindowTitle('Control Panel')
 
         self.setToolTip('Control the signals')
-        QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+        QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
 
-        self.layout = QtGui.QFormLayout(self)
+        self.layout = QtWidgets.QFormLayout(self)
 
         # Control the first signal
-        self.freq1Edit = QtGui.QLineEdit(self)
+        self.freq1Edit = QtWidgets.QLineEdit(self)
         self.freq1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
-        self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq1EditText)
+        self.freq1Edit.editingFinished.connect(self.freq1EditText)
 
-        self.amp1Edit = QtGui.QLineEdit(self)
+        self.amp1Edit = QtWidgets.QLineEdit(self)
         self.amp1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
-        self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp1EditText)
+        self.amp1Edit.editingFinished.connect(self.amp1EditText)
 
 
         # Control the second signal
-        self.freq2Edit = QtGui.QLineEdit(self)
+        self.freq2Edit = QtWidgets.QLineEdit(self)
         self.freq2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
-        self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq2EditText)
+        self.freq2Edit.editingFinished.connect(self.freq2EditText)
 
 
-        self.amp2Edit = QtGui.QLineEdit(self)
+        self.amp2Edit = QtWidgets.QLineEdit(self)
         self.amp2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
-        self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp2EditText)
+        self.amp2Edit.editingFinished.connect(self.amp2EditText)
 
-        self.quit = QtGui.QPushButton('Close', self)
+        self.quit = QtWidgets.QPushButton('Close', self)
         self.quit.setMinimumWidth(100)
         self.layout.addWidget(self.quit)
 
-        self.connect(self.quit, QtCore.SIGNAL('clicked()'),
-                     QtGui.qApp, QtCore.SLOT('quit()'))
+        self.quit.clicked.connect(QtWidgets.qApp.quit)
 
     def attach_signal1(self, signal):
         self.signal1 = signal
-        self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
-        self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+        self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+        self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
 
     def attach_signal2(self, signal):
         self.signal2 = signal
-        self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
-        self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+        self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+        self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
 
     def freq1EditText(self):
         try:
@@ -144,7 +139,7 @@ class my_top_block(gr.top_block):
 
         npts = 2048
 
-        self.qapp = QtGui.QApplication(sys.argv)
+        self.qapp = QtWidgets.QApplication(sys.argv)
 
         src1 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0)
         src2 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0)
@@ -171,13 +166,14 @@ class my_top_block(gr.top_block):
         pyQt  = self.snk1.pyqwidget()
 
         # Wrap the pointer as a PyQt SIP object
-        # This can now be manipulated as a PyQt4.QtGui.QWidget
-        pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+        # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+        pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
 
         # Example of using signal/slot to set the title of a curve
-        pyWin.connect(pyWin, QtCore.SIGNAL("setLineLabel(int, QString)"),
-                      pyWin, QtCore.SLOT("setLineLabel(int, QString)"))
-        pyWin.emit(QtCore.SIGNAL("setLineLabel(int, QString)"), 0, "sum")
+        # FIXME: update for Qt5
+        #pyWin.setLineLabel.connect(pyWin.setLineLabel)
+        #pyWin.emit(QtCore.SIGNAL("setLineLabel(int, QString)"), 0, "Re{sum}")
+        self.snk1.set_line_label(0, "Re{sum}")
         self.snk1.set_line_label(1, "src1")
         self.snk1.set_line_label(2, "src2")
 
@@ -193,4 +189,3 @@ if __name__ == "__main__":
     tb.start()
     tb.qapp.exec_()
     tb.stop()
-
diff --git a/gr-qtgui/examples/pyqt_time_raster_b.py b/gr-qtgui/examples/pyqt_time_raster_b.py
index 4cad9de601..7a94400283 100755
--- a/gr-qtgui/examples/pyqt_time_raster_b.py
+++ b/gr-qtgui/examples/pyqt_time_raster_b.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# Copyright 2012,2013 Free Software Foundation, Inc.
+# Copyright 2012,2013,2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -27,18 +27,18 @@ import sys
 
 try:
     from gnuradio import qtgui
-    from PyQt4 import QtGui, QtCore
+    from PyQt5 import QtWidgets, Qt
     import sip
 except ImportError:
-    print "Error: Program requires PyQt4 and gr-qtgui."
+    print "Error: Program requires PyQt5 and gr-qtgui."
     sys.exit(1)
 
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
     def __init__(self, display):
-        QtGui.QWidget.__init__(self, None)
+        QtWidgets.QWidget.__init__(self, None)
         self.setWindowTitle('PyQt Test GUI')
 
-        self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+        self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
         self.boxlayout.addWidget(display, 1)
 
         self.resize(800, 500)
@@ -47,7 +47,7 @@ class my_top_block(gr.top_block):
     def __init__(self):
         gr.top_block.__init__(self)
 
-        self.qapp = QtGui.QApplication(sys.argv)
+        self.qapp = QtWidgets.QApplication(sys.argv)
 
         data0  = 10*[0,] + 40*[1,0] + 10*[0,]
         data0 += 10*[0,] + 40*[0,1] + 10*[0,]
@@ -73,8 +73,8 @@ class my_top_block(gr.top_block):
         pyQt = self.snk1.pyqwidget()
 
         # Wrap the pointer as a PyQt SIP object
-        # This can now be manipulated as a PyQt4.QtGui.QWidget
-        pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+        # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+        pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
 
         self.main_box = dialog_box(pyWin)
         self.main_box.show()
@@ -84,4 +84,3 @@ if __name__ == "__main__":
     tb.start()
     tb.qapp.exec_()
     tb.stop()
-
diff --git a/gr-qtgui/examples/pyqt_time_raster_f.py b/gr-qtgui/examples/pyqt_time_raster_f.py
index c5261520db..0f9de94bcb 100755
--- a/gr-qtgui/examples/pyqt_time_raster_f.py
+++ b/gr-qtgui/examples/pyqt_time_raster_f.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# Copyright 2012,2013 Free Software Foundation, Inc.
+# Copyright 2012,2013,2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -26,18 +26,18 @@ import sys
 
 try:
     from gnuradio import qtgui
-    from PyQt4 import QtGui, QtCore
+    from PyQt5 import QtWidgets, Qt
     import sip
 except ImportError:
-    print "Error: Program requires PyQt4 and gr-qtgui."
+    print "Error: Program requires PyQt5 and gr-qtgui."
     sys.exit(1)
 
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
     def __init__(self, display):
-        QtGui.QWidget.__init__(self, None)
+        QtWidgets.QWidget.__init__(self, None)
         self.setWindowTitle('PyQt Test GUI')
 
-        self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+        self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
         self.boxlayout.addWidget(display, 1)
 
         self.resize(800, 500)
@@ -46,7 +46,7 @@ class my_top_block(gr.top_block):
     def __init__(self):
         gr.top_block.__init__(self)
 
-        self.qapp = QtGui.QApplication(sys.argv)
+        self.qapp = QtWidgets.QApplication(sys.argv)
 
         data0  = 10*[0,] + 40*[1,0] + 10*[0,]
         data0 += 10*[0,] + 40*[0,1] + 10*[0,]
@@ -72,8 +72,8 @@ class my_top_block(gr.top_block):
         pyQt = self.snk1.pyqwidget()
 
         # Wrap the pointer as a PyQt SIP object
-        # This can now be manipulated as a PyQt4.QtGui.QWidget
-        pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+        # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+        pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
 
         self.main_box = dialog_box(pyWin)
         self.main_box.show()
@@ -83,4 +83,3 @@ if __name__ == "__main__":
     tb.start()
     tb.qapp.exec_()
     tb.stop()
-
diff --git a/gr-qtgui/examples/pyqt_waterfall_c.py b/gr-qtgui/examples/pyqt_waterfall_c.py
index b17ff56c2f..96402041e8 100755
--- a/gr-qtgui/examples/pyqt_waterfall_c.py
+++ b/gr-qtgui/examples/pyqt_waterfall_c.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2012,2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -26,7 +26,7 @@ import sys
 
 try:
     from gnuradio import qtgui
-    from PyQt4 import QtGui, QtCore
+    from PyQt5 import QtWidgets, Qt
     import sip
 except ImportError:
     sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
@@ -44,71 +44,66 @@ except ImportError:
     sys.stderr.write("Error: Program requires gr-channels.\n")
     sys.exit(1)
 
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
     def __init__(self, display, control):
-        QtGui.QWidget.__init__(self, None)
+        QtWidgets.QWidget.__init__(self, None)
         self.setWindowTitle('PyQt Test GUI')
 
-        self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+        self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
         self.boxlayout.addWidget(display, 1)
         self.boxlayout.addWidget(control)
 
         self.resize(800, 500)
 
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
     def __init__(self, parent=None):
-        QtGui.QWidget.__init__(self, parent)
+        QtWidgets.QWidget.__init__(self, parent)
         self.setWindowTitle('Control Panel')
 
         self.setToolTip('Control the signals')
-        QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+        QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
 
-        self.layout = QtGui.QFormLayout(self)
+        self.layout = QtWidgets.QFormLayout(self)
 
         # Control the first signal
-        self.freq1Edit = QtGui.QLineEdit(self)
+        self.freq1Edit = QtWidgets.QLineEdit(self)
         self.freq1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
-        self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq1EditText)
+        self.freq1Edit.editingFinished.connect(self.freq1EditText)
 
-        self.amp1Edit = QtGui.QLineEdit(self)
+        self.amp1Edit = QtWidgets.QLineEdit(self)
         self.amp1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
-        self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp1EditText)
+        self.amp1Edit.editingFinished.connect(self.amp1EditText)
 
 
         # Control the second signal
-        self.freq2Edit = QtGui.QLineEdit(self)
+        self.freq2Edit = QtWidgets.QLineEdit(self)
         self.freq2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
-        self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq2EditText)
+        self.freq2Edit.editingFinished.connect(self.freq2EditText)
 
 
-        self.amp2Edit = QtGui.QLineEdit(self)
+        self.amp2Edit = QtWidgets.QLineEdit(self)
         self.amp2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
-        self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp2EditText)
+        self.amp2Edit.editingFinished.connect(self.amp2EditText)
 
-        self.quit = QtGui.QPushButton('Close', self)
+        self.quit = QtWidgets.QPushButton('Close', self)
         self.quit.setMinimumWidth(100)
         self.layout.addWidget(self.quit)
 
-        self.connect(self.quit, QtCore.SIGNAL('clicked()'),
-                     QtGui.qApp, QtCore.SLOT('quit()'))
+        self.quit.clicked.connect(QtWidgets.qApp.quit)
 
     def attach_signal1(self, signal):
         self.signal1 = signal
-        self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
-        self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+        self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+        self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
 
     def attach_signal2(self, signal):
         self.signal2 = signal
-        self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
-        self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+        self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+        self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
 
     def freq1EditText(self):
         try:
@@ -152,7 +147,7 @@ class my_top_block(gr.top_block):
 
         taps = filter.firdes.complex_band_pass_2(1, Rs, 1500, 2500, 100, 60)
 
-        self.qapp = QtGui.QApplication(sys.argv)
+        self.qapp = QtWidgets.QApplication(sys.argv)
         ss = open(gr.prefix() + '/share/gnuradio/themes/dark.qss')
         sstext = ss.read()
         ss.close()
@@ -167,6 +162,8 @@ class my_top_block(gr.top_block):
         self.snk1 = qtgui.waterfall_sink_c(npts, filter.firdes.WIN_BLACKMAN_hARRIS,
                                            0, Rs,
                                            "Complex Waterfall Example", 2)
+        self.snk1.set_color_map(0, qtgui.INTENSITY_COLOR_MAP_TYPE_COOL)
+        self.snk1.set_color_map(1, qtgui.INTENSITY_COLOR_MAP_TYPE_COOL)
 
         self.connect(src1, (src,0))
         self.connect(src2, (src,1))
@@ -181,8 +178,8 @@ class my_top_block(gr.top_block):
         pyQt  = self.snk1.pyqwidget()
 
         # Wrap the pointer as a PyQt SIP object
-        # This can now be manipulated as a PyQt4.QtGui.QWidget
-        pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+        # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+        pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
 
         #pyWin.show()
         self.main_box = dialog_box(pyWin, self.ctrl_win)
diff --git a/gr-qtgui/examples/pyqt_waterfall_f.py b/gr-qtgui/examples/pyqt_waterfall_f.py
index f9680c28cf..71c72afad6 100755
--- a/gr-qtgui/examples/pyqt_waterfall_f.py
+++ b/gr-qtgui/examples/pyqt_waterfall_f.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 #
-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2012,2015 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -26,10 +26,10 @@ import sys
 
 try:
     from gnuradio import qtgui
-    from PyQt4 import QtGui, QtCore
+    from PyQt5 import QtWidgets, Qt
     import sip
 except ImportError:
-    sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n")
+    sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
     sys.exit(1)
 
 try:
@@ -38,71 +38,66 @@ except ImportError:
     sys.stderr.write("Error: Program requires gr-analog.\n")
     sys.exit(1)
 
-class dialog_box(QtGui.QWidget):
+class dialog_box(QtWidgets.QWidget):
     def __init__(self, display, control):
-        QtGui.QWidget.__init__(self, None)
+        QtWidgets.QWidget.__init__(self, None)
         self.setWindowTitle('PyQt Test GUI')
 
-        self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
+        self.boxlayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight, self)
         self.boxlayout.addWidget(display, 1)
         self.boxlayout.addWidget(control)
 
         self.resize(800, 500)
 
-class control_box(QtGui.QWidget):
+class control_box(QtWidgets.QWidget):
     def __init__(self, parent=None):
-        QtGui.QWidget.__init__(self, parent)
+        QtWidgets.QWidget.__init__(self, parent)
         self.setWindowTitle('Control Panel')
 
         self.setToolTip('Control the signals')
-        QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
+        QtWidgets.QToolTip.setFont(Qt.QFont('OldEnglish', 10))
 
-        self.layout = QtGui.QFormLayout(self)
+        self.layout = QtWidgets.QFormLayout(self)
 
         # Control the first signal
-        self.freq1Edit = QtGui.QLineEdit(self)
+        self.freq1Edit = QtWidgets.QLineEdit(self)
         self.freq1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
-        self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq1EditText)
+        self.freq1Edit.editingFinished.connect(self.freq1EditText)
 
-        self.amp1Edit = QtGui.QLineEdit(self)
+        self.amp1Edit = QtWidgets.QLineEdit(self)
         self.amp1Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
-        self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp1EditText)
+        self.amp1Edit.editingFinished.connect(self.amp1EditText)
 
 
         # Control the second signal
-        self.freq2Edit = QtGui.QLineEdit(self)
+        self.freq2Edit = QtWidgets.QLineEdit(self)
         self.freq2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
-        self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.freq2EditText)
+        self.freq2Edit.editingFinished.connect(self.freq2EditText)
 
 
-        self.amp2Edit = QtGui.QLineEdit(self)
+        self.amp2Edit = QtWidgets.QLineEdit(self)
         self.amp2Edit.setMinimumWidth(100)
         self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
-        self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
-                     self.amp2EditText)
+        self.amp2Edit.editingFinished.connect(self.amp2EditText)
 
-        self.quit = QtGui.QPushButton('Close', self)
+        self.quit = QtWidgets.QPushButton('Close', self)
         self.quit.setMinimumWidth(100)
         self.layout.addWidget(self.quit)
 
-        self.connect(self.quit, QtCore.SIGNAL('clicked()'),
-                     QtGui.qApp, QtCore.SLOT('quit()'))
+        self.quit.clicked.connect(QtWidgets.qApp.quit)
 
     def attach_signal1(self, signal):
         self.signal1 = signal
-        self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
-        self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
+        self.freq1Edit.setText(("{0}").format(self.signal1.frequency()))
+        self.amp1Edit.setText(("{0}").format(self.signal1.amplitude()))
 
     def attach_signal2(self, signal):
         self.signal2 = signal
-        self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
-        self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
+        self.freq2Edit.setText(("{0}").format(self.signal2.frequency()))
+        self.amp2Edit.setText(("{0}").format(self.signal2.amplitude()))
 
     def freq1EditText(self):
         try:
@@ -144,7 +139,7 @@ class my_top_block(gr.top_block):
 
         npts = 2048
 
-        self.qapp = QtGui.QApplication(sys.argv)
+        self.qapp = QtWidgets.QApplication(sys.argv)
 
         src1 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0)
         src2 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0)
@@ -153,6 +148,8 @@ class my_top_block(gr.top_block):
         self.snk1 = qtgui.waterfall_sink_f(npts, filter.firdes.WIN_BLACKMAN_hARRIS,
                                            0, Rs,
                                            "Real Waterfall Example", 2)
+        self.snk1.set_color_map(0, qtgui.INTENSITY_COLOR_MAP_TYPE_COOL)
+        self.snk1.set_color_map(1, qtgui.INTENSITY_COLOR_MAP_TYPE_COOL)
 
         self.connect(src1, (src,0))
         self.connect(src2, (src,1))
@@ -167,8 +164,8 @@ class my_top_block(gr.top_block):
         pyQt  = self.snk1.pyqwidget()
 
         # Wrap the pointer as a PyQt SIP object
-        # This can now be manipulated as a PyQt4.QtGui.QWidget
-        pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
+        # This can now be manipulated as a PyQt5.QtWidgets.QWidget
+        pyWin = sip.wrapinstance(pyQt, QtWidgets.QWidget)
 
         #pyWin.show()
         self.main_box = dialog_box(pyWin, self.ctrl_win)
@@ -179,4 +176,3 @@ if __name__ == "__main__":
     tb.start()
     tb.qapp.exec_()
     tb.stop()
-
diff --git a/gr-qtgui/examples/qtgui_tags_viewing.grc b/gr-qtgui/examples/qtgui_tags_viewing.grc
index 4c6454537a..635b1e43fa 100644
--- a/gr-qtgui/examples/qtgui_tags_viewing.grc
+++ b/gr-qtgui/examples/qtgui_tags_viewing.grc
@@ -1,22 +1,23 @@
-<?xml version='1.0' encoding='ASCII'?>
+<?xml version='1.0' encoding='utf-8'?>
+<?grc format='1' created='3.8.git'?>
 <flow_graph>
   <timestamp>Wed Nov  6 11:52:40 2013</timestamp>
   <block>
     <key>options</key>
     <param>
-      <key>id</key>
-      <value>qtgui_tags_viewing</value>
+      <key>author</key>
+      <value></value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>window_size</key>
+      <value>1280, 1024</value>
     </param>
     <param>
-      <key>title</key>
-      <value></value>
+      <key>category</key>
+      <value>Custom</value>
     </param>
     <param>
-      <key>author</key>
+      <key>comment</key>
       <value></value>
     </param>
     <param>
@@ -24,241 +25,260 @@
       <value></value>
     </param>
     <param>
-      <key>window_size</key>
-      <value>1280, 1024</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>generate_options</key>
-      <value>qt_gui</value>
+      <key>_coordinate</key>
+      <value>(10, 10)</value>
     </param>
     <param>
-      <key>category</key>
-      <value>Custom</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
     <param>
-      <key>run_options</key>
-      <value>run</value>
+      <key>generate_options</key>
+      <value>qt_gui</value>
     </param>
     <param>
-      <key>run</key>
-      <value>True</value>
+      <key>id</key>
+      <value>qtgui_tags_viewing</value>
     </param>
     <param>
       <key>max_nouts</key>
       <value>0</value>
     </param>
     <param>
-      <key>realtime_scheduling</key>
+      <key>qt_qss_theme</key>
       <value></value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(10, 10)</value>
+      <key>realtime_scheduling</key>
+      <value></value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>run_command</key>
+      <value>{python} -u {filename}</value>
     </param>
-  </block>
-  <block>
-    <key>variable</key>
     <param>
-      <key>id</key>
-      <value>samp_rate</value>
+      <key>run_options</key>
+      <value>run</value>
     </param>
     <param>
-      <key>_enabled</key>
+      <key>run</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>32000</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(172, 10)</value>
+      <key>thread_safe_setters</key>
+      <value></value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>title</key>
+      <value></value>
     </param>
   </block>
   <block>
-    <key>import</key>
+    <key>variable_qtgui_range</key>
     <param>
-      <key>id</key>
-      <value>import_1</value>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>300</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>import</key>
-      <value>from gnuradio.digital.utils import tagged_streams</value>
+      <key>_coordinate</key>
+      <value>(814, 390)</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(99, 72)</value>
+      <key>gui_hint</key>
+      <value></value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>import</key>
     <param>
       <key>id</key>
-      <value>import_0</value>
+      <value>delay</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>label</key>
+      <value>Delay</value>
     </param>
     <param>
-      <key>import</key>
-      <value>import scipy</value>
+      <key>min_len</key>
+      <value>200</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(9, 71)</value>
+      <key>orient</key>
+      <value>Qt.Horizontal</value>
     </param>
     <param>
-      <key>_rotation</key>
+      <key>start</key>
       <value>0</value>
     </param>
+    <param>
+      <key>step</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>stop</key>
+      <value>1000</value>
+    </param>
+    <param>
+      <key>rangeType</key>
+      <value>float</value>
+    </param>
+    <param>
+      <key>widget</key>
+      <value>counter_slider</value>
+    </param>
   </block>
   <block>
-    <key>import</key>
+    <key>variable_qtgui_range</key>
     <param>
-      <key>id</key>
-      <value>import_2</value>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>30</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>import</key>
-      <value>import time</value>
+      <key>_coordinate</key>
+      <value>(936, 392)</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(253, 71)</value>
+      <key>gui_hint</key>
+      <value></value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_delay</key>
     <param>
       <key>id</key>
-      <value>blocks_delay_0</value>
+      <value>ntaps</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>label</key>
+      <value>Num Taps</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>min_len</key>
+      <value>200</value>
     </param>
     <param>
-      <key>delay</key>
-      <value>1000</value>
+      <key>orient</key>
+      <value>Qt.Horizontal</value>
     </param>
     <param>
-      <key>num_ports</key>
+      <key>start</key>
       <value>1</value>
     </param>
     <param>
-      <key>vlen</key>
+      <key>step</key>
       <value>1</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>stop</key>
+      <value>100</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(300, 240)</value>
+      <key>rangeType</key>
+      <value>float</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>widget</key>
+      <value>counter_slider</value>
     </param>
   </block>
   <block>
-    <key>blocks_tags_strobe</key>
+    <key>variable</key>
     <param>
-      <key>id</key>
-      <value>blocks_tags_strobe_0</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>_coordinate</key>
+      <value>(172, 10)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>samp_rate</value>
     </param>
     <param>
       <key>value</key>
-      <value>pmt.intern("TEST")</value>
+      <value>32000</value>
     </param>
+  </block>
+  <block>
+    <key>analog_fastnoise_source_x</key>
     <param>
-      <key>nsamps</key>
-      <value>10000</value>
+      <key>amp</key>
+      <value>0.004</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
       <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(16, 232)</value>
+      <value>(350, 39)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>analog_fastnoise_source_x</key>
     <param>
       <key>id</key>
       <value>analog_fastnoise_source_x_0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
       <key>noise_type</key>
       <value>analog.GR_GAUSSIAN</value>
     </param>
     <param>
-      <key>amp</key>
-      <value>0.004</value>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
       <key>seed</key>
@@ -268,85 +288,101 @@
       <key>samples</key>
       <value>8192</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_add_xx</key>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
     <param>
       <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(350, 39)</value>
+      <value>(482, 193)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_vector_source_x</key>
     <param>
       <key>id</key>
-      <value>blocks_vector_source_x_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <value>blocks_add_xx_0</value>
     </param>
     <param>
       <key>type</key>
       <value>complex</value>
     </param>
     <param>
-      <key>vector</key>
-      <value>[0.85+0.5j, 0.85, 0.85, 0.85+0.5j] + (10000-4)*[0,]</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>tags</key>
-      <value>tagged_streams.make_lengthtags((1024,), (0,), "testing tags 0")</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>repeat</key>
-      <value>True</value>
+      <key>num_inputs</key>
+      <value>2</value>
     </param>
     <param>
       <key>vlen</key>
       <value>1</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_add_xx</key>
     <param>
-      <key>affinity</key>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(13, 132)</value>
+      <value>(707, 176)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_add_xx</key>
     <param>
       <key>id</key>
-      <value>blocks_add_xx_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <value>blocks_add_xx_1</value>
     </param>
     <param>
       <key>type</key>
       <value>complex</value>
     </param>
     <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
       <key>num_inputs</key>
       <value>2</value>
     </param>
@@ -354,439 +390,1691 @@
       <key>vlen</key>
       <value>1</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_delay</key>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
     <param>
       <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>delay</key>
+      <value>1000</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(482, 193)</value>
+      <value>(300, 240)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_add_xx</key>
     <param>
       <key>id</key>
-      <value>blocks_add_xx_1</value>
+      <value>blocks_delay_0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>num_ports</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
       <key>vlen</key>
       <value>1</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_delay</key>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
     <param>
       <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>delay</key>
+      <value>int(delay)</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(707, 176)</value>
+      <value>(890, 44)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_throttle</key>
     <param>
       <key>id</key>
-      <value>blocks_throttle_0</value>
+      <value>blocks_delay_0_0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>samples_per_second</key>
-      <value>50e3</value>
+      <key>num_ports</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
       <key>vlen</key>
       <value>1</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_tags_strobe</key>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
     <param>
       <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(266, 149)</value>
+      <value>(16, 232)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>variable_qtgui_range</key>
     <param>
       <key>id</key>
-      <value>ntaps</value>
+      <value>blocks_tags_strobe_0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>key</key>
+      <value>pmt.intern("strobe")</value>
     </param>
     <param>
-      <key>label</key>
-      <value>Num Taps</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>value</key>
-      <value>30</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>start</key>
-      <value>1</value>
+      <key>nsamps</key>
+      <value>10000</value>
     </param>
     <param>
-      <key>stop</key>
-      <value>100</value>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>step</key>
-      <value>1</value>
+      <key>value</key>
+      <value>pmt.intern("TEST")</value>
     </param>
     <param>
-      <key>widget</key>
-      <value>counter_slider</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_throttle</key>
     <param>
-      <key>orient</key>
-      <value>Qt.Horizontal</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>min_len</key>
-      <value>200</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
-      <key>gui_hint</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(936, 392)</value>
+      <value>(266, 149)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>qtgui_time_sink_x</key>
     <param>
       <key>id</key>
-      <value>qtgui_time_sink_x_0_1_0</value>
+      <value>blocks_throttle_0</value>
     </param>
     <param>
-      <key>_enabled</key>
+      <key>ignoretag</key>
       <value>True</value>
     </param>
     <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>samples_per_second</key>
+      <value>50e3</value>
+    </param>
+    <param>
       <key>type</key>
       <value>complex</value>
     </param>
     <param>
-      <key>name</key>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_throttle</key>
+    <param>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>size</key>
-      <value>5100</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
-      <key>srate</key>
-      <value>samp_rate</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>ymin</key>
-      <value>-0.1</value>
+      <key>_enabled</key>
+      <value>False</value>
     </param>
     <param>
-      <key>ymax</key>
-      <value>1.5</value>
+      <key>_coordinate</key>
+      <value>(267, 414)</value>
     </param>
     <param>
-      <key>nconnections</key>
-      <value>1</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
     <param>
-      <key>update_time</key>
-      <value>0.001</value>
+      <key>id</key>
+      <value>blocks_throttle_0_0</value>
     </param>
     <param>
-      <key>tr_mode</key>
-      <value>qtgui.TRIG_MODE_TAG</value>
+      <key>ignoretag</key>
+      <value>True</value>
     </param>
     <param>
-      <key>tr_slope</key>
-      <value>qtgui.TRIG_SLOPE_POS</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>tr_level</key>
-      <value>.5</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>tr_delay</key>
-      <value>0.06</value>
+      <key>samples_per_second</key>
+      <value>samp_rate</value>
     </param>
     <param>
-      <key>tr_chan</key>
-      <value>0</value>
+      <key>type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>tr_tag</key>
-      <value>strobe</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_vector_source_x</key>
     <param>
-      <key>entags</key>
-      <value>True</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>gui_hint</key>
-      <value>1,1,1,1</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
       <key>affinity</key>
       <value></value>
     </param>
     <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(857, 173)</value>
+      <value>(13, 132)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>blocks_vector_source_x_0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>complex</value>
+    </param>
+    <param>
+      <key>repeat</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>tags</key>
+      <value>tagged_streams.make_lengthtags((1024,), (0,), "testing tags 0")</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>vector</key>
+      <value>[0.85+0.5j, 0.85, 0.85, 0.85+0.5j] + (10000-4)*[0,]</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_vector_source_x</key>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(15, 315)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>blocks_vector_source_x_0_0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>complex</value>
+    </param>
+    <param>
+      <key>repeat</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>tags</key>
+      <value>tagged_streams.make_lengthtags((128,), (1500,), "second stream")</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>vector</key>
+      <value>1500*[0,] + [0.25+0j,] + (10000-1500-1)*[0,]</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_vector_source_x</key>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(15, 489)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>blocks_vector_source_x_0_0_0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>float</value>
+    </param>
+    <param>
+      <key>repeat</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>tags</key>
+      <value>tagged_streams.make_lengthtags((128,), (110,), "second stream")</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>vector</key>
+      <value>10*[0,] + [0.5,] + (100-10-1)*[0,]</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_vector_source_x</key>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(15, 398)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>blocks_vector_source_x_0_1</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>float</value>
+    </param>
+    <param>
+      <key>repeat</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>tags</key>
+      <value>tagged_streams.make_lengthtags((1024,), (0,), "testing tags")</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>vector</key>
+      <value>[-0.85,] + (100-1)*[0,]</value>
+    </param>
+  </block>
+  <block>
+    <key>fir_filter_xxx</key>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>decim</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(660, 76)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>fir_filter_xxx_0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>samp_delay</key>
+      <value>int(ntaps)</value>
+    </param>
+    <param>
+      <key>taps</key>
+      <value>int(ntaps)*[1,]+[1,]</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>ccc</value>
+    </param>
+  </block>
+  <block>
+    <key>import</key>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(9, 71)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>import_0</value>
+    </param>
+    <param>
+      <key>import</key>
+      <value>import scipy</value>
+    </param>
+  </block>
+  <block>
+    <key>import</key>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(99, 72)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>import_1</value>
+    </param>
+    <param>
+      <key>import</key>
+      <value>from gnuradio.digital.utils import tagged_streams</value>
+    </param>
+  </block>
+  <block>
+    <key>import</key>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(253, 71)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>import_2</value>
+    </param>
+    <param>
+      <key>import</key>
+      <value>import time</value>
+    </param>
+  </block>
+  <block>
+    <key>qtgui_time_sink_x</key>
+    <param>
+      <key>autoscale</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>ctrlpanel</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>entags</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(860, 298)</value>
+    </param>
+    <param>
+      <key>gui_hint</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>grid</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>qtgui_time_sink_x_0</value>
+    </param>
+    <param>
+      <key>legend</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>alpha1</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color1</key>
+      <value>"blue"</value>
+    </param>
+    <param>
+      <key>label1</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker1</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style1</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width1</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha10</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color10</key>
+      <value>"blue"</value>
+    </param>
+    <param>
+      <key>label10</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker10</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style10</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width10</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha2</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color2</key>
+      <value>"red"</value>
+    </param>
+    <param>
+      <key>label2</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker2</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style2</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width2</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha3</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color3</key>
+      <value>"green"</value>
+    </param>
+    <param>
+      <key>label3</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker3</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style3</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width3</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha4</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color4</key>
+      <value>"black"</value>
+    </param>
+    <param>
+      <key>label4</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker4</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style4</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width4</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha5</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color5</key>
+      <value>"cyan"</value>
+    </param>
+    <param>
+      <key>label5</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker5</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style5</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width5</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha6</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color6</key>
+      <value>"magenta"</value>
+    </param>
+    <param>
+      <key>label6</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker6</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style6</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width6</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha7</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color7</key>
+      <value>"yellow"</value>
+    </param>
+    <param>
+      <key>label7</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker7</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style7</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width7</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha8</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color8</key>
+      <value>"dark red"</value>
+    </param>
+    <param>
+      <key>label8</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker8</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style8</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width8</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha9</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color9</key>
+      <value>"dark green"</value>
+    </param>
+    <param>
+      <key>label9</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker9</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style9</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width9</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>name</key>
+      <value></value>
+    </param>
+    <param>
+      <key>nconnections</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>size</key>
+      <value>18000</value>
+    </param>
+    <param>
+      <key>srate</key>
+      <value>samp_rate</value>
+    </param>
+    <param>
+      <key>tr_chan</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>tr_delay</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>tr_level</key>
+      <value>0.1</value>
+    </param>
+    <param>
+      <key>tr_mode</key>
+      <value>qtgui.TRIG_MODE_NORM</value>
+    </param>
+    <param>
+      <key>tr_slope</key>
+      <value>qtgui.TRIG_SLOPE_POS</value>
+    </param>
+    <param>
+      <key>tr_tag</key>
+      <value>""</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>complex</value>
+    </param>
+    <param>
+      <key>update_time</key>
+      <value>0.10</value>
+    </param>
+    <param>
+      <key>ylabel</key>
+      <value>Amplitude</value>
+    </param>
+    <param>
+      <key>yunit</key>
+      <value>""</value>
+    </param>
+    <param>
+      <key>ymax</key>
+      <value>1.5</value>
+    </param>
+    <param>
+      <key>ymin</key>
+      <value>-0.1</value>
+    </param>
+  </block>
+  <block>
+    <key>qtgui_time_sink_x</key>
+    <param>
+      <key>autoscale</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>ctrlpanel</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>entags</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(475, 444)</value>
+    </param>
+    <param>
+      <key>gui_hint</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>grid</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>qtgui_time_sink_x_0_0</value>
+    </param>
+    <param>
+      <key>legend</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>alpha1</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color1</key>
+      <value>"blue"</value>
+    </param>
+    <param>
+      <key>label1</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker1</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style1</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width1</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha10</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color10</key>
+      <value>"blue"</value>
+    </param>
+    <param>
+      <key>label10</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker10</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style10</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width10</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha2</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color2</key>
+      <value>"red"</value>
+    </param>
+    <param>
+      <key>label2</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker2</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style2</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width2</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha3</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color3</key>
+      <value>"green"</value>
+    </param>
+    <param>
+      <key>label3</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker3</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style3</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width3</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha4</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color4</key>
+      <value>"black"</value>
+    </param>
+    <param>
+      <key>label4</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker4</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style4</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width4</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha5</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color5</key>
+      <value>"cyan"</value>
+    </param>
+    <param>
+      <key>label5</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker5</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style5</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width5</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha6</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color6</key>
+      <value>"magenta"</value>
+    </param>
+    <param>
+      <key>label6</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker6</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style6</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width6</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha7</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color7</key>
+      <value>"yellow"</value>
+    </param>
+    <param>
+      <key>label7</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker7</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style7</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width7</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha8</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color8</key>
+      <value>"dark red"</value>
+    </param>
+    <param>
+      <key>label8</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker8</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style8</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width8</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha9</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color9</key>
+      <value>"dark green"</value>
+    </param>
+    <param>
+      <key>label9</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker9</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style9</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width9</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>name</key>
+      <value></value>
+    </param>
+    <param>
+      <key>nconnections</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>size</key>
+      <value>1024</value>
+    </param>
+    <param>
+      <key>srate</key>
+      <value>samp_rate</value>
+    </param>
+    <param>
+      <key>tr_chan</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>tr_delay</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>tr_level</key>
+      <value>0.0</value>
+    </param>
+    <param>
+      <key>tr_mode</key>
+      <value>qtgui.TRIG_MODE_TAG</value>
+    </param>
+    <param>
+      <key>tr_slope</key>
+      <value>qtgui.TRIG_SLOPE_POS</value>
+    </param>
+    <param>
+      <key>tr_tag</key>
+      <value>second stream</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>float</value>
+    </param>
+    <param>
+      <key>update_time</key>
+      <value>0.10</value>
+    </param>
+    <param>
+      <key>ylabel</key>
+      <value>Amplitude</value>
+    </param>
+    <param>
+      <key>yunit</key>
+      <value>""</value>
+    </param>
+    <param>
+      <key>ymax</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>ymin</key>
+      <value>-1</value>
+    </param>
+  </block>
+  <block>
+    <key>qtgui_time_sink_x</key>
+    <param>
+      <key>autoscale</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>ctrlpanel</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>entags</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(1072, 77)</value>
+    </param>
+    <param>
+      <key>gui_hint</key>
+      <value>1,0,1,1</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>grid</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>qtgui_time_sink_x_0_1</value>
+    </param>
+    <param>
+      <key>legend</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>alpha1</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color1</key>
+      <value>"blue"</value>
+    </param>
+    <param>
+      <key>label1</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker1</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style1</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width1</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha10</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color10</key>
+      <value>"blue"</value>
+    </param>
+    <param>
+      <key>label10</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker10</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style10</key>
+      <value>1</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>width10</key>
+      <value>1</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_vector_source_x</key>
     <param>
-      <key>id</key>
-      <value>blocks_vector_source_x_0_0</value>
+      <key>alpha2</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>color2</key>
+      <value>"red"</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>label2</key>
+      <value></value>
     </param>
     <param>
-      <key>vector</key>
-      <value>1500*[0,] + [0.25+0j,] + (10000-1500-1)*[0,]</value>
+      <key>marker2</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>tags</key>
-      <value>tagged_streams.make_lengthtags((128,), (1500,), "second stream")</value>
+      <key>style2</key>
+      <value>1</value>
     </param>
     <param>
-      <key>repeat</key>
-      <value>True</value>
+      <key>width2</key>
+      <value>1</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>alpha3</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>color3</key>
+      <value>"green"</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>label3</key>
+      <value></value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(15, 315)</value>
+      <key>marker3</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>style3</key>
+      <value>1</value>
     </param>
-  </block>
-  <block>
-    <key>qtgui_time_sink_x</key>
     <param>
-      <key>id</key>
-      <value>qtgui_time_sink_x_0</value>
+      <key>width3</key>
+      <value>1</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>alpha4</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>color4</key>
+      <value>"black"</value>
     </param>
     <param>
-      <key>name</key>
+      <key>label4</key>
       <value></value>
     </param>
     <param>
-      <key>size</key>
-      <value>18000</value>
+      <key>marker4</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>srate</key>
-      <value>samp_rate</value>
+      <key>style4</key>
+      <value>1</value>
     </param>
     <param>
-      <key>ymin</key>
-      <value>-0.1</value>
+      <key>width4</key>
+      <value>1</value>
     </param>
     <param>
-      <key>ymax</key>
-      <value>1.5</value>
+      <key>alpha5</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>nconnections</key>
-      <value>2</value>
+      <key>color5</key>
+      <value>"cyan"</value>
     </param>
     <param>
-      <key>update_time</key>
-      <value>0.10</value>
+      <key>label5</key>
+      <value></value>
     </param>
     <param>
-      <key>tr_mode</key>
-      <value>qtgui.TRIG_MODE_NORM</value>
+      <key>marker5</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>tr_slope</key>
-      <value>qtgui.TRIG_SLOPE_POS</value>
+      <key>style5</key>
+      <value>1</value>
     </param>
     <param>
-      <key>tr_level</key>
-      <value>0.1</value>
+      <key>width5</key>
+      <value>1</value>
     </param>
     <param>
-      <key>tr_delay</key>
-      <value>0</value>
+      <key>alpha6</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>tr_chan</key>
-      <value>0</value>
+      <key>color6</key>
+      <value>"magenta"</value>
     </param>
     <param>
-      <key>tr_tag</key>
-      <value>""</value>
+      <key>label6</key>
+      <value></value>
     </param>
     <param>
-      <key>entags</key>
-      <value>True</value>
+      <key>marker6</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>gui_hint</key>
-      <value></value>
+      <key>style6</key>
+      <value>1</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>width6</key>
+      <value>1</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(860, 298)</value>
+      <key>alpha7</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>color7</key>
+      <value>"yellow"</value>
     </param>
-  </block>
-  <block>
-    <key>fir_filter_xxx</key>
     <param>
-      <key>id</key>
-      <value>fir_filter_xxx_0</value>
+      <key>label7</key>
+      <value></value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>marker7</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>type</key>
-      <value>ccc</value>
+      <key>style7</key>
+      <value>1</value>
     </param>
     <param>
-      <key>decim</key>
+      <key>width7</key>
       <value>1</value>
     </param>
     <param>
-      <key>taps</key>
-      <value>int(ntaps)*[1,]+[1,]</value>
+      <key>alpha8</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>samp_delay</key>
-      <value>int(ntaps)</value>
+      <key>color8</key>
+      <value>"dark red"</value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>label8</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>marker8</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(660, 76)</value>
+      <key>style8</key>
+      <value>1</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>width8</key>
+      <value>1</value>
     </param>
-  </block>
-  <block>
-    <key>qtgui_time_sink_x</key>
     <param>
-      <key>id</key>
-      <value>qtgui_time_sink_x_0_1</value>
+      <key>alpha9</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>color9</key>
+      <value>"dark green"</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>label9</key>
+      <value></value>
+    </param>
+    <param>
+      <key>marker9</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style9</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width9</key>
+      <value>1</value>
     </param>
     <param>
       <key>name</key>
       <value></value>
     </param>
     <param>
+      <key>nconnections</key>
+      <value>2</value>
+    </param>
+    <param>
       <key>size</key>
       <value>1000</value>
     </param>
@@ -795,20 +2083,16 @@
       <value>samp_rate</value>
     </param>
     <param>
-      <key>ymin</key>
-      <value>-0.1</value>
-    </param>
-    <param>
-      <key>ymax</key>
-      <value>4.5</value>
+      <key>tr_chan</key>
+      <value>0</value>
     </param>
     <param>
-      <key>nconnections</key>
-      <value>2</value>
+      <key>tr_delay</key>
+      <value>0.015</value>
     </param>
     <param>
-      <key>update_time</key>
-      <value>0.10</value>
+      <key>tr_level</key>
+      <value>.1</value>
     </param>
     <param>
       <key>tr_mode</key>
@@ -819,379 +2103,394 @@
       <value>qtgui.TRIG_SLOPE_POS</value>
     </param>
     <param>
-      <key>tr_level</key>
-      <value>.1</value>
+      <key>tr_tag</key>
+      <value>""</value>
     </param>
     <param>
-      <key>tr_delay</key>
-      <value>0.015</value>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>tr_chan</key>
-      <value>0</value>
+      <key>update_time</key>
+      <value>0.10</value>
     </param>
     <param>
-      <key>tr_tag</key>
+      <key>ylabel</key>
+      <value>Amplitude</value>
+    </param>
+    <param>
+      <key>yunit</key>
       <value>""</value>
     </param>
     <param>
-      <key>entags</key>
-      <value>True</value>
+      <key>ymax</key>
+      <value>4.5</value>
     </param>
     <param>
-      <key>gui_hint</key>
-      <value>1,0,1,1</value>
+      <key>ymin</key>
+      <value>-0.1</value>
+    </param>
+  </block>
+  <block>
+    <key>qtgui_time_sink_x</key>
+    <param>
+      <key>autoscale</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>ctrlpanel</key>
+      <value>False</value>
     </param>
     <param>
       <key>affinity</key>
       <value></value>
     </param>
     <param>
+      <key>entags</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(1072, 77)</value>
+      <value>(857, 173)</value>
+    </param>
+    <param>
+      <key>gui_hint</key>
+      <value>1,1,1,1</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>qtgui_time_sink_x</key>
     <param>
-      <key>id</key>
-      <value>qtgui_time_sink_x_0_0</value>
+      <key>grid</key>
+      <value>False</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>False</value>
+      <key>id</key>
+      <value>qtgui_time_sink_x_0_1_0</value>
     </param>
     <param>
-      <key>type</key>
-      <value>float</value>
+      <key>legend</key>
+      <value>True</value>
     </param>
     <param>
-      <key>name</key>
-      <value></value>
+      <key>alpha1</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>size</key>
-      <value>1024</value>
+      <key>color1</key>
+      <value>"blue"</value>
     </param>
     <param>
-      <key>srate</key>
-      <value>samp_rate</value>
+      <key>label1</key>
+      <value></value>
     </param>
     <param>
-      <key>ymin</key>
+      <key>marker1</key>
       <value>-1</value>
     </param>
     <param>
-      <key>ymax</key>
+      <key>style1</key>
       <value>1</value>
     </param>
     <param>
-      <key>nconnections</key>
-      <value>2</value>
+      <key>width1</key>
+      <value>1</value>
     </param>
     <param>
-      <key>update_time</key>
-      <value>0.10</value>
+      <key>alpha10</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>tr_mode</key>
-      <value>qtgui.TRIG_MODE_TAG</value>
+      <key>color10</key>
+      <value>"blue"</value>
     </param>
     <param>
-      <key>tr_slope</key>
-      <value>qtgui.TRIG_SLOPE_POS</value>
+      <key>label10</key>
+      <value></value>
     </param>
     <param>
-      <key>tr_level</key>
-      <value>0.0</value>
+      <key>marker10</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style10</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>width10</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>alpha2</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color2</key>
+      <value>"red"</value>
+    </param>
+    <param>
+      <key>label2</key>
+      <value></value>
     </param>
     <param>
-      <key>tr_delay</key>
-      <value>0</value>
+      <key>marker2</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>tr_chan</key>
+      <key>style2</key>
       <value>1</value>
     </param>
     <param>
-      <key>tr_tag</key>
-      <value>second stream</value>
+      <key>width2</key>
+      <value>1</value>
     </param>
     <param>
-      <key>entags</key>
-      <value>True</value>
+      <key>alpha3</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>gui_hint</key>
-      <value></value>
+      <key>color3</key>
+      <value>"green"</value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>label3</key>
       <value></value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(475, 444)</value>
+      <key>marker3</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>style3</key>
+      <value>1</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_vector_source_x</key>
     <param>
-      <key>id</key>
-      <value>blocks_vector_source_x_0_0_0</value>
+      <key>width3</key>
+      <value>1</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>False</value>
+      <key>alpha4</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>type</key>
-      <value>float</value>
+      <key>color4</key>
+      <value>"black"</value>
     </param>
     <param>
-      <key>vector</key>
-      <value>10*[0,] + [0.5,] + (100-10-1)*[0,]</value>
+      <key>label4</key>
+      <value></value>
     </param>
     <param>
-      <key>tags</key>
-      <value>tagged_streams.make_lengthtags((128,), (110,), "second stream")</value>
+      <key>marker4</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>repeat</key>
-      <value>True</value>
+      <key>style4</key>
+      <value>1</value>
     </param>
     <param>
-      <key>vlen</key>
+      <key>width4</key>
       <value>1</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>alpha5</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>color5</key>
+      <value>"cyan"</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(15, 489)</value>
+      <key>label5</key>
+      <value></value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>marker5</key>
+      <value>-1</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_vector_source_x</key>
     <param>
-      <key>id</key>
-      <value>blocks_vector_source_x_0_1</value>
+      <key>style5</key>
+      <value>1</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>False</value>
+      <key>width5</key>
+      <value>1</value>
     </param>
     <param>
-      <key>type</key>
-      <value>float</value>
+      <key>alpha6</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>vector</key>
-      <value>[-0.85,] + (100-1)*[0,]</value>
+      <key>color6</key>
+      <value>"magenta"</value>
     </param>
     <param>
-      <key>tags</key>
-      <value>tagged_streams.make_lengthtags((1024,), (0,), "testing tags")</value>
+      <key>label6</key>
+      <value></value>
     </param>
     <param>
-      <key>repeat</key>
-      <value>True</value>
+      <key>marker6</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>vlen</key>
+      <key>style6</key>
       <value>1</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>width6</key>
+      <value>1</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>alpha7</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(15, 398)</value>
+      <key>color7</key>
+      <value>"yellow"</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>label7</key>
+      <value></value>
     </param>
-  </block>
-  <block>
-    <key>blocks_throttle</key>
     <param>
-      <key>id</key>
-      <value>blocks_throttle_0_0</value>
+      <key>marker7</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>False</value>
+      <key>style7</key>
+      <value>1</value>
     </param>
     <param>
-      <key>type</key>
-      <value>float</value>
+      <key>width7</key>
+      <value>1</value>
     </param>
     <param>
-      <key>samples_per_second</key>
-      <value>samp_rate</value>
+      <key>alpha8</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>color8</key>
+      <value>"dark red"</value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>label8</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>marker8</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(267, 414)</value>
+      <key>style8</key>
+      <value>1</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>width8</key>
+      <value>1</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_delay</key>
     <param>
-      <key>id</key>
-      <value>blocks_delay_0_0</value>
+      <key>alpha9</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>color9</key>
+      <value>"dark green"</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>label9</key>
+      <value></value>
     </param>
     <param>
-      <key>delay</key>
-      <value>int(delay)</value>
+      <key>marker9</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>num_ports</key>
+      <key>style9</key>
       <value>1</value>
     </param>
     <param>
-      <key>vlen</key>
+      <key>width9</key>
       <value>1</value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>name</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(890, 44)</value>
+      <key>nconnections</key>
+      <value>1</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>size</key>
+      <value>5100</value>
     </param>
-  </block>
-  <block>
-    <key>variable_qtgui_range</key>
     <param>
-      <key>id</key>
-      <value>delay</value>
+      <key>srate</key>
+      <value>samp_rate</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>tr_chan</key>
+      <value>0</value>
     </param>
     <param>
-      <key>label</key>
-      <value>Delay</value>
+      <key>tr_delay</key>
+      <value>0.06</value>
     </param>
     <param>
-      <key>value</key>
-      <value>300</value>
+      <key>tr_level</key>
+      <value>.5</value>
     </param>
     <param>
-      <key>start</key>
-      <value>0</value>
+      <key>tr_mode</key>
+      <value>qtgui.TRIG_MODE_TAG</value>
     </param>
     <param>
-      <key>stop</key>
-      <value>1000</value>
+      <key>tr_slope</key>
+      <value>qtgui.TRIG_SLOPE_POS</value>
     </param>
     <param>
-      <key>step</key>
-      <value>1</value>
+      <key>tr_tag</key>
+      <value>strobe</value>
     </param>
     <param>
-      <key>widget</key>
-      <value>counter_slider</value>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>orient</key>
-      <value>Qt.Horizontal</value>
+      <key>update_time</key>
+      <value>0.001</value>
     </param>
     <param>
-      <key>min_len</key>
-      <value>200</value>
+      <key>ylabel</key>
+      <value>Amplitude</value>
     </param>
     <param>
-      <key>gui_hint</key>
-      <value></value>
+      <key>yunit</key>
+      <value>""</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(814, 390)</value>
+      <key>ymax</key>
+      <value>1.5</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>ymin</key>
+      <value>-0.1</value>
     </param>
   </block>
   <connection>
-    <source_block_id>blocks_vector_source_x_0</source_block_id>
-    <sink_block_id>blocks_throttle_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_throttle_0</source_block_id>
-    <sink_block_id>blocks_add_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_delay_0</source_block_id>
-    <sink_block_id>blocks_add_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
     <source_block_id>analog_fastnoise_source_x_0</source_block_id>
     <sink_block_id>blocks_add_xx_1</sink_block_id>
     <source_key>0</source_key>
@@ -1210,28 +2509,28 @@
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>fir_filter_xxx_0</source_block_id>
-    <sink_block_id>blocks_delay_0_0</sink_block_id>
+    <source_block_id>blocks_add_xx_1</source_block_id>
+    <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_delay_0_0</source_block_id>
-    <sink_block_id>qtgui_time_sink_x_0_1</sink_block_id>
+    <source_block_id>blocks_add_xx_1</source_block_id>
+    <sink_block_id>qtgui_time_sink_x_0_1_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>fir_filter_xxx_0</source_block_id>
-    <sink_block_id>qtgui_time_sink_x_0_1</sink_block_id>
+    <source_block_id>blocks_delay_0</source_block_id>
+    <sink_block_id>blocks_add_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_vector_source_x_0_0</source_block_id>
-    <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
+    <source_block_id>blocks_delay_0_0</source_block_id>
+    <sink_block_id>qtgui_time_sink_x_0_1</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>1</sink_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
     <source_block_id>blocks_tags_strobe_0</source_block_id>
@@ -1240,28 +2539,34 @@
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>qtgui_time_sink_x_0_1_0</sink_block_id>
+    <source_block_id>blocks_throttle_0</source_block_id>
+    <sink_block_id>blocks_add_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
+    <source_block_id>blocks_throttle_0_0</source_block_id>
+    <sink_block_id>qtgui_time_sink_x_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_vector_source_x_0_0_0</source_block_id>
-    <sink_block_id>qtgui_time_sink_x_0_0</sink_block_id>
+    <source_block_id>blocks_vector_source_x_0</source_block_id>
+    <sink_block_id>blocks_throttle_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>blocks_vector_source_x_0_0</source_block_id>
+    <sink_block_id>qtgui_time_sink_x_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_throttle_0_0</source_block_id>
+    <source_block_id>blocks_vector_source_x_0_0_0</source_block_id>
     <sink_block_id>qtgui_time_sink_x_0_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>0</sink_key>
+    <sink_key>1</sink_key>
   </connection>
   <connection>
     <source_block_id>blocks_vector_source_x_0_1</source_block_id>
@@ -1269,4 +2574,16 @@
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
+  <connection>
+    <source_block_id>fir_filter_xxx_0</source_block_id>
+    <sink_block_id>blocks_delay_0_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>fir_filter_xxx_0</source_block_id>
+    <sink_block_id>qtgui_time_sink_x_0_1</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>1</sink_key>
+  </connection>
 </flow_graph>
diff --git a/gr-qtgui/grc/CMakeLists.txt b/gr-qtgui/grc/CMakeLists.txt
index d56158ac70..74e6958639 100644
--- a/gr-qtgui/grc/CMakeLists.txt
+++ b/gr-qtgui/grc/CMakeLists.txt
@@ -19,4 +19,29 @@
 
 ########################################################################
 file(GLOB xml_files "*.xml")
-install(FILES ${xml_files} DESTINATION ${GRC_BLOCKS_DIR} COMPONENT "qtgui_python")
+
+macro(REPLACE_IN_FILE _xml_block match replace)
+    set(xml_block_src "${CMAKE_CURRENT_SOURCE_DIR}/${_xml_block}")
+    set(xml_block     "${CMAKE_CURRENT_BINARY_DIR}/${_xml_block}")
+
+    list(REMOVE_ITEM xml_files "${xml_block_src}")
+    file(READ "${xml_block_src}" xml_block_src_text)
+    string(REPLACE "${match}" "${replace}"
+           xml_block_text "${xml_block_src_text}")
+    file(WRITE "${xml_block}" "${xml_block_text}")
+
+    list(APPEND generated_xml_files "${xml_block}")
+endmacro()
+
+
+if(DESIRED_QT_VERSION EQUAL 4)
+    foreach(xml_block_src ${xml_files})
+        get_filename_component(xml_block "${xml_block_src}" NAME)
+        REPLACE_IN_FILE("${xml_block}" "PyQt5" "PyQt4")
+    endforeach()
+endif()
+
+install(
+    FILES ${xml_files} ${generated_xml_files}
+    DESTINATION "${GRC_BLOCKS_DIR}"
+)
diff --git a/gr-qtgui/grc/qtgui_ber_sink_b.xml b/gr-qtgui/grc/qtgui_ber_sink_b.xml
index da3fc6ebf8..05a36dfbc0 100644
--- a/gr-qtgui/grc/qtgui_ber_sink_b.xml
+++ b/gr-qtgui/grc/qtgui_ber_sink_b.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Bercurve Sink</name>
   <key>qtgui_bercurve_sink</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <import>import numpy</import>
diff --git a/gr-qtgui/grc/qtgui_check_box.xml b/gr-qtgui/grc/qtgui_check_box.xml
index 67c8848a22..ccee59dd92 100644
--- a/gr-qtgui/grc/qtgui_check_box.xml
+++ b/gr-qtgui/grc/qtgui_check_box.xml
@@ -8,7 +8,7 @@
 <block>
 	<name>QT GUI Check Box</name>
 	<key>variable_qtgui_check_box</key>
-	<import>from PyQt4 import Qt</import>
+	<import>from PyQt5 import Qt</import>
 	<var_make>self.$(id) = $(id) = $value</var_make>
 	<make>#set $win = '_%s_check_box'%$id
 #if not $label()
diff --git a/gr-qtgui/grc/qtgui_chooser.xml b/gr-qtgui/grc/qtgui_chooser.xml
index f018354dd4..f79bb8ccb3 100644
--- a/gr-qtgui/grc/qtgui_chooser.xml
+++ b/gr-qtgui/grc/qtgui_chooser.xml
@@ -8,8 +8,8 @@
 <block>
 	<name>QT GUI Chooser</name>
 	<key>variable_qtgui_chooser</key>
-	<import>from PyQt4 import Qt</import>
-	<import>from PyQt4.QtCore import QObject, pyqtSlot</import>
+	<import>from PyQt5 import Qt</import>
+	<import>from PyQt5.QtCore import QObject, pyqtSlot</import>
 	<var_make>self.$(id) = $(id) = $value</var_make>
 	<make>#slurp
 #set $all_options = [$option0, $option1, $option2, $option3, $option4][:int($num_opts())]
diff --git a/gr-qtgui/grc/qtgui_const_sink_x.xml b/gr-qtgui/grc/qtgui_const_sink_x.xml
index 755f12f964..10f82cce82 100644
--- a/gr-qtgui/grc/qtgui_const_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_const_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Constellation Sink</name>
   <key>qtgui_const_sink_x</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_edit_box_msg.xml b/gr-qtgui/grc/qtgui_edit_box_msg.xml
index c7c758a612..d77a4b3e1b 100644
--- a/gr-qtgui/grc/qtgui_edit_box_msg.xml
+++ b/gr-qtgui/grc/qtgui_edit_box_msg.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Message Edit Box</name>
   <key>qtgui_edit_box_msg</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_entry.xml b/gr-qtgui/grc/qtgui_entry.xml
index cce2edb4b2..fc0f4089d1 100644
--- a/gr-qtgui/grc/qtgui_entry.xml
+++ b/gr-qtgui/grc/qtgui_entry.xml
@@ -8,7 +8,7 @@
 <block>
 	<name>QT GUI Entry</name>
 	<key>variable_qtgui_entry</key>
-	<import>from PyQt4 import Qt</import>
+	<import>from PyQt5 import Qt</import>
 	<import>from gnuradio import eng_notation</import>
 	<var_make>self.$(id) = $(id) = $value</var_make>
 	<make>#set $win = 'self._%s_tool_bar'%$id
diff --git a/gr-qtgui/grc/qtgui_freq_sink_x.xml b/gr-qtgui/grc/qtgui_freq_sink_x.xml
index 009a184327..ed39db7781 100644
--- a/gr-qtgui/grc/qtgui_freq_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_freq_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Frequency Sink</name>
   <key>qtgui_freq_sink_x</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
diff --git a/gr-qtgui/grc/qtgui_histogram_sink_x.xml b/gr-qtgui/grc/qtgui_histogram_sink_x.xml
index a789d2e4fa..9e3dcb104f 100644
--- a/gr-qtgui/grc/qtgui_histogram_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_histogram_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Histogram Sink</name>
   <key>qtgui_histogram_sink_x</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_label.xml b/gr-qtgui/grc/qtgui_label.xml
index d67f3d7500..946cee36ab 100644
--- a/gr-qtgui/grc/qtgui_label.xml
+++ b/gr-qtgui/grc/qtgui_label.xml
@@ -9,7 +9,7 @@
 <block>
   <name>QT GUI Label</name>
   <key>variable_qtgui_label</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import eng_notation</import>
   <var_make>self.$(id) = $(id) = $value</var_make>
   <make>#set $win = 'self._%s_tool_bar'%$id
diff --git a/gr-qtgui/grc/qtgui_number_sink.xml b/gr-qtgui/grc/qtgui_number_sink.xml
index d10b7325c0..06837493c3 100644
--- a/gr-qtgui/grc/qtgui_number_sink.xml
+++ b/gr-qtgui/grc/qtgui_number_sink.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Number Sink</name>
   <key>qtgui_number_sink</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_push_button.xml b/gr-qtgui/grc/qtgui_push_button.xml
index a535bb6473..49c2e9d6f0 100644
--- a/gr-qtgui/grc/qtgui_push_button.xml
+++ b/gr-qtgui/grc/qtgui_push_button.xml
@@ -8,7 +8,7 @@
 <block>
 	<name>QT GUI Push Button</name>
 	<key>variable_qtgui_push_button</key>
-	<import>from PyQt4 import Qt</import>
+	<import>from PyQt5 import Qt</import>
 	<var_make>self.$(id) = $(id) = $value</var_make>
 	<make>#set $win = '_%s_push_button'%$id
 #if not $label()
diff --git a/gr-qtgui/grc/qtgui_sink_x.xml b/gr-qtgui/grc/qtgui_sink_x.xml
index 7488ea59d8..a9bc469cd2 100644
--- a/gr-qtgui/grc/qtgui_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Sink</name>
   <key>qtgui_sink_x</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
diff --git a/gr-qtgui/grc/qtgui_tab_widget.xml b/gr-qtgui/grc/qtgui_tab_widget.xml
index 1bbadc8e51..805542cc8b 100644
--- a/gr-qtgui/grc/qtgui_tab_widget.xml
+++ b/gr-qtgui/grc/qtgui_tab_widget.xml
@@ -7,7 +7,7 @@
 <block>
 	<name>QT GUI Tab Widget</name>
 	<key>qtgui_tab_widget</key>
-	<import>from PyQt4 import Qt</import>
+	<import>from PyQt5 import Qt</import>
 	<make>#set $win = 'self.%s'%$id
 Qt.QTabWidget()
 #set $all_labels = [$label0, $label1, $label2, $label3, $label4,
diff --git a/gr-qtgui/grc/qtgui_time_raster_x.xml b/gr-qtgui/grc/qtgui_time_raster_x.xml
index 0359dc3b71..d458f67eb9 100644
--- a/gr-qtgui/grc/qtgui_time_raster_x.xml
+++ b/gr-qtgui/grc/qtgui_time_raster_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Time Raster Sink</name>
   <key>qtgui_time_raster_sink_x</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_time_sink_x.xml b/gr-qtgui/grc/qtgui_time_sink_x.xml
index 144cba60eb..d4347950ea 100644
--- a/gr-qtgui/grc/qtgui_time_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_time_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Time Sink</name>
   <key>qtgui_time_sink_x</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
diff --git a/gr-qtgui/grc/qtgui_vector_sink_f.xml b/gr-qtgui/grc/qtgui_vector_sink_f.xml
index 9f40d57729..0f456323bf 100644
--- a/gr-qtgui/grc/qtgui_vector_sink_f.xml
+++ b/gr-qtgui/grc/qtgui_vector_sink_f.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Vector Sink</name>
   <key>qtgui_vector_sink_f</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_waterfall_sink_x.xml b/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
index cdecd5cce1..a684492246 100644
--- a/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Waterfall Sink</name>
   <key>qtgui_waterfall_sink_x</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
diff --git a/gr-qtgui/include/gnuradio/qtgui/CMakeLists.txt b/gr-qtgui/include/gnuradio/qtgui/CMakeLists.txt
index 991c7583a8..92ffef9ee7 100644
--- a/gr-qtgui/include/gnuradio/qtgui/CMakeLists.txt
+++ b/gr-qtgui/include/gnuradio/qtgui/CMakeLists.txt
@@ -68,5 +68,4 @@ install(FILES
   VectorDisplayPlot.h
   vector_sink_f.h
   DESTINATION ${GR_INCLUDE_DIR}/gnuradio/qtgui
-  COMPONENT "qtgui_devel"
 )
diff --git a/gr-qtgui/include/gnuradio/qtgui/form_menus.h b/gr-qtgui/include/gnuradio/qtgui/form_menus.h
index 5c77f825d8..26c63c2d75 100644
--- a/gr-qtgui/include/gnuradio/qtgui/form_menus.h
+++ b/gr-qtgui/include/gnuradio/qtgui/form_menus.h
@@ -28,6 +28,11 @@
 #include <QtGui/QtGui>
 #include <QtGui/QIntValidator>
 #include <QtGui/QDoubleValidator>
+
+#if QT_VERSION >= 0x050000
+#include <QtWidgets/QtWidgets>
+#endif
+
 #include <qwt_symbol.h>
 #include <gnuradio/filter/firdes.h>
 #include <gnuradio/qtgui/qtgui_types.h>
diff --git a/gr-qtgui/lib/CMakeLists.txt b/gr-qtgui/lib/CMakeLists.txt
index b1ee580398..52d1770053 100644
--- a/gr-qtgui/lib/CMakeLists.txt
+++ b/gr-qtgui/lib/CMakeLists.txt
@@ -45,8 +45,14 @@ set(qtgui_moc_hdrs
     ${qtgui_mod_includedir}/VectorDisplayPlot.h
     edit_box_msg_impl.h
 )
-QT4_WRAP_CPP(qtgui_moc_sources ${qtgui_moc_hdrs})
-QT4_WRAP_UI(qtgui_ui_hdrs spectrumdisplayform.ui)
+
+if (${DESIRED_QT_VERSION} MATCHES 4)
+    QT4_WRAP_CPP(qtgui_moc_sources ${qtgui_moc_hdrs})
+    QT4_WRAP_UI(qtgui_ui_hdrs spectrumdisplayform.ui)
+else()
+    QT5_WRAP_CPP(qtgui_moc_sources ${qtgui_moc_hdrs})
+    QT5_WRAP_UI(qtgui_ui_hdrs spectrumdisplayform.ui)
+endif()
 
 #FIXME the sources expect <foo>.ui.h, but the macros generate ui_foo.h
 #avoid changing the sources by generating the header with the include
@@ -129,7 +135,6 @@ include_directories(
     ${QWT_INCLUDE_DIRS}
     ${QT_INCLUDE_DIRS}
     ${FFTW3F_INCLUDE_DIRS}
-    ${LOG4CPP_INCLUDE_DIRS}
     ${Boost_INCLUDE_DIRS}
     ${PYTHON_INCLUDE_DIRS}
 )
@@ -137,7 +142,6 @@ include_directories(
 link_directories(
     ${QWT_LIBRARY_DIRS}
     ${FFTW3F_LIBRARY_DIRS}
-    ${LOG4CPP_LIBRARY_DIRS}
     ${Boost_LIBRARY_DIRS}
 )
 
@@ -158,7 +162,6 @@ list(APPEND qtgui_libs
     ${QWT_LIBRARIES}
     ${QT_LIBRARIES}
     ${FFTW3F_LIBRARIES}
-    ${LOG4CPP_LIBRARIES}
 )
 if (WIN32)
   list(APPEND qtgui_libs
@@ -177,7 +180,7 @@ endif(ENABLE_PYTHON)
 add_definitions(-DQWT_DLL) #setup QWT library linkage
 add_library(gnuradio-qtgui SHARED ${qtgui_sources})
 target_link_libraries(gnuradio-qtgui ${qtgui_libs})
-GR_LIBRARY_FOO(gnuradio-qtgui RUNTIME_COMPONENT "qtgui_runtime" DEVEL_COMPONENT "qtgui_devel")
+GR_LIBRARY_FOO(gnuradio-qtgui)
 
 if(ENABLE_STATIC_LIBS)
   if(ENABLE_GR_CTRLPORT)
@@ -199,6 +202,6 @@ if(ENABLE_STATIC_LIBS)
   endif(NOT WIN32)
 
   install(TARGETS gnuradio-qtgui_static
-    ARCHIVE DESTINATION lib${LIB_SUFFIX} COMPONENT "qtgui_devel"   # .lib file
+    ARCHIVE DESTINATION lib${LIB_SUFFIX} # .lib file
     )
 endif(ENABLE_STATIC_LIBS)
diff --git a/gr-qtgui/lib/SpectrumGUIClass.cc b/gr-qtgui/lib/SpectrumGUIClass.cc
index cf7c728251..fe1973fc75 100644
--- a/gr-qtgui/lib/SpectrumGUIClass.cc
+++ b/gr-qtgui/lib/SpectrumGUIClass.cc
@@ -26,7 +26,6 @@
 #include <gnuradio/qtgui/SpectrumGUIClass.h>
 //Added by qt3to4:
 #include <QEvent>
-#include <QCustomEvent>
 #include <volk/volk.h>
 
 const long SpectrumGUIClass::MAX_FFT_SIZE = 32768;
diff --git a/gr-qtgui/lib/const_sink_c_impl.cc b/gr-qtgui/lib/const_sink_c_impl.cc
index 7d9a3941c8..3f3bbf4405 100644
--- a/gr-qtgui/lib/const_sink_c_impl.cc
+++ b/gr-qtgui/lib/const_sink_c_impl.cc
@@ -127,7 +127,7 @@ namespace gr {
 	d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
         std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
         QApplication::setGraphicsSystem(QString(style.c_str()));
 #endif
diff --git a/gr-qtgui/lib/edit_box_msg_impl.cc b/gr-qtgui/lib/edit_box_msg_impl.cc
index 084e2d4f34..0dee1fa18b 100644
--- a/gr-qtgui/lib/edit_box_msg_impl.cc
+++ b/gr-qtgui/lib/edit_box_msg_impl.cc
@@ -65,10 +65,6 @@ namespace gr {
 	d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
-        std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
-        QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
 	d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
diff --git a/gr-qtgui/lib/freq_sink_c_impl.cc b/gr-qtgui/lib/freq_sink_c_impl.cc
index ffa4e3017c..c697e8c269 100644
--- a/gr-qtgui/lib/freq_sink_c_impl.cc
+++ b/gr-qtgui/lib/freq_sink_c_impl.cc
@@ -154,7 +154,7 @@ namespace gr {
 	d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
         std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
         QApplication::setGraphicsSystem(QString(style.c_str()));
 #endif
diff --git a/gr-qtgui/lib/freq_sink_f_impl.cc b/gr-qtgui/lib/freq_sink_f_impl.cc
index 3fe2572eb0..046414ffaf 100644
--- a/gr-qtgui/lib/freq_sink_f_impl.cc
+++ b/gr-qtgui/lib/freq_sink_f_impl.cc
@@ -153,7 +153,7 @@ namespace gr {
 	d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
         std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
         QApplication::setGraphicsSystem(QString(style.c_str()));
 #endif
diff --git a/gr-qtgui/lib/histogram_sink_f_impl.cc b/gr-qtgui/lib/histogram_sink_f_impl.cc
index cd48de8666..13e50b217c 100644
--- a/gr-qtgui/lib/histogram_sink_f_impl.cc
+++ b/gr-qtgui/lib/histogram_sink_f_impl.cc
@@ -115,7 +115,7 @@ namespace gr {
 	d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
         std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
         QApplication::setGraphicsSystem(QString(style.c_str()));
 #endif
diff --git a/gr-qtgui/lib/sink_c_impl.cc b/gr-qtgui/lib/sink_c_impl.cc
index ba34eaaa32..ba1be4b7c3 100644
--- a/gr-qtgui/lib/sink_c_impl.cc
+++ b/gr-qtgui/lib/sink_c_impl.cc
@@ -130,7 +130,7 @@ namespace gr {
 	d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
         std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
         QApplication::setGraphicsSystem(QString(style.c_str()));
 #endif
diff --git a/gr-qtgui/lib/sink_f_impl.cc b/gr-qtgui/lib/sink_f_impl.cc
index 17a4f78db4..73b6fcad83 100644
--- a/gr-qtgui/lib/sink_f_impl.cc
+++ b/gr-qtgui/lib/sink_f_impl.cc
@@ -130,7 +130,7 @@ namespace gr {
 	d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
         std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
         QApplication::setGraphicsSystem(QString(style.c_str()));
 #endif
diff --git a/gr-qtgui/lib/time_raster_sink_b_impl.cc b/gr-qtgui/lib/time_raster_sink_b_impl.cc
index cc13faf49a..1e2fe360b1 100644
--- a/gr-qtgui/lib/time_raster_sink_b_impl.cc
+++ b/gr-qtgui/lib/time_raster_sink_b_impl.cc
@@ -130,7 +130,7 @@ namespace gr {
 	d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
         std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
         QApplication::setGraphicsSystem(QString(style.c_str()));
 #endif
diff --git a/gr-qtgui/lib/time_raster_sink_f_impl.cc b/gr-qtgui/lib/time_raster_sink_f_impl.cc
index 873bd68555..e4cbb0d38f 100644
--- a/gr-qtgui/lib/time_raster_sink_f_impl.cc
+++ b/gr-qtgui/lib/time_raster_sink_f_impl.cc
@@ -128,7 +128,7 @@ namespace gr {
 	d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
         std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
         QApplication::setGraphicsSystem(QString(style.c_str()));
 #endif
diff --git a/gr-qtgui/lib/time_sink_c_impl.cc b/gr-qtgui/lib/time_sink_c_impl.cc
index 6fe06b74a0..b23a5468fc 100644
--- a/gr-qtgui/lib/time_sink_c_impl.cc
+++ b/gr-qtgui/lib/time_sink_c_impl.cc
@@ -132,7 +132,7 @@ namespace gr {
 	d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
         std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
         QApplication::setGraphicsSystem(QString(style.c_str()));
 #endif
diff --git a/gr-qtgui/lib/time_sink_f_impl.cc b/gr-qtgui/lib/time_sink_f_impl.cc
index 1298c6c422..2b39b5536c 100644
--- a/gr-qtgui/lib/time_sink_f_impl.cc
+++ b/gr-qtgui/lib/time_sink_f_impl.cc
@@ -129,7 +129,7 @@ namespace gr {
 	d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
         std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
         QApplication::setGraphicsSystem(QString(style.c_str()));
 #endif
diff --git a/gr-qtgui/lib/vector_sink_f_impl.cc b/gr-qtgui/lib/vector_sink_f_impl.cc
index 6197da4949..fedef9654d 100644
--- a/gr-qtgui/lib/vector_sink_f_impl.cc
+++ b/gr-qtgui/lib/vector_sink_f_impl.cc
@@ -139,7 +139,7 @@ namespace gr {
         d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
         std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
         QApplication::setGraphicsSystem(QString(style.c_str()));
 #endif
diff --git a/gr-qtgui/lib/waterfall_sink_c_impl.cc b/gr-qtgui/lib/waterfall_sink_c_impl.cc
index fbc655afba..4306b97d71 100644
--- a/gr-qtgui/lib/waterfall_sink_c_impl.cc
+++ b/gr-qtgui/lib/waterfall_sink_c_impl.cc
@@ -154,7 +154,7 @@ namespace gr {
 	d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
         std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
         QApplication::setGraphicsSystem(QString(style.c_str()));
 #endif
diff --git a/gr-qtgui/lib/waterfall_sink_f_impl.cc b/gr-qtgui/lib/waterfall_sink_f_impl.cc
index fdb8fde686..9789c2cf6d 100644
--- a/gr-qtgui/lib/waterfall_sink_f_impl.cc
+++ b/gr-qtgui/lib/waterfall_sink_f_impl.cc
@@ -154,7 +154,7 @@ namespace gr {
  	d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
         std::string style = prefs::singleton()->get_string("qtgui", "style", "raster");
         QApplication::setGraphicsSystem(QString(style.c_str()));
 #endif
diff --git a/gr-qtgui/python/qtgui/CMakeLists.txt b/gr-qtgui/python/qtgui/CMakeLists.txt
index 1c20033db2..5df3a7d91b 100644
--- a/gr-qtgui/python/qtgui/CMakeLists.txt
+++ b/gr-qtgui/python/qtgui/CMakeLists.txt
@@ -20,12 +20,20 @@
 ########################################################################
 include(GrPython)
 
+if (DESIRED_QT_VERSION MATCHES 4)
+	set(PY_QT_IMPORT "from PyQt4 import Qt, QtCore, QtGui as QtWidgets")
+else()
+	set(PY_QT_IMPORT "from PyQt5 import Qt, QtCore, QtWidgets")
+endif()
+
+configure_file(range.py.cmakein "${CMAKE_CURRENT_BINARY_DIR}/range.py" @ONLY)
+configure_file(util.py.cmakein "${CMAKE_CURRENT_BINARY_DIR}/util.py" @ONLY)
+
 GR_PYTHON_INSTALL(
     FILES __init__.py
-          range.py
-          util.py
+          "${CMAKE_CURRENT_BINARY_DIR}/range.py"
+          "${CMAKE_CURRENT_BINARY_DIR}/util.py"
     DESTINATION ${GR_PYTHON_DIR}/gnuradio/qtgui
-    COMPONENT "qtgui_python"
 )
 
 ########################################################################
diff --git a/gr-qtgui/python/qtgui/range.py b/gr-qtgui/python/qtgui/range.py.cmakein
old mode 100755
new mode 100644
similarity index 93%
rename from gr-qtgui/python/qtgui/range.py
rename to gr-qtgui/python/qtgui/range.py.cmakein
index f60d6919bf..22d09254bf
--- a/gr-qtgui/python/qtgui/range.py
+++ b/gr-qtgui/python/qtgui/range.py.cmakein
@@ -21,7 +21,7 @@
 # Boston, MA 02110-1301, USA.
 #
 
-from PyQt4 import Qt, QtCore, QtGui
+@PY_QT_IMPORT@
 import util
 
 class Range(object):
@@ -64,10 +64,10 @@ class Range(object):
         return (val*self.step+self.min)
 
 
-class RangeWidget(QtGui.QWidget):
+class RangeWidget(QtWidgets.QWidget):
     def __init__(self, ranges, slot, label, style, rangeType=float):
         """ Creates the QT Range widget """
-        QtGui.QWidget.__init__(self)
+        QtWidgets.QWidget.__init__(self)
 
         self.range = ranges
         self.style = style
@@ -98,10 +98,10 @@ class RangeWidget(QtGui.QWidget):
         layout.addWidget(self.d_widget)
         self.setLayout(layout)
 
-    class Dial(QtGui.QDial):
+    class Dial(QtWidgets.QDial):
         """ Creates the range using a dial """
         def __init__(self, parent, ranges, slot, rangeType=float):
-            QtGui.QDial.__init__(self, parent)
+            QtWidgets.QDial.__init__(self, parent)
 
             self.rangeType = rangeType
 
@@ -124,10 +124,10 @@ class RangeWidget(QtGui.QWidget):
             val = self.range.map_range(value)
             self.notifyChanged(self.rangeType(val))
 
-    class Slider(QtGui.QSlider):
+    class Slider(QtWidgets.QSlider):
         """ Creates the range using a slider """
         def __init__(self, parent, ranges, slot, rangeType=float):
-            QtGui.QSlider.__init__(self, QtCore.Qt.Horizontal, parent)
+            QtWidgets.QSlider.__init__(self, QtCore.Qt.Horizontal, parent)
 
             self.rangeType = rangeType
 
@@ -166,18 +166,18 @@ class RangeWidget(QtGui.QWidget):
                 event.accept()
             # Use repaint rather than calling the super mousePressEvent.
             # Calling super causes issue where slider jumps to wrong value.
-            QtGui.QSlider.repaint(self)
+            QtWidgets.QSlider.repaint(self)
 
         def mouseMoveEvent(self, event):
             new = self.minimum() + ((self.maximum()-self.minimum()) * event.x()) / self.width()
             self.setValue(new)
             event.accept()
-            QtGui.QSlider.repaint(self)
+            QtWidgets.QSlider.repaint(self)
 
-    class Counter(QtGui.QDoubleSpinBox):
+    class Counter(QtWidgets.QDoubleSpinBox):
         """ Creates the range using a counter """
         def __init__(self, parent, ranges, slot, rangeType=float):
-            QtGui.QDoubleSpinBox.__init__(self, parent)
+            QtWidgets.QDoubleSpinBox.__init__(self, parent)
 
             self.rangeType = rangeType
 
@@ -196,10 +196,10 @@ class RangeWidget(QtGui.QWidget):
             """ Handle the valueChanged signal by converting to the right type """
             self.notifyChanged(self.rangeType(value))
 
-    class CounterSlider(QtGui.QWidget):
+    class CounterSlider(QtWidgets.QWidget):
         """ Creates the range using a counter and slider """
         def __init__(self, parent, ranges, slot, rangeType=float):
-            QtGui.QWidget.__init__(self, parent)
+            QtWidgets.QWidget.__init__(self, parent)
 
             self.rangeType = rangeType
 
@@ -244,7 +244,7 @@ class RangeWidget(QtGui.QWidget):
 
 
 if __name__ == "__main__":
-    from PyQt4 import Qt
+    from PyQt5 import Qt
     import sys
 
     def valueChanged(frequency):
diff --git a/gr-qtgui/python/qtgui/util.py b/gr-qtgui/python/qtgui/util.py.cmakein
similarity index 94%
rename from gr-qtgui/python/qtgui/util.py
rename to gr-qtgui/python/qtgui/util.py.cmakein
index d2e9495ac6..ec654d9ba2 100644
--- a/gr-qtgui/python/qtgui/util.py
+++ b/gr-qtgui/python/qtgui/util.py.cmakein
@@ -21,15 +21,14 @@
 # Boston, MA 02110-1301, USA.
 #
 
-from PyQt4 import Qt, QtCore, QtGui
+@PY_QT_IMPORT@
 from gnuradio import gr
 
 def check_set_qss():
-    app = QtGui.qApp
+    app = QtWidgets.qApp
     qssfile = gr.prefs().get_string("qtgui","qss","")
     if(len(qssfile)>0):
         try:
             app.setStyleSheet(open(qssfile).read())
         except:
             print "WARNING: bad QSS file, %s"%(qssfile)
-
diff --git a/gr-qtgui/swig/CMakeLists.txt b/gr-qtgui/swig/CMakeLists.txt
index 44b5c2fbd4..2990ac9086 100644
--- a/gr-qtgui/swig/CMakeLists.txt
+++ b/gr-qtgui/swig/CMakeLists.txt
@@ -51,12 +51,10 @@ GR_SWIG_MAKE(qtgui_swig qtgui_swig.i)
 GR_SWIG_INSTALL(
     TARGETS qtgui_swig
     DESTINATION ${GR_PYTHON_DIR}/gnuradio/qtgui
-    COMPONENT "qtgui_python"
 )
 
 install(FILES
     qtgui_swig.i
     ${CMAKE_CURRENT_BINARY_DIR}/qtgui_swig_doc.i
     DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig
-    COMPONENT "qtgui_swig"
 )
diff --git a/grc/blocks/options.xml b/grc/blocks/options.xml
index 1dee986c5c..1ef1e9df5d 100644
--- a/grc/blocks/options.xml
+++ b/grc/blocks/options.xml
@@ -16,7 +16,7 @@ from grc_gnuradio import wxgui as grc_wxgui
 import wx
 #end if
 #if $generate_options() == 'qt_gui'
-from PyQt4 import Qt
+from PyQt5 import Qt
 import sys
 #end if
 #if not $generate_options().startswith('hb')
diff --git a/grc/core/generator/flow_graph.tmpl b/grc/core/generator/flow_graph.tmpl
index 1ef251c46b..9fdc1fbb63 100644
--- a/grc/core/generator/flow_graph.tmpl
+++ b/grc/core/generator/flow_graph.tmpl
@@ -380,7 +380,7 @@ def main(top_block_cls=$(class_name), options=None):
         #end if
     #elif $generate_options == 'qt_gui'
     from distutils.version import StrictVersion
-    if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"):
+    if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
         style = gr.prefs().get_string('qtgui', 'style', 'raster')
         Qt.QApplication.setGraphicsSystem(style)
     qapp = Qt.QApplication(sys.argv)
@@ -401,7 +401,7 @@ def main(top_block_cls=$(class_name), options=None):
     def quitting():
         tb.stop()
         tb.wait()
-    qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting)
+    qapp.aboutToQuit.connect(quitting)
         #for $m in $monitors
     if $m.has_param('en'):
         if $m.get_param('en').get_value():
-- 
2.11.0

