pythonでgnuradio その24

# 概要
pythonでgnuradioやってみた。
練習問題やってみた。

# 練習問題
dialとcompassを使え。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/c8e07826-ba2f-9c0a-f41f-7d6a7767468b.png)


# サンプルコード

```

from PyQt5 import Qt
from gnuradio import qtgui
from gnuradio import blocks
from gnuradio import gr
from gnuradio.filter import firdes
from gnuradio.fft import window
import sys
import signal
from gnuradio.eng_arg import eng_float, intx
from gnuradio import eng_notation

class ui1(gr.top_block, Qt.QWidget):
	def __init__(self):
		gr.top_block.__init__(self, "Not titled yet", catch_exceptions = True)
		Qt.QWidget.__init__(self)
		self.setWindowTitle("Not titled yet")
		qtgui.util.check_set_qss()
		try:
			self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
		except BaseException as exc:
			print(f"Qt GUI: Could not set Icon: {str(exc)}", file = sys.stderr)
		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", "ui1")
		try:
			geometry = self.settings.value("geometry")
			if geometry:
				self.restoreGeometry(geometry)
		except BaseException as exc:
			print(f"Qt GUI: Could not restore geometry: {str(exc)}", file = sys.stderr)
		self.variable_qtgui_dial_control_0 = variable_qtgui_dial_control_0 = 0
		self.samp_rate = samp_rate = 32000
		if "int" == "int":
			isFloat = False
			scaleFactor = 1
		else:
			isFloat = True
			scaleFactor = 1
		_variable_qtgui_dial_control_0_dial_control = qtgui.GrDialControl('angle', self, 0, 360, 0, "default", self.set_variable_qtgui_dial_control_0, isFloat, scaleFactor, 100, True, "'value'")
		self.variable_qtgui_dial_control_0 = _variable_qtgui_dial_control_0_dial_control
		self.top_layout.addWidget(_variable_qtgui_dial_control_0_dial_control)
		self.qtgui_compass_0 = self._qtgui_compass_0_win = qtgui.GrCompass('', 250, 0.10, False, 1, True, 1, "default")
		self._qtgui_compass_0_win.setColors("default","red", "black", "black")
		self._qtgui_compass_0 = self._qtgui_compass_0_win
		self.top_layout.addWidget(self._qtgui_compass_0_win)
		self.blocks_throttle2_0 = blocks.throttle(gr.sizeof_gr_complex * 1, samp_rate, True, 0 if "auto" == "auto" else max(int(float(0.1) * samp_rate) if "auto" == "time" else int(0.1), 1) )
		self.blocks_null_source_0 = blocks.null_source(gr.sizeof_gr_complex * 1)
		self.blocks_null_sink_0 = blocks.null_sink(gr.sizeof_gr_complex * 1)
		self.msg_connect((self.variable_qtgui_dial_control_0, 'value'), (self.qtgui_compass_0, 'angle'))
		self.connect((self.blocks_null_source_0, 0), (self.blocks_throttle2_0, 0))
		self.connect((self.blocks_throttle2_0, 0), (self.blocks_null_sink_0, 0))
	def closeEvent(self, event):
		self.settings = Qt.QSettings("GNU Radio", "ui1")
		self.settings.setValue("geometry", self.saveGeometry())
		self.stop()
		self.wait()
		event.accept()
	def get_variable_qtgui_dial_control_0(self):
		return self.variable_qtgui_dial_control_0
	def set_variable_qtgui_dial_control_0(self, variable_qtgui_dial_control_0):
		self.variable_qtgui_dial_control_0 = variable_qtgui_dial_control_0
	def get_samp_rate(self):
		return self.samp_rate
	def set_samp_rate(self, samp_rate):
		self.samp_rate = samp_rate
		self.blocks_throttle2_0.set_sample_rate(self.samp_rate)

def main(top_block_cls = ui1, options = None):
	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()





```

以上。