Statistics
| Branch: | Tag: | Revision:

root / gr-qtgui / apps / pyqt_time_c.py @ 5af704f3

History | View | Annotate | Download (5.4 kB)

1
#!/usr/bin/env python
2
3
from gnuradio import gr
4
from gnuradio import qtgui
5
from PyQt4 import QtGui, QtCore
6
import sys, sip
7
8
class dialog_box(QtGui.QWidget):
9
    def __init__(self, display, control):
10
        QtGui.QWidget.__init__(self, None)
11
        self.setWindowTitle('PyQt Test GUI')
12
13
        self.boxlayout = QtGui.QBoxLayout(QtGui.QBoxLayout.LeftToRight, self)
14
        self.boxlayout.addWidget(display, 1)
15
        self.boxlayout.addWidget(control)
16
17
        self.resize(800, 500)
18
19
class control_box(QtGui.QWidget):
20
    def __init__(self, parent=None):
21
        QtGui.QWidget.__init__(self, parent)
22
        self.setWindowTitle('Control Panel')
23
24
        self.setToolTip('Control the signals')
25
        QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish', 10))
26
27
        self.layout = QtGui.QFormLayout(self)
28
29
        # Control the first signal
30
        self.freq1Edit = QtGui.QLineEdit(self)
31
        self.freq1Edit.setMinimumWidth(100)
32
        self.layout.addRow("Signal 1 Frequency:", self.freq1Edit)
33
        self.connect(self.freq1Edit, QtCore.SIGNAL("editingFinished()"),
34
                     self.freq1EditText)
35
36
        self.amp1Edit = QtGui.QLineEdit(self)
37
        self.amp1Edit.setMinimumWidth(100)
38
        self.layout.addRow("Signal 1 Amplitude:", self.amp1Edit)
39
        self.connect(self.amp1Edit, QtCore.SIGNAL("editingFinished()"),
40
                     self.amp1EditText)
41
42
43
        # Control the second signal
44
        self.freq2Edit = QtGui.QLineEdit(self)
45
        self.freq2Edit.setMinimumWidth(100)
46
        self.layout.addRow("Signal 2 Frequency:", self.freq2Edit)
47
        self.connect(self.freq2Edit, QtCore.SIGNAL("editingFinished()"),
48
                     self.freq2EditText)
49
50
51
        self.amp2Edit = QtGui.QLineEdit(self)
52
        self.amp2Edit.setMinimumWidth(100)
53
        self.layout.addRow("Signal 2 Amplitude:", self.amp2Edit)
54
        self.connect(self.amp2Edit, QtCore.SIGNAL("editingFinished()"),
55
                     self.amp2EditText)
56
57
        self.quit = QtGui.QPushButton('Close', self)
58
        self.quit.setMinimumWidth(100)
59
        self.layout.addWidget(self.quit)
60
61
        self.connect(self.quit, QtCore.SIGNAL('clicked()'),
62
                     QtGui.qApp, QtCore.SLOT('quit()'))
63
64
    def attach_signal1(self, signal):
65
        self.signal1 = signal
66
        self.freq1Edit.setText(QtCore.QString("%1").arg(self.signal1.frequency()))
67
        self.amp1Edit.setText(QtCore.QString("%1").arg(self.signal1.amplitude()))
68
69
    def attach_signal2(self, signal):
70
        self.signal2 = signal
71
        self.freq2Edit.setText(QtCore.QString("%1").arg(self.signal2.frequency()))
72
        self.amp2Edit.setText(QtCore.QString("%1").arg(self.signal2.amplitude()))
73
74
    def freq1EditText(self):
75
        try:
76
            newfreq = float(self.freq1Edit.text())
77
            self.signal1.set_frequency(newfreq)
78
        except ValueError:
79
            print "Bad frequency value entered"
80
81
    def amp1EditText(self):
82
        try:
83
            newamp = float(self.amp1Edit.text())
84
            self.signal1.set_amplitude(newamp)
85
        except ValueError:
86
            print "Bad amplitude value entered"
87
88
        
89
    def freq2EditText(self):
90
        try:
91
            newfreq = float(self.freq2Edit.text())
92
            self.signal2.set_frequency(newfreq)
93
        except ValueError:
94
            print "Bad frequency value entered"
95
96
    def amp2EditText(self):
97
        try:
98
            newamp = float(self.amp2Edit.text())
99
            self.signal2.set_amplitude(newamp)
100
        except ValueError:
101
            print "Bad amplitude value entered"
102
103
104
class my_top_block(gr.top_block):
105
    def __init__(self):
106
        gr.top_block.__init__(self)
107
108
        Rs = 8000
109
        f1 = 100
110
        f2 = 200
111
112
        npts = 2048
113
114
        self.qapp = QtGui.QApplication(sys.argv)
115
        
116
        src1 = gr.sig_source_c(Rs, gr.GR_SIN_WAVE, f1, 0.1, 0)
117
        src2 = gr.sig_source_c(Rs, gr.GR_SIN_WAVE, f2, 0.1, 0)
118
        src  = gr.add_cc()
119
        channel = gr.channel_model(0.01)
120
        thr = gr.throttle(gr.sizeof_gr_complex, 100*npts)
121
        self.snk1 = qtgui.time_sink_c(npts, Rs,
122
                                      "Complex Time Example", 3)
123
124
        self.connect(src1, (src,0))
125
        self.connect(src2, (src,1))
126
        self.connect(src,  channel, thr, (self.snk1, 0))
127
        self.connect(src1, (self.snk1, 1))
128
        self.connect(src2, (self.snk1, 2))
129
130
        self.ctrl_win = control_box()
131
        self.ctrl_win.attach_signal1(src1)
132
        self.ctrl_win.attach_signal2(src2)
133
134
        # Get the reference pointer to the SpectrumDisplayForm QWidget
135
        pyQt  = self.snk1.pyqwidget()
136
137
        # Wrap the pointer as a PyQt SIP object
138
        # This can now be manipulated as a PyQt4.QtGui.QWidget
139
        pyWin = sip.wrapinstance(pyQt, QtGui.QWidget)
140
141
        # Example of using signal/slot to set the title of a curve
142
        pyWin.connect(pyWin, QtCore.SIGNAL("setTitle(int, QString)"),
143
                      pyWin, QtCore.SLOT("setTitle(int, QString)"))
144
        pyWin.emit(QtCore.SIGNAL("setTitle(int, QString)"), 0, "Re{sum}")
145
        self.snk1.set_title(1, "Im{Sum}")
146
        self.snk1.set_title(2, "Re{src1}")
147
        self.snk1.set_title(3, "Im{src1}")
148
        self.snk1.set_title(4, "Re{src2}")
149
        self.snk1.set_title(5, "Im{src2}")
150
151
        # Can also set the color of a curve
152
        #self.snk1.set_color(5, "blue")
153
154
        #pyWin.show()
155
        self.main_box = dialog_box(pyWin, self.ctrl_win)
156
        self.main_box.show()
157
        
158
if __name__ == "__main__":
159
    tb = my_top_block();
160
    tb.start()
161
    tb.qapp.exec_()
162
    tb.stop()
163