以下「Usig QT Sinks」の利用方法をまとめた。
中心は、コードの解説となる。
(元記事の表示ソースはライブラリ構造が変わっているため正常動作しない)
http://www.trondeau.com/s/qt_basics.py
QtSink利用方法:
QtGui、sys、sisをインポートし、
4.from PyQt4 import QtGui
5.import sys, sis
QtGui.QApplicationをインスタンス化、
11.self.qapp = QtGui.QApplication(sys.argv)
qtsnkインタンスを生成、
18.self.qtsnk = qtgui.sink_c(fftsize, filter.firdes.WIN_BLACKMAN_hARRIS,
SIP(PythonをC++とインターフェイスするためのツール)をインスタンス化、
27.pyWin = sip.wrapinstance(self.qtsnk.pyqwidget(), QtGui.QWidget
ウィンドウを表示、
28.pyWin.show()
QtGui.QApplicationインスタンスを実行。
32.mytb.qapp.exec_()
コード:
- #!/usr/bin/env python
- from gnuradio import gr, analog, blocks
- from gnuradio import filter, qtgui
- from PyQt4 import QtGui
- import sys, sip
- class qt_top_block(gr.top_block):
- def __init__(self):
- gr.top_block.__init__(self)
- Rs = 1
- fftsize = 2048
- self.qapp = QtGui.QApplication(sys.argv)
- self.src0 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, 0.01, 1)
- self.src1 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, 0.10, 0.1)
- self.noise = analog.noise_source_c(analog.GR_GAUSSIAN, 0.1)
- self.add = blocks.add_cc()
- self.thr = blocks.throttle(gr.sizeof_gr_complex, 10e5)
- self.snk = blocks.null_sink(gr.sizeof_gr_complex)
- self.qtsnk = qtgui.sink_c(fftsize, filter.firdes.WIN_BLACKMAN_hARRIS,
- 0, Rs,
- "Complex Signal Example",
- True, True, True, False)
- self.connect(self.src0, (self.add,0))
- self.connect(self.src1, (self.add,1))
- self.connect(self.noise, (self.add,2))
- self.connect(self.add, self.snk)
- self.connect(self.add, self.thr, self.qtsnk)
- pyWin = sip.wrapinstance(self.qtsnk.pyqwidget(), QtGui.QWidget)
- pyWin.show()
- def main():
- mytb = qt_top_block()
- mytb.start()
- mytb.qapp.exec_()
- mytb.stop()
- if __name__ == "__main__":
- main()