3 from gnuradio import gr, blks2
4 from gnuradio.qtgui import qtgui
5 from PyQt4 import QtGui, QtCore
8 class dialog_box(QtGui.QWidget):
9 def __init__(self, display, control):
10 QtGui.QWidget.__init__(self, None)
11 self.setWindowTitle('PyQt Test GUI')
13 self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
14 self.boxlayout.addWidget(display, 1)
15 self.boxlayout.addWidget(control)
19 class control_box(QtGui.QWidget):
20 def __init__(self, parent=None):
21 QtGui.QWidget.__init__(self, parent)
22 self.setWindowTitle('Control Panel')
24 self.setToolTip('Control the signals')
25 QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
27 self.layout = QtGui.QFormLayout(self)
29 # Control the first signal
30 self.freq1Edit = QtGui.QLineEdit(self)
31 self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
32 self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
35 self.amp1Edit = QtGui.QLineEdit(self)
36 self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
37 self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
41 # Control the second signal
42 self.freq2Edit = QtGui.QLineEdit(self)
43 self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
44 self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
48 self.amp2Edit = QtGui.QLineEdit(self)
49 self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
50 self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
53 self.quit = QtGui.QPushButton('Close', self)
54 self.layout.addWidget(self.quit)
56 self.connect(self.quit, QtCore.SIGNAL('clicked()'),
57 QtGui.qApp, QtCore.SLOT('quit()'))
59 def attach_signal1(self, signal):
61 self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
62 self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
64 def attach_signal2(self, signal):
66 self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
67 self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
69 def freq1EditText(self):
71 newfreq = float(self.freq1Edit.text())
72 self.signal1.set_frequency(newfreq)
74 print "Bad frequency value entered"
76 def amp1EditText(self):
78 newamp = float(self.amp1Edit.text())
79 self.signal1.set_amplitude(newamp)
81 print "Bad amplitude value entered"
84 def freq2EditText(self):
86 newfreq = float(self.freq2Edit.text())
87 self.signal2.set_frequency(newfreq)
89 print "Bad frequency value entered"
91 def amp2EditText(self):
93 newamp = float(self.amp2Edit.text())
94 self.signal2.set_amplitude(newamp)
96 print "Bad amplitude value entered"
99 class my_top_block(gr.top_block):
101 gr.top_block.__init__(self)
109 self.qapp = QtGui.QApplication(sys.argv)
111 src1 = gr.sig_source_f(Rs, gr.GR_SIN_WAVE, f1, 0.1, 0)
112 src2 = gr.sig_source_f(Rs, gr.GR_SIN_WAVE, f2, 0.1, 0)
114 thr = gr.throttle(gr.sizeof_float, 100*fftsize)
115 self.snk1 = qtgui.sink_f(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
117 "Float Signal Example",
118 True, True, False, True, False)
120 self.connect(src1, (src,0))
121 self.connect(src2, (src,1))
122 self.connect(src, thr, self.snk1)
124 self.ctrl_win = control_box()
125 self.ctrl_win.attach_signal1(src1)
126 self.ctrl_win.attach_signal2(src2)
128 # Get the reference pointer to the SpectrumDisplayForm QWidget
129 pyQt = self.snk1.pyqwidget()
131 # Wrap the pointer as a PyQt SIP object
132 # This can now be manipulated as a PyQt4.QtGui.QWidget
133 pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
135 self.main_box = dialog_box(pyWin, self.ctrl_win)
139 if __name__ == "__main__":