From d97eee00d6bb424784b0992d415948dc51e3be28 Mon Sep 17 00:00:00 2001
From: "A. Maitland Bottoms" <bottoms@debian.org>
Date: Tue, 21 Nov 2017 20:09:54 -0500
Subject: [PATCH] refactor qt5 onto maint branch

---
 cmake/Modules/FindQwt.cmake                        |   15 +-
 gr-qtgui/CMakeLists.txt                            |   67 +-
 gr-qtgui/CMakeLists.txt.orig                       |  158 ++
 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                        |  307 ---
 gr-qtgui/apps/qt_digital_window.py                 |  161 --
 gr-qtgui/apps/qt_digital_window.ui                 |  342 ---
 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/QtWidgets/QRegExpValidator        |    9 +
 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}    |   26 +-
 gr-qtgui/python/qtgui/{util.py => util.py.cmakein} |    5 +-
 gr-qtgui/swig/CMakeLists.txt                       |    2 -
 87 files changed, 2690 insertions(+), 2086 deletions(-)
 create mode 100644 gr-qtgui/CMakeLists.txt.orig
 delete mode 100755 gr-qtgui/apps/qt_digital.py
 delete mode 100644 gr-qtgui/apps/qt_digital_window.py
 delete mode 100644 gr-qtgui/apps/qt_digital_window.ui
 create mode 100644 gr-qtgui/include/QtWidgets/QRegExpValidator
 rename gr-qtgui/python/qtgui/{range.py => range.py.cmakein} (94%)
 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 ad10363c1e..e467567b1c 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
 ########################################################################
@@ -129,7 +105,6 @@ configure_file(
 install(
     FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-qtgui.pc
     DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
-    COMPONENT "qtgui_devel"
 )
 
 ########################################################################
@@ -138,7 +113,6 @@ install(
 install(
     FILES ${CMAKE_CURRENT_SOURCE_DIR}/gr-qtgui.conf
     DESTINATION ${GR_PREFSDIR}
-    COMPONENT "qtgui"
 )
 
 
@@ -152,7 +126,6 @@ install(
     themes/alt.qss
     themes/projector.qss
     DESTINATION ${GR_THEMES_DIR}
-    COMPONENT "qtgui"
 )
 
 endif(ENABLE_GR_QTGUI)
diff --git a/gr-qtgui/CMakeLists.txt.orig b/gr-qtgui/CMakeLists.txt.orig
new file mode 100644
index 0000000000..ad10363c1e
--- /dev/null
+++ b/gr-qtgui/CMakeLists.txt.orig
@@ -0,0 +1,158 @@
+# Copyright 2010-2011,2013 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+########################################################################
+# Setup dependencies
+########################################################################
+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)
+
+########################################################################
+# Register component
+########################################################################
+include(GrComponent)
+if(NOT CMAKE_CROSSCOMPILING)
+    set(qt_gui_python_deps
+        PYQT4_FOUND
+    )
+endif(NOT CMAKE_CROSSCOMPILING)
+
+GR_REGISTER_COMPONENT("gr-qtgui" ENABLE_GR_QTGUI
+    Boost_FOUND
+    QT4_FOUND
+    QWT_FOUND
+    ENABLE_VOLK
+    ENABLE_GNURADIO_RUNTIME
+    ENABLE_GR_FFT
+    ENABLE_GR_FILTER
+    PYTHONLIBS_FOUND
+    ${qt_gui_python_deps}
+)
+
+GR_SET_GLOBAL(GR_QTGUI_INCLUDE_DIRS
+    ${CMAKE_CURRENT_SOURCE_DIR}/include
+    ${CMAKE_CURRENT_SOURCE_DIR}/lib
+    ${CMAKE_CURRENT_BINARY_DIR}/lib
+)
+
+SET(GR_PKG_QTGUI_EXAMPLES_DIR ${GR_PKG_DATA_DIR}/examples/qt-gui)
+
+########################################################################
+# Begin conditional configuration
+########################################################################
+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
+########################################################################
+add_subdirectory(include/gnuradio/qtgui)
+add_subdirectory(lib)
+add_subdirectory(doc)
+add_subdirectory(examples/c++)
+if(ENABLE_PYTHON)
+    add_subdirectory(grc)
+    add_subdirectory(swig)
+    add_subdirectory(python/qtgui)
+    add_subdirectory(examples)
+    add_subdirectory(apps)
+endif(ENABLE_PYTHON)
+
+########################################################################
+# Create Pkg Config File
+########################################################################
+configure_file(
+    ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-qtgui.pc.in
+    ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-qtgui.pc
+@ONLY)
+
+install(
+    FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-qtgui.pc
+    DESTINATION ${GR_LIBRARY_DIR}/pkgconfig
+    COMPONENT "qtgui_devel"
+)
+
+########################################################################
+# Install the conf file
+########################################################################
+install(
+    FILES ${CMAKE_CURRENT_SOURCE_DIR}/gr-qtgui.conf
+    DESTINATION ${GR_PREFSDIR}
+    COMPONENT "qtgui"
+)
+
+
+########################################################################
+# Install the themes (QSS) files
+########################################################################
+install(
+    FILES
+    themes/plain.qss
+    themes/dark.qss
+    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 528bb97e5a..ff5db1a9a6 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 606311af48..26263112ca 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 6df9fae190..1bd847b607 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 f07e3e8b50..04f1b03486 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 1852345823..46bdd7bc84 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 c06076f1f9..8dc4a05d55 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 db79f9dbad..8e8ba86757 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 0d7a16ea6e..6045ebfadd 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 52b0d4dff7..a2e63d0113 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 6ea5afc4ef..d131747486 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 893df2a234..723291d4b4 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 82a22f740d..606fbf95e4 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 d822557f1b..a2f63cc4bf 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 202e0f88f4..3dfccad804 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 8f5ad9f60d..59b340de9e 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 8a7888b451..66c0a7f9cf 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 7cee262379..b2e42320db 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 ad8691489c..6cd93b0965 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 5d6a8389cf..944d739978 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 eaab7599c7..7a039e2135 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 46f903e1b5..c3c03ec977 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 b252bb8863..f568100719 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 007c94d044..cfbe5dc6cb 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 856c8c8945..e84b84c295 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
deleted file mode 100755
index fef4f448b4..0000000000
--- a/gr-qtgui/apps/qt_digital.py
+++ /dev/null
@@ -1,307 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2011 Free Software Foundation, Inc.
-# 
-# This file is part of GNU Radio
-# 
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-# 
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING.  If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-# 
-
-from gnuradio import gr, digital
-from gnuradio import blocks
-from gnuradio import filter
-from gnuradio import channels
-from gnuradio import eng_notation
-import sys
-
-try:
-    from gnuradio import qtgui
-    from PyQt4 import QtGui, QtCore
-    import sip
-except ImportError:
-    print "Error: Program requires PyQt4 and gr-qtgui."
-    sys.exit(1)
-
-try:
-    import scipy
-except ImportError:
-    print "Error: Program requires scipy (see: www.scipy.org)."
-    sys.exit(1)
-
-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\""
-    sys.exit(1)
-
-class dialog_box(QtGui.QMainWindow):
-    def __init__(self, snkTx, snkRx, fg, parent=None):
-        QtGui.QWidget.__init__(self, parent)
-        self.gui = Ui_DigitalWindow()
-        self.gui.setupUi(self)
-
-        self.fg = fg
-
-        self.set_sample_rate(self.fg.sample_rate())
-
-        self.set_snr(self.fg.snr())
-        self.set_frequency(self.fg.frequency_offset())
-        self.set_time_offset(self.fg.timing_offset())
-
-        self.set_gain_mu(self.fg.rx_gain_mu())
-        self.set_loop_bw(self.fg.loop_bw())
-
-        # Add the qtsnk widgets to the hlayout box
-        self.gui.sinkLayout.addWidget(snkTx)
-        self.gui.sinkLayout.addWidget(snkRx)
-
-
-        # Connect up some signals
-        self.connect(self.gui.pauseButton, QtCore.SIGNAL("clicked()"),
-                     self.pauseFg)
-
-        self.connect(self.gui.sampleRateEdit, QtCore.SIGNAL("editingFinished()"),
-                     self.sampleRateEditText)
-
-        self.connect(self.gui.snrEdit, QtCore.SIGNAL("editingFinished()"),
-                     self.snrEditText)
-        self.connect(self.gui.freqEdit, QtCore.SIGNAL("editingFinished()"),
-                     self.freqEditText)
-        self.connect(self.gui.timeEdit, QtCore.SIGNAL("editingFinished()"),
-                     self.timeEditText)
-
-        self.connect(self.gui.gainMuEdit, QtCore.SIGNAL("editingFinished()"),
-                     self.gainMuEditText)
-        self.connect(self.gui.alphaEdit, QtCore.SIGNAL("editingFinished()"),
-                     self.alphaEditText)
-
-
-    def pauseFg(self):
-        if(self.gui.pauseButton.text() == "Pause"):
-            self.fg.stop()
-            self.fg.wait()
-            self.gui.pauseButton.setText("Unpause")
-        else:
-            self.fg.start()
-            self.gui.pauseButton.setText("Pause")
-
-    # Accessor functions for Gui to manipulate system parameters
-    def set_sample_rate(self, sr):
-        ssr = eng_notation.num_to_str(sr)
-        self.gui.sampleRateEdit.setText(QtCore.QString("%1").arg(ssr))
-
-    def sampleRateEditText(self):
-        try:
-            rate = self.gui.sampleRateEdit.text().toAscii()
-            srate = eng_notation.str_to_num(rate)
-            self.fg.set_sample_rate(srate)
-        except RuntimeError:
-            pass
-
-
-    # Accessor functions for Gui to manipulate channel model
-    def set_snr(self, snr):
-        self.gui.snrEdit.setText(QtCore.QString("%1").arg(snr))
-
-    def set_frequency(self, fo):
-        self.gui.freqEdit.setText(QtCore.QString("%1").arg(fo))
-
-    def set_time_offset(self, to):
-        self.gui.timeEdit.setText(QtCore.QString("%1").arg(to))
-
-    def snrEditText(self):
-        try:
-            snr = self.gui.snrEdit.text().toDouble()[0]
-            self.fg.set_snr(snr)
-        except RuntimeError:
-            pass
-
-    def freqEditText(self):
-        try:
-            freq = self.gui.freqEdit.text().toDouble()[0]
-            self.fg.set_frequency_offset(freq)
-        except RuntimeError:
-            pass
-
-    def timeEditText(self):
-        try:
-            to = self.gui.timeEdit.text().toDouble()[0]
-            self.fg.set_timing_offset(to)
-        except RuntimeError:
-            pass
-
-
-    # Accessor functions for Gui to manipulate receiver parameters
-    def set_gain_mu(self, gain):
-        self.gui.gainMuEdit.setText(QtCore.QString("%1").arg(gain))
-
-    def set_loop_bw(self, bw):
-        self.gui.alphaEdit.setText(QtCore.QString("%1").arg(bw))
-
-    def alphaEditText(self):
-        try:
-            bw = self.gui.alphaEdit.text().toDouble()[0]
-            self.fg.set_loop_bw(bw)
-        except RuntimeError:
-            pass
-
-    def gainMuEditText(self):
-        try:
-            gain = self.gui.gainMuEdit.text().toDouble()[0]
-            self.fg.set_rx_gain_mu(gain)
-        except RuntimeError:
-            pass
-
-
-class my_top_block(gr.top_block):
-    def __init__(self):
-        gr.top_block.__init__(self)
-
-        self.qapp = QtGui.QApplication(sys.argv)
-
-        self._sample_rate = 2000e3
-
-        self.sps = 2
-        self.excess_bw = 0.35
-        self.gray_code = digital.mod_codes.GRAY_CODE
-        
-        fftsize = 2048
-
-        self.data = scipy.random.randint(0, 255, 1000)
-        self.src = blocks.vector_source_b(self.data.tolist(), True)
-        self.mod = digital.dqpsk_mod(self.gray_code,
-                                     samples_per_symbol=self.sps,
-                                     excess_bw=self.excess_bw,
-                                     verbose=False, log=False)
-
-        self.rrctaps = filter.firdes.root_raised_cosine(1, self.sps, 1, self.excess_bw, 21)
-        self.rx_rrc = filter.fir_filter_ccf(1, self.rrctaps)
-
-
-        # Set up the carrier & clock recovery parameters
-        self.arity = 4
-        self.mu = 0.5
-        self.gain_mu = 0.05
-        self.omega = self.sps
-        self.gain_omega = .25 * self.gain_mu * self.gain_mu
-        self.omega_rel_lim = 0.05
-        
-        self._loop_bw = 2*scipy.pi/100.0
-        self.fmin = -1000/self.sample_rate()
-        self.fmax = 1000/self.sample_rate()
-        
-        self.receiver = digital.mpsk_receiver_cc(self.arity, 0,
-                                                 self._loop_bw,
-                                                 self.fmin, self.fmax,
-                                                 self.mu, self.gain_mu,
-                                                 self.omega, self.gain_omega,
-                                                 self.omega_rel_lim)
-        
-        
-        self.snr_dB = 15
-        noise = self.get_noise_voltage(self.snr_dB)
-        self.fo = 100/self.sample_rate()
-        self.to = 1.0
-        self.channel = channels.channel_model(noise, self.fo, self.to)
-
-        self.thr = blocks.throttle(gr.sizeof_char, self._sample_rate)
-        self.snk_tx = qtgui.sink_c(fftsize, filter.firdes.WIN_BLACKMAN_hARRIS, 
-                                   0, self._sample_rate*self.sps,
-                                   "Tx", True, True, True, True)
-
-        self.snk_rx = qtgui.sink_c(fftsize, filter.firdes.WIN_BLACKMAN_hARRIS,
-                                   0, self._sample_rate,
-                                   "Rx", True, True, True, True)
-
-        self.connect(self.src, self.thr, self.mod, self.channel, self.snk_tx)
-        self.connect(self.channel, self.rx_rrc, self.receiver, self.snk_rx)
-        
-        pyTxQt  = self.snk_tx.pyqwidget()
-        pyTx = sip.wrapinstance(pyTxQt, QtGui.QWidget)
-
-        pyRxQt  = self.snk_rx.pyqwidget()
-        pyRx = sip.wrapinstance(pyRxQt, QtGui.QWidget)
-
-        self.main_box = dialog_box(pyTx, pyRx, self);
-        self.main_box.show()
-
-
-    def get_noise_voltage(self, SNR):
-        S = 0                            # dBm, assuming signal power normalized
-        N = S - SNR                      # dBm
-        npwr = pow(10.0, N/10.0)         # ratio
-        nv = scipy.sqrt(npwr * self.sps) # convert the noise voltage
-        return nv
-
-
-    # System Parameters
-    def sample_rate(self):
-        return self._sample_rate
-    
-    def set_sample_rate(self, sr):
-        self._sample_rate = sr
-
-
-    # Channel Model Parameters
-    def snr(self):
-        return self.snr_dB
-    
-    def set_snr(self, snr):
-        self.snr_dB = snr
-        noise = self.get_noise_voltage(self.snr_dB)
-        self.channel.set_noise_voltage(noise)
-
-    def frequency_offset(self):
-        return self.fo * self.sample_rate()
-
-    def set_frequency_offset(self, fo):
-        self.fo = fo / self.sample_rate()
-        self.channel.set_frequency_offset(self.fo)
-
-    def timing_offset(self):
-        return self.to
-    
-    def set_timing_offset(self, to):
-        self.to = to
-        self.channel.set_timing_offset(self.to)
-
-
-    # Receiver Parameters
-    def rx_gain_mu(self):
-        return self.gain_mu
-
-    def rx_gain_omega(self):
-        return self.gain_omega
-    
-    def set_rx_gain_mu(self, gain):
-        self.gain_mu = gain
-        self.gain_omega = .25 * self.gain_mu * self.gain_mu
-        self.receiver.set_gain_mu(self.gain_mu)
-        self.receiver.set_gain_omega(self.gain_omega)
-
-    def set_loop_bw(self, loop_bw):
-        self._loop_bw = bw
-        self.receiver.set_loop_bw(self._loop_bw)
-
-    def loop_bw(self):
-        return self._loop_bw
-    
-if __name__ == "__main__":
-    tb = my_top_block();
-    tb.start()
-    tb.qapp.exec_()
-    tb.stop()
diff --git a/gr-qtgui/apps/qt_digital_window.py b/gr-qtgui/apps/qt_digital_window.py
deleted file mode 100644
index 50dd53a923..0000000000
--- a/gr-qtgui/apps/qt_digital_window.py
+++ /dev/null
@@ -1,161 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# 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
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_DigitalWindow(object):
-    def setupUi(self, DigitalWindow):
-        DigitalWindow.setObjectName("DigitalWindow")
-        DigitalWindow.resize(1236, 741)
-        self.centralwidget = QtGui.QWidget(DigitalWindow)
-        self.centralwidget.setObjectName("centralwidget")
-        self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
-        self.verticalLayout.setObjectName("verticalLayout")
-        self.sinkFrame = QtGui.QFrame(self.centralwidget)
-        self.sinkFrame.setMinimumSize(QtCore.QSize(0, 550))
-        self.sinkFrame.setFrameShape(QtGui.QFrame.StyledPanel)
-        self.sinkFrame.setFrameShadow(QtGui.QFrame.Raised)
-        self.sinkFrame.setObjectName("sinkFrame")
-        self.horizontalLayout_2 = QtGui.QHBoxLayout(self.sinkFrame)
-        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
-        self.sinkLayout = QtGui.QHBoxLayout()
-        self.sinkLayout.setObjectName("sinkLayout")
-        self.horizontalLayout_2.addLayout(self.sinkLayout)
-        self.verticalLayout.addWidget(self.sinkFrame)
-        self.horizontalLayout = QtGui.QHBoxLayout()
-        self.horizontalLayout.setObjectName("horizontalLayout")
-        self.sysBox = QtGui.QGroupBox(self.centralwidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.sysBox.sizePolicy().hasHeightForWidth())
-        self.sysBox.setSizePolicy(sizePolicy)
-        self.sysBox.setMinimumSize(QtCore.QSize(0, 0))
-        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.setObjectName("gridLayout_2")
-        self.sampleRateEdit = QtGui.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.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.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.setObjectName("gridLayout_3")
-        self.alphaLabel = QtGui.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.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.setObjectName("gainMuLabel")
-        self.gridLayout_3.addWidget(self.gainMuLabel, 0, 0, 1, 1)
-        self.gainMuEdit = QtGui.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.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.setObjectName("gridLayout")
-        self.snrLabel = QtGui.QLabel(self.channelModeBox)
-        self.snrLabel.setObjectName("snrLabel")
-        self.gridLayout.addWidget(self.snrLabel, 0, 1, 1, 1)
-        self.snrEdit = QtGui.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.setObjectName("freqLabel")
-        self.gridLayout.addWidget(self.freqLabel, 1, 1, 1, 1)
-        self.freqEdit = QtGui.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.setObjectName("timeLabel")
-        self.gridLayout.addWidget(self.timeLabel, 2, 1, 1, 1)
-        self.timeEdit = QtGui.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)
-        self.horizontalLayout.addItem(spacerItem)
-        self.verticalLayout_2 = QtGui.QVBoxLayout()
-        self.verticalLayout_2.setObjectName("verticalLayout_2")
-        spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.verticalLayout_2.addItem(spacerItem1)
-        self.pauseButton = QtGui.QPushButton(self.centralwidget)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.pauseButton.sizePolicy().hasHeightForWidth())
-        self.pauseButton.setSizePolicy(sizePolicy)
-        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.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.setGeometry(QtCore.QRect(0, 0, 1236, 23))
-        self.menubar.setObjectName("menubar")
-        self.menuFile = QtGui.QMenu(self.menubar)
-        self.menuFile.setObjectName("menuFile")
-        DigitalWindow.setMenuBar(self.menubar)
-        self.statusbar = QtGui.QStatusBar(DigitalWindow)
-        self.statusbar.setObjectName("statusbar")
-        DigitalWindow.setStatusBar(self.statusbar)
-        self.actionExit = QtGui.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)
-        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))
-
diff --git a/gr-qtgui/apps/qt_digital_window.ui b/gr-qtgui/apps/qt_digital_window.ui
deleted file mode 100644
index 9672521815..0000000000
--- a/gr-qtgui/apps/qt_digital_window.ui
+++ /dev/null
@@ -1,342 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>DigitalWindow</class>
- <widget class="QMainWindow" name="DigitalWindow">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>1236</width>
-    <height>741</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>MainWindow</string>
-  </property>
-  <widget class="QWidget" name="centralwidget">
-   <layout class="QVBoxLayout" name="verticalLayout">
-    <item>
-     <widget class="QFrame" name="sinkFrame">
-      <property name="minimumSize">
-       <size>
-        <width>0</width>
-        <height>550</height>
-       </size>
-      </property>
-      <property name="frameShape">
-       <enum>QFrame::StyledPanel</enum>
-      </property>
-      <property name="frameShadow">
-       <enum>QFrame::Raised</enum>
-      </property>
-      <layout class="QHBoxLayout" name="horizontalLayout_2">
-       <item>
-        <layout class="QHBoxLayout" name="sinkLayout"/>
-       </item>
-      </layout>
-     </widget>
-    </item>
-    <item>
-     <layout class="QHBoxLayout" name="horizontalLayout">
-      <item>
-       <widget class="QGroupBox" name="sysBox">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>0</width>
-          <height>0</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>16777215</width>
-          <height>120</height>
-         </size>
-        </property>
-        <property name="title">
-         <string>System Parameters</string>
-        </property>
-        <property name="alignment">
-         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-        </property>
-        <layout class="QGridLayout" name="gridLayout_2">
-         <item row="0" column="3">
-          <widget class="QLineEdit" name="sampleRateEdit">
-           <property name="maximumSize">
-            <size>
-             <width>100</width>
-             <height>16777215</height>
-            </size>
-           </property>
-          </widget>
-         </item>
-         <item row="0" column="2">
-          <widget class="QLabel" name="sampleRateLabel">
-           <property name="text">
-            <string>Sample Rate (sps)</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </widget>
-      </item>
-      <item>
-       <widget class="QGroupBox" name="rxBox">
-        <property name="maximumSize">
-         <size>
-          <width>16777215</width>
-          <height>120</height>
-         </size>
-        </property>
-        <property name="title">
-         <string>Receiver Parameters</string>
-        </property>
-        <property name="alignment">
-         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-        </property>
-        <layout class="QGridLayout" name="gridLayout_3">
-         <item row="1" column="0">
-          <widget class="QLabel" name="alphaLabel">
-           <property name="text">
-            <string>Alpha</string>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="1">
-          <widget class="QLineEdit" name="alphaEdit">
-           <property name="maximumSize">
-            <size>
-             <width>100</width>
-             <height>16777215</height>
-            </size>
-           </property>
-          </widget>
-         </item>
-         <item row="0" column="0">
-          <widget class="QLabel" name="gainMuLabel">
-           <property name="text">
-            <string>Gain mu</string>
-           </property>
-          </widget>
-         </item>
-         <item row="0" column="1">
-          <widget class="QLineEdit" name="gainMuEdit">
-           <property name="maximumSize">
-            <size>
-             <width>100</width>
-             <height>16777215</height>
-            </size>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </widget>
-      </item>
-      <item>
-       <widget class="QGroupBox" name="channelModeBox">
-        <property name="maximumSize">
-         <size>
-          <width>16777215</width>
-          <height>120</height>
-         </size>
-        </property>
-        <property name="title">
-         <string>Channel Model Parameters</string>
-        </property>
-        <property name="alignment">
-         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-        </property>
-        <layout class="QGridLayout" name="gridLayout">
-         <property name="sizeConstraint">
-          <enum>QLayout::SetMinimumSize</enum>
-         </property>
-         <item row="0" column="1">
-          <widget class="QLabel" name="snrLabel">
-           <property name="text">
-            <string>SNR (dB)</string>
-           </property>
-          </widget>
-         </item>
-         <item row="0" column="2">
-          <widget class="QLineEdit" name="snrEdit">
-           <property name="maximumSize">
-            <size>
-             <width>100</width>
-             <height>16777215</height>
-            </size>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="1">
-          <widget class="QLabel" name="freqLabel">
-           <property name="text">
-            <string>Frequency Offset (Hz)</string>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="2">
-          <widget class="QLineEdit" name="freqEdit">
-           <property name="maximumSize">
-            <size>
-             <width>100</width>
-             <height>16777215</height>
-            </size>
-           </property>
-          </widget>
-         </item>
-         <item row="2" column="1">
-          <widget class="QLabel" name="timeLabel">
-           <property name="text">
-            <string>Timing Offset</string>
-           </property>
-          </widget>
-         </item>
-         <item row="2" column="2">
-          <widget class="QLineEdit" name="timeEdit">
-           <property name="maximumSize">
-            <size>
-             <width>100</width>
-             <height>16777215</height>
-            </size>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </widget>
-      </item>
-      <item>
-       <spacer name="horizontalSpacer">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>40</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item>
-       <layout class="QVBoxLayout" name="verticalLayout_2">
-        <item>
-         <spacer name="verticalSpacer">
-          <property name="orientation">
-           <enum>Qt::Vertical</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>20</width>
-            <height>40</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-        <item>
-         <widget class="QPushButton" name="pauseButton">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>80</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="text">
-           <string>Pause</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QPushButton" name="closeButton">
-          <property name="maximumSize">
-           <size>
-            <width>80</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="text">
-           <string>Close</string>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-     </layout>
-    </item>
-   </layout>
-  </widget>
-  <widget class="QMenuBar" name="menubar">
-   <property name="geometry">
-    <rect>
-     <x>0</x>
-     <y>0</y>
-     <width>1236</width>
-     <height>23</height>
-    </rect>
-   </property>
-   <widget class="QMenu" name="menuFile">
-    <property name="title">
-     <string>&amp;File</string>
-    </property>
-    <addaction name="actionExit"/>
-   </widget>
-   <addaction name="menuFile"/>
-  </widget>
-  <widget class="QStatusBar" name="statusbar"/>
-  <action name="actionExit">
-   <property name="text">
-    <string>E&amp;xit</string>
-   </property>
-  </action>
- </widget>
- <tabstops>
-  <tabstop>snrEdit</tabstop>
-  <tabstop>freqEdit</tabstop>
-  <tabstop>timeEdit</tabstop>
- </tabstops>
- <resources/>
- <connections>
-  <connection>
-   <sender>closeButton</sender>
-   <signal>clicked()</signal>
-   <receiver>DigitalWindow</receiver>
-   <slot>close()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>322</x>
-     <y>623</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>66</x>
-     <y>561</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>actionExit</sender>
-   <signal>triggered()</signal>
-   <receiver>DigitalWindow</receiver>
-   <slot>close()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>-1</x>
-     <y>-1</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>617</x>
-     <y>327</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
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 239b5dbf42..5a100aa5e0 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 8ec62fc1e2..3f7119f97f 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 PyQt4 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/QtWidgets/QRegExpValidator b/gr-qtgui/include/QtWidgets/QRegExpValidator
new file mode 100644
index 0000000000..17f6ce8333
--- /dev/null
+++ b/gr-qtgui/include/QtWidgets/QRegExpValidator
@@ -0,0 +1,9 @@
+/*
+ * The Qt5 version of the 'uic' compiler generates incorrect code right now.
+ * The bug has been reported (https://bugreports.qt.io/browse/QTBUG-48492) and
+ * is pending review.
+ *
+ * This file will make sure that the build of gr-qtgui will succeed with the
+ * broken version of 'uic'.
+ */
+#include <QtGui/QRegExpValidator>
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 cb9b775e8b..1fa7413117 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 94%
rename from gr-qtgui/python/qtgui/range.py
rename to gr-qtgui/python/qtgui/range.py.cmakein
index f60d6919bf..9ed7706195
--- 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
 
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"
 )
-- 
2.11.0

