Using qt's designer program to build an interface from the .ui file. This makes qt_di...
[debian/gnuradio] / gr-qtgui / src / python / qt_digital.py
1 #!/usr/bin/env python
2
3 from gnuradio import gr, blks2
4 from gnuradio.qtgui import qtgui
5 from PyQt4 import QtGui, QtCore
6 import sys, sip
7 import scipy
8
9 try:
10     from qt_digital_window import Ui_DigitalWindow
11 except ImportError:
12     print "Error: could not find qt_digital_window.py:"
13     print "\t\"pyuic4 qt_digital_window.ui -o qt_digital_window.py\""
14     sys.exit(1)
15
16 class dialog_box(QtGui.QMainWindow):
17     def __init__(self, snkTx, snkRx, channel, parent=None):
18         QtGui.QWidget.__init__(self, parent)
19         self.gui = Ui_DigitalWindow()
20         self.gui.setupUi(self)
21
22         self.channel = channel
23
24         # Add the qtsnk widgets to the hlayout box
25         self.gui.sinkLayout.addWidget(snkTx)
26         self.gui.sinkLayout.addWidget(snkRx)
27
28         # Connect up some signals
29         self.connect(self.gui.noiseEdit, QtCore.SIGNAL("editingFinished()"),
30                      self.noiseEditText)
31         self.connect(self.gui.freqEdit, QtCore.SIGNAL("editingFinished()"),
32                      self.freqEditText)
33         self.connect(self.gui.timeEdit, QtCore.SIGNAL("editingFinished()"),
34                      self.timeEditText)
35         
36     def set_noise(self, noise):
37         self.noise = noise
38         self.gui.noiseEdit.setText(QtCore.QString("%1").arg(self.noise))
39
40     def set_frequency(self, freq):
41         self.freq = freq
42         self.gui.freqEdit.setText(QtCore.QString("%1").arg(self.freq))
43
44     def set_time_offset(self, to):
45         self.timing_offset = to
46         self.gui.timeEdit.setText(QtCore.QString("%1").arg(self.timing_offset))
47
48     def noiseEditText(self):
49         try:
50             noise = self.gui.noiseEdit.text().toDouble()[0]
51             self.channel.set_noise_voltage(noise)
52
53             self.noise = noise
54         except RuntimeError:
55             pass
56
57     def freqEditText(self):
58         try:
59             freq = self.gui.freqEdit.text().toDouble()[0]
60             self.channel.set_frequency_offset(freq)
61
62             self.freq = freq
63         except RuntimeError:
64             pass
65
66     def timeEditText(self):
67         try:
68             to = self.gui.timeEdit.text().toDouble()[0]
69             self.channel.set_timing_offset(to)
70
71             self.timing_offset = to
72         except RuntimeError:
73             pass
74
75
76 class my_top_block(gr.top_block):
77     def __init__(self):
78         gr.top_block.__init__(self)
79
80         self.qapp = QtGui.QApplication(sys.argv)
81
82         sps = 2
83         excess_bw = 0.35
84         gray_code = True
85         
86         fftsize = 2048
87
88         data = scipy.random.randint(0, 255, 1000)
89         src = gr.vector_source_b(data, True)
90         mod = blks2.dqpsk_mod(sps, excess_bw, gray_code, False, False)
91
92         rrctaps = gr.firdes.root_raised_cosine(1, sps, 1, excess_bw, 21)
93         rx_rrc = gr.fir_filter_ccf(sps, rrctaps)
94
95         noise = 1e-7
96         fo = 1e-6
97         to = 1.0
98         channel = gr.channel_model(noise, fo, to)
99
100         thr = gr.throttle(gr.sizeof_gr_complex, 10*fftsize)
101         self.snk_tx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, -1/2, 1/2,
102                                    "Tx", True, True, False, True, True)
103
104         self.snk_rx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, -1/2, 1/2,
105                                    "Rx", True, True, False, True, True)
106
107         self.connect(src, mod, channel, self.snk_tx)
108         self.connect(channel, rx_rrc, thr, self.snk_rx)
109         
110         pyTxQt  = self.snk_tx.pyqwidget()
111         pyTx = sip.wrapinstance(pyTxQt, QtGui.QWidget)
112
113         pyRxQt  = self.snk_rx.pyqwidget()
114         pyRx = sip.wrapinstance(pyRxQt, QtGui.QWidget)
115
116         self.main_box = dialog_box(pyTx, pyRx, channel);
117         self.main_box.set_noise(noise)
118         self.main_box.set_frequency(fo)
119         self.main_box.set_time_offset(to)
120         self.main_box.show()
121
122
123     
124 if __name__ == "__main__":
125     tb = my_top_block();
126     tb.start()
127     tb.qapp.exec_()