Qt Sinksの利用方法(解説)

以下「Usig QT Sinks」の利用方法をまとめた。

中心は、コードの解説となる。

(元記事の表示ソースはライブラリ構造が変わっているため正常動作しない)

http://www.trondeau.com/s/qt_basics.py

 

www.trondeau.com

 

 

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(PythonC++インターフェイスするためのツール)をインスタンス化、

 27.pyWin = sip.wrapinstance(self.qtsnk.pyqwidget(), QtGui.QWidget

ウィンドウを表示、

 28.pyWin.show()

QtGui.QApplicationインスタンスを実行。

 32.mytb.qapp.exec_()

 

コード:

  1. #!/usr/bin/env python
  2. from gnuradio import gr, analog, blocks
  3. from gnuradio import filter, qtgui
  4. from PyQt4 import QtGui
  5. import sys, sip
  6. class qt_top_block(gr.top_block):
  7. def __init__(self):
  8. gr.top_block.__init__(self)
  9. Rs = 1
  10. fftsize = 2048
  11. self.qapp = QtGui.QApplication(sys.argv)
  12. self.src0 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, 0.01, 1)
  13. self.src1 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, 0.10, 0.1)
  14. self.noise = analog.noise_source_c(analog.GR_GAUSSIAN, 0.1)
  15. self.add = blocks.add_cc()
  16. self.thr = blocks.throttle(gr.sizeof_gr_complex, 10e5)
  17. self.snk = blocks.null_sink(gr.sizeof_gr_complex)
  18. self.qtsnk = qtgui.sink_c(fftsize, filter.firdes.WIN_BLACKMAN_hARRIS,
  19. 0, Rs,
  20. "Complex Signal Example",
  21. True, True, True, False)
  22. self.connect(self.src0, (self.add,0))
  23. self.connect(self.src1, (self.add,1))
  24. self.connect(self.noise, (self.add,2))
  25. self.connect(self.add, self.snk)
  26. self.connect(self.add, self.thr, self.qtsnk)
  27. pyWin = sip.wrapinstance(self.qtsnk.pyqwidget(), QtGui.QWidget)
  28. pyWin.show()
  29. def main():
  30. mytb = qt_top_block()
  31. mytb.start()
  32. mytb.qapp.exec_()
  33. mytb.stop()
  34. if __name__ == "__main__":
  35. main()