HI Cinaed and Jeff, Sorry for the late reply. I checked if I had the qt-6 wayland and xwayland installed. Turns out I didn't have the qt6-wayland installed so I installed it. The issue still remained so I disabled wayland and it seemed to work. Just like what you guys saw, I stopped seeing the issue on my flowgraph.
However, I attempted another flowgraph that used QT GUI Label and the issue came back. I have added the new flowgraph I created along with its generated code. I am working from a WIndows machine that has a Virtual Machine with Ubuntu 22.04. One quick question though: Where would I set the export QT_QPA_PLATFORM Thanks, Jose Ruvalcaba On Thu, Nov 24, 2022 at 5:25 PM Cinaed Simson <[email protected]> wrote: > Hi Jose - I can run your script for hours without any issues on both GR > 3.8 and 3.10. > > Have you tried setting > > export QT_QPA_PLATFORM=wayland > > as indicated in the first error message - to see if the script runs longer > then 10 minutes? > > My guess is if you eliminate the first exception the other exceptions will > disappear. > > Are you working from the console of a linux machine - or are you working > from the console of a Windows machine - and then connecting to the a Linux > machine by some method? > > -- Cinaed > > > On Tue, Nov 22, 2022 at 10:23 PM Jose Ruvalcaba <[email protected]> > wrote: > > Hello, >> >> I've been noticing an issue popping out everytime I stop running my >> flowgraph and I was wondering if someone had some insight on it. I have a >> flowgraph where a signal source is connected to a probe signal block. This >> block is constantly updating values and are being displayed using the QT >> GUI Label block. However, after running my flowgraph for about 10 minutes I >> get the following error: >> >> *Executing: /usr/bin/python3 -u >> /home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py* >> >> *Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use >> QT_QPA_PLATFORM=wayland to run on Wayland anyway.* >> >> *Exception in thread Thread-1 (_amp_probe):* >> >> *Traceback (most recent call last):* >> >> * File >> "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", >> line 150, in _amp_probe* >> >> * self.doc.add_next_tick_callback(functools.partial(self.set_amp,val))* >> >> * File "/usr/lib/python3/dist-packages/gnuradio/gr/hier_block2.py", line >> 88, in __getattr__* >> >> * return getattr(self._impl, name)* >> >> *AttributeError: 'gnuradio.gr.gr_python.top_block_pb' object has no >> attribute 'doc'* >> >> *During handling of the above exception, another exception occurred:* >> >> *Traceback (most recent call last):* >> >> * File "/usr/lib/python3.10/threading.py", line 1016, in >> _bootstrap_inner* >> >> * self.run()* >> >> * File "/usr/lib/python3.10/threading.py", line 953, in run* >> >> * self._target(*self._args, **self._kwargs)* >> >> * File >> "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", >> line 152, in _amp_probe* >> >> * self.set_amp(val)* >> >> * File >> "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", >> line 182, in set_amp* >> >> * self.set_variable_qtgui_label_0(self.amp)* >> >> * File >> "/home/spacerfvm/Documents/GNURadio_3.10_flowgraphs/func_probe_test.py", >> line 189, in set_variable_qtgui_label_0* >> >> * Qt.QMetaObject.invokeMethod(self._variable_qtgui_label_0_label, >> "setText", Qt.Q_ARG("QString", >> str(self._variable_qtgui_label_0_formatter(self.variable_qtgui_label_0))))* >> >> *RuntimeError: wrapped C/C++ object of type QLabel has been deleted* >> >> >> It seems that my issue is related to the QT GUI Label block because when >> I remove it and add say QT GUI Number sink, this issue doesn't appear. >> >> Has anyone experienced this issue? If so, would anyone be able to steer >> me in the direction to fix it? I am currently running on Ubuntu 22.04 and >> am running GNU RADIO 3.10.1.1 which I installed using sudo apt-get install. >> I've also attached the flowgraph I am talking about. >> >> Thanks, >> >> Jose Ruvalcaba >> > >
pyephem_fspl_test.grc
Description: Binary data
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# SPDX-License-Identifier: GPL-3.0
#
# GNU Radio Python Flow Graph
# Title: Pyephem FSPL v1.0
# Author: spacerfvm
# GNU Radio version: 3.10.1.1
from packaging.version import Version as StrictVersion
if __name__ == '__main__':
import ctypes
import sys
if sys.platform.startswith('linux'):
try:
x11 = ctypes.cdll.LoadLibrary('libX11.so')
x11.XInitThreads()
except:
print("Warning: failed to XInitThreads()")
from PyQt5 import Qt
from gnuradio import eng_notation
from gnuradio import qtgui
from gnuradio.filter import firdes
import sip
from gnuradio import analog
from gnuradio import blocks
from gnuradio import gr
from gnuradio.fft import window
import sys
import signal
from argparse import ArgumentParser
from gnuradio.eng_arg import eng_float, intx
import pyephemfspltest_epy_block_0 as epy_block_0 # embedded python block
import time
import threading
from gnuradio import qtgui
class pyephemfspltest(gr.top_block, Qt.QWidget):
def __init__(self):
gr.top_block.__init__(self, "Pyephem FSPL v1.0", catch_exceptions=True)
Qt.QWidget.__init__(self)
self.setWindowTitle("Pyephem FSPL v1.0")
qtgui.util.check_set_qss()
try:
self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
except:
pass
self.top_scroll_layout = Qt.QVBoxLayout()
self.setLayout(self.top_scroll_layout)
self.top_scroll = Qt.QScrollArea()
self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
self.top_scroll_layout.addWidget(self.top_scroll)
self.top_scroll.setWidgetResizable(True)
self.top_widget = Qt.QWidget()
self.top_scroll.setWidget(self.top_widget)
self.top_layout = Qt.QVBoxLayout(self.top_widget)
self.top_grid_layout = Qt.QGridLayout()
self.top_layout.addLayout(self.top_grid_layout)
self.settings = Qt.QSettings("GNU Radio", "pyephemfspltest")
try:
if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
self.restoreGeometry(self.settings.value("geometry").toByteArray())
else:
self.restoreGeometry(self.settings.value("geometry"))
except:
pass
##################################################
# Variables
##################################################
self.fspl_test = fspl_test = 0
self.variable_qtgui_label_1 = variable_qtgui_label_1 = fspl_test
self.samp_rate = samp_rate = 32000
self.atten_test = atten_test = -1.0/(10.0**(fspl_test/20.0))
self.TLE_LINE_2 = TLE_LINE_2 = "2 25544 51.6433 79.0852 0005185 353.3514 119.8705 15.49577743364510"
self.TLE_LINE_1 = TLE_LINE_1 = "1 25544U 98067A 22292.82819656 .00008231 00000-0 15426-3 0 9997"
self.Radio_1 = Radio_1 = 100e6
self.Name_of_satellite = Name_of_satellite = "ISS (ZARYA)"
##################################################
# Blocks
##################################################
self.fspl = blocks.probe_signal_f()
self._variable_qtgui_label_1_tool_bar = Qt.QToolBar(self)
if None:
self._variable_qtgui_label_1_formatter = None
else:
self._variable_qtgui_label_1_formatter = lambda x: eng_notation.num_to_str(x)
self._variable_qtgui_label_1_tool_bar.addWidget(Qt.QLabel("Uplink FSPL (dB) = "))
self._variable_qtgui_label_1_label = Qt.QLabel(str(self._variable_qtgui_label_1_formatter(self.variable_qtgui_label_1)))
self._variable_qtgui_label_1_tool_bar.addWidget(self._variable_qtgui_label_1_label)
self.top_grid_layout.addWidget(self._variable_qtgui_label_1_tool_bar, 3, 0, 1, 1)
for r in range(3, 4):
self.top_grid_layout.setRowStretch(r, 1)
for c in range(0, 1):
self.top_grid_layout.setColumnStretch(c, 1)
self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c(
1024, #size
window.WIN_BLACKMAN_hARRIS, #wintype
0, #fc
samp_rate, #bw
"", #name
1,
None # parent
)
self.qtgui_freq_sink_x_0.set_update_time(0.10)
self.qtgui_freq_sink_x_0.set_y_axis(-140, 10)
self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB')
self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "")
self.qtgui_freq_sink_x_0.enable_autoscale(True)
self.qtgui_freq_sink_x_0.enable_grid(True)
self.qtgui_freq_sink_x_0.set_fft_average(1.0)
self.qtgui_freq_sink_x_0.enable_axis_labels(True)
self.qtgui_freq_sink_x_0.enable_control_panel(False)
self.qtgui_freq_sink_x_0.set_fft_window_normalized(False)
labels = ['Source', 'Source with Atten', '', '', '',
'', '', '', '', '']
widths = [1, 1, 1, 1, 1,
1, 1, 1, 1, 1]
colors = ["blue", "red", "green", "black", "cyan",
"magenta", "yellow", "dark red", "dark green", "dark blue"]
alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0]
for i in range(1):
if len(labels[i]) == 0:
self.qtgui_freq_sink_x_0.set_line_label(i, "Data {0}".format(i))
else:
self.qtgui_freq_sink_x_0.set_line_label(i, labels[i])
self.qtgui_freq_sink_x_0.set_line_width(i, widths[i])
self.qtgui_freq_sink_x_0.set_line_color(i, colors[i])
self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i])
self._qtgui_freq_sink_x_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0.qwidget(), Qt.QWidget)
self.top_layout.addWidget(self._qtgui_freq_sink_x_0_win)
def _fspl_test_probe():
while True:
val = self.fspl.level()
try:
try:
self.doc.add_next_tick_callback(functools.partial(self.set_fspl_test,val))
except AttributeError:
self.set_fspl_test(val)
except AttributeError:
pass
time.sleep(1.0 / (10))
_fspl_test_thread = threading.Thread(target=_fspl_test_probe)
_fspl_test_thread.daemon = True
_fspl_test_thread.start()
self.epy_block_0 = epy_block_0.blk(Event='None', frequency=Radio_1, tle_line_1=Name_of_satellite, tle_line_2=TLE_LINE_1, tle_line_3=TLE_LINE_2)
self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True)
self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(atten_test)
self.analog_sig_source_x_0 = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, 1000, 1, 0, 0)
##################################################
# Connections
##################################################
self.connect((self.analog_sig_source_x_0, 0), (self.blocks_throttle_0, 0))
self.connect((self.blocks_multiply_const_vxx_0, 0), (self.qtgui_freq_sink_x_0, 0))
self.connect((self.blocks_throttle_0, 0), (self.blocks_multiply_const_vxx_0, 0))
self.connect((self.epy_block_0, 0), (self.fspl, 0))
def closeEvent(self, event):
self.settings = Qt.QSettings("GNU Radio", "pyephemfspltest")
self.settings.setValue("geometry", self.saveGeometry())
self.stop()
self.wait()
event.accept()
def get_fspl_test(self):
return self.fspl_test
def set_fspl_test(self, fspl_test):
self.fspl_test = fspl_test
self.set_atten_test(-1.0/(10.0**(self.fspl_test/20.0)))
self.set_variable_qtgui_label_1(self.fspl_test)
def get_variable_qtgui_label_1(self):
return self.variable_qtgui_label_1
def set_variable_qtgui_label_1(self, variable_qtgui_label_1):
self.variable_qtgui_label_1 = variable_qtgui_label_1
Qt.QMetaObject.invokeMethod(self._variable_qtgui_label_1_label, "setText", Qt.Q_ARG("QString", str(self._variable_qtgui_label_1_formatter(self.variable_qtgui_label_1))))
def get_samp_rate(self):
return self.samp_rate
def set_samp_rate(self, samp_rate):
self.samp_rate = samp_rate
self.analog_sig_source_x_0.set_sampling_freq(self.samp_rate)
self.blocks_throttle_0.set_sample_rate(self.samp_rate)
self.qtgui_freq_sink_x_0.set_frequency_range(0, self.samp_rate)
def get_atten_test(self):
return self.atten_test
def set_atten_test(self, atten_test):
self.atten_test = atten_test
self.blocks_multiply_const_vxx_0.set_k(self.atten_test)
def get_TLE_LINE_2(self):
return self.TLE_LINE_2
def set_TLE_LINE_2(self, TLE_LINE_2):
self.TLE_LINE_2 = TLE_LINE_2
self.epy_block_0.tle_line_3 = self.TLE_LINE_2
def get_TLE_LINE_1(self):
return self.TLE_LINE_1
def set_TLE_LINE_1(self, TLE_LINE_1):
self.TLE_LINE_1 = TLE_LINE_1
self.epy_block_0.tle_line_2 = self.TLE_LINE_1
def get_Radio_1(self):
return self.Radio_1
def set_Radio_1(self, Radio_1):
self.Radio_1 = Radio_1
self.epy_block_0.frequency = self.Radio_1
def get_Name_of_satellite(self):
return self.Name_of_satellite
def set_Name_of_satellite(self, Name_of_satellite):
self.Name_of_satellite = Name_of_satellite
self.epy_block_0.tle_line_1 = self.Name_of_satellite
def main(top_block_cls=pyephemfspltest, options=None):
if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
style = gr.prefs().get_string('qtgui', 'style', 'raster')
Qt.QApplication.setGraphicsSystem(style)
qapp = Qt.QApplication(sys.argv)
tb = top_block_cls()
tb.start()
tb.show()
def sig_handler(sig=None, frame=None):
tb.stop()
tb.wait()
Qt.QApplication.quit()
signal.signal(signal.SIGINT, sig_handler)
signal.signal(signal.SIGTERM, sig_handler)
timer = Qt.QTimer()
timer.start(500)
timer.timeout.connect(lambda: None)
qapp.exec_()
if __name__ == '__main__':
main()
