summaryrefslogtreecommitdiff
path: root/gnuradio-runtime
diff options
context:
space:
mode:
authorBastian Bloessl <mail@bastibl.net>2019-06-16 11:05:51 +0200
committerMartin Braun <martin.braun@ettus.com>2019-06-19 13:00:00 -0700
commit3750f748501ec83d60c489dfa700522f3be21b00 (patch)
tree7b7695cbe292b278942f58d5179d665eb16d3a4c /gnuradio-runtime
parentf9447f11df7ff3fe01959fc42f86ce509b152ac0 (diff)
runtime: port ctrlport monitor to 3.8 and qt5
Diffstat (limited to 'gnuradio-runtime')
-rw-r--r--gnuradio-runtime/python/gnuradio/ctrlport/GNURadioControlPortClient.py12
-rw-r--r--gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py18
-rw-r--r--gnuradio-runtime/python/gnuradio/ctrlport/RPCConnectionThrift.py17
-rw-r--r--gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor261
-rw-r--r--gnuradio-runtime/python/gnuradio/ctrlport/gr-perf-monitorx4
-rw-r--r--gnuradio-runtime/python/gnuradio/ctrlport/monitor.py6
6 files changed, 148 insertions, 170 deletions
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/GNURadioControlPortClient.py b/gnuradio-runtime/python/gnuradio/ctrlport/GNURadioControlPortClient.py
index 8249d341ec..bee5cd15ed 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/GNURadioControlPortClient.py
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/GNURadioControlPortClient.py
@@ -30,6 +30,8 @@ is currently the only supported transport.
from __future__ import print_function
from __future__ import unicode_literals
+from argparse import ArgumentParser
+
from gnuradio.ctrlport.RPCConnection import RPCMethods
try:
from gnuradio.ctrlport.RPCConnectionThrift import RPCConnectionThrift
@@ -113,18 +115,18 @@ class GNURadioControlPortClient(object):
"""
def __init__(self, argv = [], rpcmethod = 'thrift', callback = None, blockingcallback = None):
- if len(argv) > 1: host = argv[1]
- else: host = None
- if len(argv) > 2: port = argv[2]
- else: port = None
+ parser = ArgumentParser(description="GNU Radio Control Port Monitor")
+ parser.add_argument("host", nargs="?", default="localhost", help="host name or IP")
+ parser.add_argument("port", help="port")
+ args = parser.parse_args()
self.client = None
if rpcmethod in RPCMethods:
if rpcmethod == 'thrift':
#print("making RPCConnectionThrift")
- self.client = RPCConnectionThrift(host, port)
+ self.client = RPCConnectionThrift(args.host, args.port)
#print("made %s" % self.client)
#print("making callback call")
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py b/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py
index cb66baebb9..b29d069aca 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py
@@ -31,26 +31,26 @@ import sys, time, struct
try:
from gnuradio import qtgui
- from PyQt4 import QtGui, QtCore
+ from PyQt5 import Qt, QtCore
import sip
except ImportError:
- print("Error: Program requires PyQt4 and gr-qtgui.")
+ print("Error: Program requires PyQt5 and gr-qtgui.")
sys.exit(1)
-class GrDataPlotParent(gr.top_block, QtGui.QWidget):
+class GrDataPlotParent(gr.top_block, Qt.QWidget):
# Setup signals
- plotupdated = QtCore.pyqtSignal(QtGui.QWidget)
+ plotupdated = QtCore.pyqtSignal(Qt.QWidget)
def __init__(self, name, rate, pmin=None, pmax=None):
gr.top_block.__init__(self)
- QtGui.QWidget.__init__(self, None)
+ Qt.QWidget.__init__(self, None)
self._name = name
self._npts = 500
self._rate = rate
self.knobnames = [name,]
- self.layout = QtGui.QVBoxLayout()
+ self.layout = Qt.QVBoxLayout()
self.setLayout(self.layout)
self.setAcceptDrops(True)
@@ -89,7 +89,7 @@ class GrDataPlotParent(gr.top_block, QtGui.QWidget):
else:
self.connect(self.src[n], (self.snk,n))
- self.py_window = sip.wrapinstance(self.snk.pyqwidget(), QtGui.QWidget)
+ self.py_window = sip.wrapinstance(self.snk.pyqwidget(), Qt.QWidget)
self.layout.addWidget(self.py_window)
@@ -416,7 +416,7 @@ class GrDataPlotterValueTable(object):
'Curent Value', 'Units', 'Description']):
# must encapsulate, cuz Qt's bases are not classes
self.uid = uid
- self.treeWidget = QtGui.QTreeWidget(parent)
+ self.treeWidget = Qt.QTreeWidget(parent)
self.treeWidget.setColumnCount(len(headers))
self.treeWidget.setGeometry(x,y,xsize,ysize)
self.treeWidget.setHeaderLabels(headers)
@@ -479,7 +479,7 @@ class GrDataPlotterValueTable(object):
elif(type(v) == str and k.find('probe2_b') == 0):
v = struct.unpack(len(v)*'b', v)
- item = QtGui.QTreeWidgetItem([k, str(v),
+ item = Qt.QTreeWidgetItem([k, str(v),
knobprops[k].units, knobprops[k].description])
self.treeWidget.addTopLevelItem(item)
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/RPCConnectionThrift.py b/gnuradio-runtime/python/gnuradio/ctrlport/RPCConnectionThrift.py
index 466fc9fc04..3bc4c87308 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/RPCConnectionThrift.py
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/RPCConnectionThrift.py
@@ -41,10 +41,13 @@ class ThriftRadioClient(object):
self.transport.open()
def __del__(self):
- self.radio.shutdown()
- self.transport.close()
+ try:
+ self.transport.close()
+ self.radio.shutdown()
+ except:
+ pass
- def getRadio(self, host, port):
+ def getRadio(self):
return self.radio
"""
@@ -138,10 +141,10 @@ class RPCConnectionThrift(RPCConnection.RPCConnection):
def newConnection(self, host=None, port=None):
try:
- self.thriftclient = ThriftRadioClient(self.getHost(), self.getPort())
- except TTransport.TTransportException:
- sys.stderr.write("Could not connect to ControlPort endpoint at {0}:{1}.\n\n".format(host, port))
- sys.exit(1)
+ self.thriftclient = ThriftRadioClient(host, int(port))
+ except:
+ return None
+ return self
def properties(self, *args):
knobprops = self.thriftclient.radio.properties(*args)
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor b/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor
index c866776355..dfaba52c0c 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor
@@ -20,21 +20,20 @@
# Boston, MA 02110-1301, USA.
#
-from PyQt4 import QtCore,Qt
-import PyQt4.QtGui as QtGui
+from PyQt5 import QtCore, Qt
import os, sys, time, struct
from gnuradio import gr, ctrlport
from gnuradio.ctrlport.GrDataPlotter import *
-class RateDialog(QtGui.QDialog):
+class RateDialog(Qt.QDialog):
def __init__(self, delay, parent=None):
super(RateDialog, self).__init__(parent)
- self.gridLayout = QtGui.QGridLayout(self)
+ self.gridLayout = Qt.QGridLayout(self)
self.setWindowTitle("Update Delay (ms)");
- self.delay = QtGui.QLineEdit(self);
+ self.delay = Qt.QLineEdit(self);
self.delay.setText(str(delay));
- self.buttonBox = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel)
+ self.buttonBox = Qt.QDialogButtonBox(Qt.QDialogButtonBox.Ok | Qt.QDialogButtonBox.Cancel)
self.gridLayout.addWidget(self.delay);
self.gridLayout.addWidget(self.buttonBox);
self.buttonBox.accepted.connect(self.accept)
@@ -44,9 +43,9 @@ class RateDialog(QtGui.QDialog):
def reject(self):
self.done(0);
-class MAINWindow(QtGui.QMainWindow):
+class MAINWindow(Qt.QMainWindow):
def minimumSizeHint(self):
- return Qtgui.QSize(800,600)
+ return Qt.QSize(800,600)
def __init__(self, radioclient):
@@ -57,14 +56,14 @@ class MAINWindow(QtGui.QMainWindow):
self.plots = []
self.knobprops = []
- self.mdiArea = QtGui.QMdiArea()
+ self.mdiArea = Qt.QMdiArea()
self.mdiArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
self.mdiArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
self.setCentralWidget(self.mdiArea)
self.mdiArea.subWindowActivated.connect(self.updateMenus)
self.windowMapper = QtCore.QSignalMapper(self)
- self.windowMapper.mapped[QtGui.QWidget].connect(self.setActiveSubWindow)
+ self.windowMapper.mapped[Qt.QWidget].connect(self.setActiveSubWindow)
self.createActions()
self.createMenus()
@@ -76,7 +75,7 @@ class MAINWindow(QtGui.QMainWindow):
self.setUnifiedTitleAndToolBarOnMac(True)
self.newCon(radioclient)
- icon = QtGui.QIcon(ctrlport.__path__[0] + "/icon.png" )
+ icon = Qt.QIcon(ctrlport.__path__[0] + "/icon.png" )
self.setWindowIcon(icon)
# Locally turn off ControlPort export from GR. This prevents
@@ -97,8 +96,8 @@ class MAINWindow(QtGui.QMainWindow):
child.setWindowTitle(str(child.radioclient))
self.mdiArea.addSubWindow(child)
self.mdiArea.currentSubWindow().showMaximized()
- self.conns.append(child)
- self.plots.append([])
+ self.conns.append(child)
+ self.plots.append([])
def propertiesMenu(self, key, radio, uid):
title = str(radio)
@@ -110,11 +109,11 @@ class MAINWindow(QtGui.QMainWindow):
# Use display option mask of item to set up available plot
# types and default options.
disp = self.knobprops[uid][key].display
- cplx = disp & gr.DISPOPTCPLX | disp & gr.DISPXY
- strip = disp & gr.DISPOPTSTRIP
- stem = disp & gr.DISPOPTSTEM
- log = disp & gr.DISPOPTLOG
- scatter = disp & gr.DISPOPTSCATTER
+ cplx = bool(disp & gr.DISPOPTCPLX | disp & gr.DISPXY)
+ strip = bool(disp & gr.DISPOPTSTRIP)
+ stem = bool(disp & gr.DISPOPTSTEM)
+ log = bool(disp & gr.DISPOPTLOG)
+ scatter = bool(disp & gr.DISPOPTSCATTER)
def newUpdaterProxy():
self.newUpdater(key, radio)
@@ -143,7 +142,7 @@ class MAINWindow(QtGui.QMainWindow):
def newPlotterRasterBProxy():
self.newPlotRasterB(key, uid, title, pmin, pmax)
- menu = QtGui.QMenu(self)
+ menu = Qt.QMenu(self)
menu.setTitle("Item Actions")
menu.setTearOffEnabled(False)
@@ -161,7 +160,7 @@ class MAINWindow(QtGui.QMainWindow):
menu.addAction("Plot PSD", newPlotterPsdCProxy)
menu.addAction("Plot Constellation", newPlotterConstProxy)
- menu.popup(QtGui.QCursor.pos())
+ menu.popup(Qt.QCursor.pos())
def newUpdater(self, key, radio):
updater = UpdaterWindow(key, radio, None)
@@ -176,16 +175,14 @@ class MAINWindow(QtGui.QMainWindow):
knobprop = self.knobprops[uid][tag]
strr = str(tree.radioclient)
- print(strr)
-# r = strr.split(" ")
title = strr #title = "{0}:{1}".format(r[3], r[5])
pmin,pmax = get_minmax(knobprop)
disp = knobprop.display
if(disp & gr.DISPTIME):
- strip = disp & gr.DISPOPTSTRIP
- stem = disp & gr.DISPOPTSTEM
- log = disp & gr.DISPOPTLOG
+ strip = bool(disp & gr.DISPOPTSTRIP)
+ stem = bool(disp & gr.DISPOPTSTEM)
+ log = bool(disp & gr.DISPOPTLOG)
if(disp & gr.DISPOPTCPLX == 0):
self.newPlotF(tag, uid, title, pmin, pmax,
log, strip, stem)
@@ -204,7 +201,7 @@ class MAINWindow(QtGui.QMainWindow):
self.newPlotPsdC(tag, uid, title)
def startDrag(self, e):
- drag = QtGui.QDrag(self)
+ drag = Qt.QDrag(self)
mime_data = QtCore.QMimeData()
tag = str(e.text(0))
@@ -221,7 +218,7 @@ class MAINWindow(QtGui.QMainWindow):
mime_data.setText(data)
drag.setMimeData(mime_data)
- drop = drag.start()
+ drop = drag.exec()
def createPlot(self, plot, uid, title):
plot.start()
@@ -229,9 +226,7 @@ class MAINWindow(QtGui.QMainWindow):
self.mdiArea.addSubWindow(plot)
plot.setWindowTitle("{0}: {1}".format(title, plot.name()))
- self.connect(plot.qwidget(),
- QtCore.SIGNAL('destroyed(QObject*)'),
- self.destroyPlot)
+ plot.qwidget().destroyed.connect(lambda obj=None, plot=plot: self.destroyPlot(plot=plot)),
# when the plot is updated via drag-and-drop, we need to be
# notified of the new qwidget that's created so we can
@@ -248,15 +243,13 @@ class MAINWindow(QtGui.QMainWindow):
if(p == q):
#plots.remove(p)
#plots.append(q)
- self.connect(q.qwidget(),
- QtCore.SIGNAL('destroyed(QObject*)'),
- self.destroyPlot)
+ q.qwidget().destroyed.connect(lambda obj=None, plot=p: self.destroyPlot(plot=plot))
break
- def destroyPlot(self, obj):
+ def destroyPlot(self, plot):
for plots in self.plots:
for p in plots:
- if p.qwidget() == obj:
+ if p == plot:
plots.remove(p)
break
@@ -302,9 +295,6 @@ class MAINWindow(QtGui.QMainWindow):
data = []
for n in plot.knobnames:
d = knobs[n].value
- # TODO: FIX COMPLEX!
-# if(type(d) == GNURadio.complex):
-# d = [d.re, d.im]
# If it's a byte stream, Python thinks it's a string.
# Unpack and convert to floats for plotting.
@@ -324,57 +314,57 @@ class MAINWindow(QtGui.QMainWindow):
def createActions(self):
- self.newConAct = QtGui.QAction("&New Connection",
- self, shortcut=QtGui.QKeySequence.New,
+ self.newConAct = Qt.QAction("&New Connection",
+ self, shortcut=Qt.QKeySequence.New,
statusTip="Create a new file", triggered=self.newCon)
- self.exitAct = QtGui.QAction("E&xit", self, shortcut="Ctrl+Q",
+ self.exitAct = Qt.QAction("E&xit", self, shortcut="Ctrl+Q",
statusTip="Exit the application",
- triggered=QtGui.qApp.closeAllWindows)
+ triggered=Qt.qApp.closeAllWindows)
- self.closeAct = QtGui.QAction("Cl&ose", self, shortcut="Ctrl+F4",
+ self.closeAct = Qt.QAction("Cl&ose", self, shortcut="Ctrl+F4",
statusTip="Close the active window",
triggered=self.mdiArea.closeActiveSubWindow)
- self.closeAllAct = QtGui.QAction("Close &All", self,
+ self.closeAllAct = Qt.QAction("Close &All", self,
statusTip="Close all the windows",
triggered=self.mdiArea.closeAllSubWindows)
- self.urAct = QtGui.QAction("Update Rate", self, shortcut="F5",
+ self.urAct = Qt.QAction("Update Rate", self, shortcut="F5",
statusTip="Change Update Rate",
triggered=self.updateRateShow)
- qks = QtGui.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_T);
- self.tileAct = QtGui.QAction("&Tile", self,
+ qks = Qt.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_T);
+ self.tileAct = Qt.QAction("&Tile", self,
statusTip="Tile the windows",
triggered=self.mdiArea.tileSubWindows,
shortcut=qks)
- qks = QtGui.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_C);
- self.cascadeAct = QtGui.QAction("&Cascade", self,
+ qks = Qt.QKeySequence(QtCore.Qt.CTRL + QtCore.Qt.Key_C);
+ self.cascadeAct = Qt.QAction("&Cascade", self,
statusTip="Cascade the windows", shortcut=qks,
triggered=self.mdiArea.cascadeSubWindows)
- self.nextAct = QtGui.QAction("Ne&xt", self,
- shortcut=QtGui.QKeySequence.NextChild,
+ self.nextAct = Qt.QAction("Ne&xt", self,
+ shortcut=Qt.QKeySequence.NextChild,
statusTip="Move the focus to the next window",
triggered=self.mdiArea.activateNextSubWindow)
- self.previousAct = QtGui.QAction("Pre&vious", self,
- shortcut=QtGui.QKeySequence.PreviousChild,
+ self.previousAct = Qt.QAction("Pre&vious", self,
+ shortcut=Qt.QKeySequence.PreviousChild,
statusTip="Move the focus to the previous window",
triggered=self.mdiArea.activatePreviousSubWindow)
- self.separatorAct = QtGui.QAction(self)
+ self.separatorAct = Qt.QAction(self)
self.separatorAct.setSeparator(True)
- self.aboutAct = QtGui.QAction("&About", self,
+ self.aboutAct = Qt.QAction("&About", self,
statusTip="Show the application's About box",
triggered=self.about)
- self.aboutQtAct = QtGui.QAction("About &Qt", self,
+ self.aboutQtAct = Qt.QAction("About &Qt", self,
statusTip="Show the Qt library's About box",
- triggered=QtGui.qApp.aboutQt)
+ triggered=Qt.qApp.aboutQt)
def createMenus(self):
self.fileMenu = self.menuBar().addMenu("&File")
@@ -451,22 +441,22 @@ GNU Radio is free software; you can redistribute it and/or modify it under the t
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.\n
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.'''
- QtGui.QMessageBox.about(None, "gr-ctrlport-monitor", about_info)
+ Qt.QMessageBox.about(None, "gr-ctrlport-monitor", about_info)
-class ConInfoDialog(QtGui.QDialog):
+class ConInfoDialog(Qt.QDialog):
def __init__(self, parent=None):
super(ConInfoDialog, self).__init__(parent)
- self.gridLayout = QtGui.QGridLayout(self)
+ self.gridLayout = Qt.QGridLayout(self)
- self.host = QtGui.QLineEdit(self);
- self.port = QtGui.QLineEdit(self);
+ self.host = Qt.QLineEdit(self);
+ self.port = Qt.QLineEdit(self);
self.host.setText("localhost");
self.port.setText("43243");
- self.buttonBox = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel)
+ self.buttonBox = Qt.QDialogButtonBox(Qt.QDialogButtonBox.Ok | Qt.QDialogButtonBox.Cancel)
self.gridLayout.addWidget(self.host);
self.gridLayout.addWidget(self.port);
@@ -483,20 +473,20 @@ class ConInfoDialog(QtGui.QDialog):
self.done(0);
-class UpdaterWindow(QtGui.QDialog):
+class UpdaterWindow(Qt.QDialog):
def __init__(self, key, radio, parent):
- QtGui.QDialog.__init__(self, parent)
+ Qt.QDialog.__init__(self, parent)
self.key = key;
self.radio = radio
self.resize(300,200)
- self.layout = QtGui.QVBoxLayout()
+ self.layout = Qt.QVBoxLayout()
self.props = radio.properties([key])[key]
info = radio.printProperties(self.props)
- self.infoLabel = QtGui.QLabel(info)
+ self.infoLabel = Qt.QLabel(info)
self.layout.addWidget(self.infoLabel)
# Test here to make sure that a 'set' function exists
@@ -508,20 +498,20 @@ class UpdaterWindow(QtGui.QDialog):
if(has_set is False):
- self.cancelButton = QtGui.QPushButton("Ok")
- self.cancelButton.connect(self.cancelButton, QtCore.SIGNAL('clicked()'), self.reject)
+ self.cancelButton = Qt.QPushButton("Ok")
+ self.cancelButton.clicked.connect(self.reject)
- self.buttonlayout = QtGui.QHBoxLayout()
+ self.buttonlayout = Qt.QHBoxLayout()
self.buttonlayout.addWidget(self.cancelButton)
self.layout.addLayout(self.buttonlayout)
else: # we have a set function
- self.textInput = QtGui.QLineEdit()
+ self.textInput = Qt.QLineEdit()
self.layout.addWidget(self.textInput)
- self.applyButton = QtGui.QPushButton("Apply")
- self.setButton = QtGui.QPushButton("OK")
- self.cancelButton = QtGui.QPushButton("Cancel")
+ self.applyButton = Qt.QPushButton("Apply")
+ self.setButton = Qt.QPushButton("OK")
+ self.cancelButton = Qt.QPushButton("Cancel")
rv = radio.getKnobs([key])
val = rv[key].value
@@ -531,19 +521,19 @@ class UpdaterWindow(QtGui.QDialog):
self.textInput.setText(str(val))
self.sv = rv[key]
- self.applyButton.connect(self.applyButton, QtCore.SIGNAL('clicked()'), self._apply)
- self.setButton.connect(self.setButton, QtCore.SIGNAL('clicked()'), self._set)
- self.cancelButton.connect(self.cancelButton, QtCore.SIGNAL('clicked()'), self.reject)
+ self.applyButton.clicked.connect(self._apply)
+ self.setButton.clicked.connect(self._set)
+ self.cancelButton.clicked.connect(self.reject)
self.is_num = ((type(self.sv.value)==float) or (type(self.sv.value)==int))
if(self.is_num):
- self.sliderlayout = QtGui.QHBoxLayout()
+ self.sliderlayout = Qt.QHBoxLayout()
- self.slider = QtGui.QSlider(QtCore.Qt.Horizontal)
+ self.slider = Qt.QSlider(QtCore.Qt.Horizontal)
- self.sliderlayout.addWidget(QtGui.QLabel(str(self.props.min.value)))
+ self.sliderlayout.addWidget(Qt.QLabel(str(self.props.min.value)))
self.sliderlayout.addWidget(self.slider)
- self.sliderlayout.addWidget(QtGui.QLabel(str(self.props.max.value)))
+ self.sliderlayout.addWidget(Qt.QLabel(str(self.props.max.value)))
self.steps = 10000
self.valspan = self.props.max.value - self.props.min.value
@@ -551,13 +541,13 @@ class UpdaterWindow(QtGui.QDialog):
self.slider.setRange(0, 10000)
self._set_slider_value(self.sv.value)
- self.connect(self.slider, QtCore.SIGNAL("sliderReleased()"), self._slide)
+ self.slider.sliderReleased.connect(self._slide)
self.layout.addLayout(self.sliderlayout)
else:
self._set_slider_value = None
- self.buttonlayout = QtGui.QHBoxLayout()
+ self.buttonlayout = Qt.QHBoxLayout()
self.buttonlayout.addWidget(self.applyButton)
self.buttonlayout.addWidget(self.setButton)
self.buttonlayout.addWidget(self.cancelButton)
@@ -570,7 +560,7 @@ class UpdaterWindow(QtGui.QDialog):
self.slider.setValue(self.steps*(val-self.props.min.value)/self.valspan)
def _slide(self):
- val = (self.slider.value()*self.valspan + self.props.min.value)/float(self.steps)
+ val = self.props.min.value + (self.slider.value()/float(self.steps)*self.valspan)
self.textInput.setText(str(val))
def _apply(self):
@@ -602,53 +592,49 @@ class UpdaterWindow(QtGui.QDialog):
self.done(0)
-class MForm(QtGui.QWidget):
+class MForm(Qt.QWidget):
def update(self):
# TODO: revisit this try-except block, figure out what it's doing, and if we need to keep it. at very lease makes debugging dificult
- if True: #try:
+ try:
st = time.time();
knobs = self.radioclient.getKnobs([])
ft = time.time();
latency = ft-st;
self.parent.statusBar().showMessage("Current GNU Radio Control Port Query Latency: %f ms"%(latency*1000))
-# except Exception, e:
-# sys.stderr.write("ctrlport-monitor: radio.get threw exception ({0}).\n".format(e))
-# if(type(self.parent) is MAINWindow):
-# # Find window of connection
-# remove = []
-# for p in self.parent.mdiArea.subWindowList():
-# if self.parent.conns[self.uid] == p.widget():
-# remove.append(p)
-#
-# # Find any subplot windows of connection
-# for p in self.parent.mdiArea.subWindowList():
-# for plot in self.parent.plots[self.uid]:
-# if plot.qwidget() == p.widget():
-# remove.append(p)
-#
-# # Clean up local references to these
-# self.parent.conns.remove(self.parent.conns[self.uid])
-# self.parent.plots.remove(self.parent.plots[self.uid])
-#
-# # Remove subwindows for connection and plots
-# for r in remove:
-# self.parent.mdiArea.removeSubWindow(r)
-#
-# # Clean up self
-# self.close()
-# else:
-# sys.exit(1)
-# return
+ except Exception as e:
+ sys.stderr.write("ctrlport-monitor: radio.get threw exception ({0}).\n".format(e))
+ if(type(self.parent) is MAINWindow):
+ # Find window of connection
+ remove = []
+ for p in self.parent.mdiArea.subWindowList():
+ if self.parent.conns[self.uid] == p.widget():
+ remove.append(p)
+
+ # Find any subplot windows of connection
+ for p in self.parent.mdiArea.subWindowList():
+ for plot in self.parent.plots[self.uid]:
+ if plot.qwidget() == p.widget():
+ remove.append(p)
+
+ # Clean up local references to these
+ self.parent.conns.remove(self.parent.conns[self.uid])
+ self.parent.plots.remove(self.parent.plots[self.uid])
+
+ # Remove subwindows for connection and plots
+ for r in remove:
+ self.parent.mdiArea.removeSubWindow(r)
+
+ # Clean up self
+ self.close()
+ else:
+ sys.exit(1)
+ return
tableitems = knobs.keys()
#UPDATE TABLE:
- #try:
self.table.updateItems(knobs, self.knobprops)
- #except:
- # self.knobprops = self.radioclient.properties([])
- # print("knobsprops1:", len(self.knobprops))
#UPDATE PLOTS
self.parent.update(knobs, self.uid)
@@ -658,32 +644,26 @@ class MForm(QtGui.QWidget):
super(MForm, self).__init__()
self.radioclient = radioclient
-# print("before radioclient.getHost()", radioclient.getHost(), radioclient.getPort(), "prompt", prompt)
if(dialogprompt or radioclient.getHost() is None or radioclient.getPort() is None):
-# print("before ConInfoDialog")
askinfo = ConInfoDialog(self);
if askinfo.exec_():
host = str(askinfo.host.text());
port = str(askinfo.port.text());
-# print("before radioclient.newConnection host: %s port: %s"%(host,port))
- newradio = self.radioclient.newConnection(host, port)
- if newradio is None:
- print("Error making a %s connection to %s:%s from %s" % (radioclient.getName(), host, port, radioclient))
+ self.radioclient = self.radioclient.newConnection(host, port)
+ if self.radioclient is None:
+ print("Cannot connect to %s:%s" % (host, port))
else:
- self.radioclient = newradio
-
- else:
- self.radioclient = Nonclient = None
- return
+ print("Connected to %s:%s" % (host, port))
+ if self.radioclient is None:
+ return
self.uid = uid
self.parent = parent
- self.horizontalLayout = QtGui.QVBoxLayout(self)
- self.gridLayout = QtGui.QGridLayout()
+ self.horizontalLayout = Qt.QVBoxLayout(self)
+ self.gridLayout = Qt.QGridLayout()
self.knobprops = self.radioclient.properties([])
- #print("props5:", self.knobprops)
self.parent.knobprops.append(self.knobprops)
self.resize(775,500)
self.timer = QtCore.QTimer()
@@ -693,9 +673,9 @@ class MForm(QtGui.QWidget):
# make table
self.table = GrDataPlotterValueTable(uid, self, 0, 0, 400, 200)
- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
+ sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Preferred, Qt.QSizePolicy.Preferred)
self.table.treeWidget.setSizePolicy(sizePolicy)
- self.table.treeWidget.setEditTriggers(QtGui.QAbstractItemView.EditKeyPressed)
+ self.table.treeWidget.setEditTriggers(Qt.QAbstractItemView.EditKeyPressed)
self.table.treeWidget.setSortingEnabled(True)
self.table.treeWidget.setDragEnabled(True)
@@ -703,7 +683,7 @@ class MForm(QtGui.QWidget):
self.horizontalLayout.addWidget(self.table.treeWidget)
# set up timer
- self.connect(self.timer, QtCore.SIGNAL('timeout()'), self.update)
+ self.timer.timeout.connect(self.update)
self.updateRate = updateRate;
self.timer.start(self.updateRate)
@@ -712,14 +692,9 @@ class MForm(QtGui.QWidget):
self.table.treeWidget.customContextMenuRequested.connect(self.openMenu)
# Set up double-click to launch default plotter
- self.connect(self.table.treeWidget,
- QtCore.SIGNAL('itemDoubleClicked(QTreeWidgetItem*, int)'),
- self.parent.newSub);
-
+ self.table.treeWidget.itemDoubleClicked.connect(self.parent.newSub)
# Allow drag/drop event from table item to plotter
- self.connect(self.table.treeWidget,
- QtCore.SIGNAL('itemPressed(QTreeWidgetItem*, int)'),
- self.parent.startDrag)
+ self.table.treeWidget.itemPressed.connect(self.parent.startDrag)
def openMenu(self, pos):
index = self.table.treeWidget.selectedIndexes()
@@ -763,7 +738,7 @@ def get_minmax(p):
class MyApp(object):
def __init__(self, args):
from gnuradio.ctrlport.GNURadioControlPortClient import GNURadioControlPortClient
- GNURadioControlPortClient(args, 'thrift', self.run, QtGui.QApplication(sys.argv).exec_)
+ GNURadioControlPortClient(args, 'thrift', self.run, Qt.QApplication(sys.argv).exec_)
def run(self, client):
MAINWindow(client).show()
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/gr-perf-monitorx b/gnuradio-runtime/python/gnuradio/ctrlport/gr-perf-monitorx
index 070eba96cf..9f974bc53c 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/gr-perf-monitorx
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/gr-perf-monitorx
@@ -346,7 +346,7 @@ class DataTable(QtGui.QWidget):
# set up timer
self.timer = QtCore.QTimer()
- self.connect(self.timer, QtCore.SIGNAL('timeout()'), self.update)
+ self.timer.timeout.connect(self.update)
self.timer.start(500)
for i in range(0,len(nodes)):
@@ -817,7 +817,7 @@ class MForm(QtGui.QWidget):
# set up timer
self.timer = QtCore.QTimer()
- self.connect(self.timer, QtCore.SIGNAL('timeout()'), self.update)
+ self.timer.timeout.connect(self.update)
self.timer.start(1000)
# Set up mouse callback functions to move blocks around.
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/monitor.py b/gnuradio-runtime/python/gnuradio/ctrlport/monitor.py
index 0cc05be63e..3215fa5b26 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/monitor.py
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/monitor.py
@@ -47,10 +47,8 @@ class monitor(object):
def start(self):
print("monitor::endpoints() = %s" % (gr.rpcmanager_get().endpoints()))
try:
- cmd = map(lambda a: [self.tool,
- re.search(r"-h (\S+|\d+\.\d+\.\d+\.\d+)",a).group(1),
- re.search(r"-p (\d+)",a).group(1)],
- gr.rpcmanager_get().endpoints())[0]
+ ep = gr.rpcmanager_get().endpoints()[0]
+ cmd = [self.tool, re.search(r"-h (\S+|\d+\.\d+\.\d+\.\d+)", ep).group(1), re.search(r"-p (\d+)", ep).group(1)]
print("running: %s"%(str(cmd)))
self.proc = subprocess.Popen(cmd);
self.started = True