# For linux users you might want the follow line as the first line in the file: #!/usr/bin/env python # -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'eq.ui' # # Created by: PyQt5 UI code generator 5.6 # # WARNING! All changes made in this file will be lost! # This is the first program I wrote using Qt Designer. I feel there must be # a way - definitely should be - to specify event handlers in designer and # then to have them in an external file. That way, designer can be run for # fine tuning and modification of the GUI without having to port code back # into this file. If you're reading this and know how to do that, please # drop me an email and enlighten me. :-) Thanks, Mike # # Mike Markowski, mike.ab3ap@gmail.com # 9 May, 2018 from PyQt5 import QtCore, QtGui, QtWidgets import libK3 import os, pathlib, time class Ui_EQ(object): """A GUI is presented with sliders for each of the K3's equalizer bands: 50, 100, 200, 400, 800, 1600, 2400, and 3200 Hz. Choosing modes of rx (receive), ssb (single side band), and am bring up the corresponding EQ of the three stored by the K3. Some presets are also provided as starting points. These can be adjusted and those values added to the file that this program creates in $HOME/.k3eq/presets. The first time an EQ is requested it takes some time for the K3 to read in the settings. From taht point on, the K3 assumes that only it - and not an operator at the front panel - will change the EQ settings. THis speeds up switching between EQs but opens up the chance that an operator makes a change at the front panel that will not be picked by the program. """ def setupUi(self, EQ): self.k3 = libK3.LibK3() self.presets = [[], [], []] # [rx, ssb, am] EQ.setObjectName("AB3AP K3 EQ") EQ.resize(581, 537) self.groupBox = QtWidgets.QGroupBox(EQ) self.groupBox.setGeometry(QtCore.QRect(440, 10, 120, 121)) font = QtGui.QFont() font.setFamily("Times") font.setPointSize(13) font.setBold(True) font.setWeight(75) self.groupBox.setFont(font) self.groupBox.setObjectName("groupBox") self.txWideRadioButton = QtWidgets.QRadioButton(self.groupBox) self.txWideRadioButton.setGeometry(QtCore.QRect(10, 90, 99, 21)) font = QtGui.QFont() font.setFamily("Times") font.setPointSize(13) font.setBold(False) font.setWeight(50) self.txWideRadioButton.setFont(font) self.txWideRadioButton.setObjectName("txWideRadioButton") self.txSsbRadioButton = QtWidgets.QRadioButton(self.groupBox) self.txSsbRadioButton.setGeometry(QtCore.QRect(10, 60, 91, 21)) font = QtGui.QFont() font.setFamily("Times") font.setPointSize(13) font.setBold(False) font.setWeight(50) self.txSsbRadioButton.setFont(font) self.txSsbRadioButton.setObjectName("txSsbRadioButton") self.rxRadioButton = QtWidgets.QRadioButton(self.groupBox) self.rxRadioButton.setGeometry(QtCore.QRect(10, 30, 101, 21)) font = QtGui.QFont() font.setFamily("Times") font.setPointSize(13) font.setBold(False) font.setWeight(50) self.rxRadioButton.setFont(font) self.rxRadioButton.setObjectName("rxRadioButton") self.groupBox_2 = QtWidgets.QGroupBox(EQ) self.groupBox_2.setGeometry(QtCore.QRect(20, 10, 201, 61)) font = QtGui.QFont() font.setFamily("Times") font.setPointSize(13) font.setBold(True) font.setWeight(75) self.groupBox_2.setFont(font) self.groupBox_2.setObjectName("groupBox_2") self.portComboBox = QtWidgets.QComboBox(self.groupBox_2) self.portComboBox.setEnabled(True) self.portComboBox.setGeometry(QtCore.QRect(10, 30, 181, 21)) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.portComboBox.setFont(font) self.portComboBox.setEditable(False) self.portComboBox.setCurrentText("") self.portComboBox.setMaxCount(20) self.portComboBox.setObjectName("portComboBox") self.portComboBox.addItem("K3 serial port...") self.k3 = libK3.LibK3() self.sports = self.k3.findSerialPorts() self.sports.sort() for sport in self.sports: self.portComboBox.addItem(sport) self.portComboBox.currentIndexChanged.connect(self.portHandler) self.groupBox_3 = QtWidgets.QGroupBox(EQ) self.groupBox_3.setGeometry(QtCore.QRect(230, 10, 201, 61)) font = QtGui.QFont() font.setFamily("Times") font.setPointSize(13) font.setBold(True) font.setWeight(75) self.groupBox_3.setFont(font) self.groupBox_3.setObjectName("groupBox_3") self.presetComboBox = QtWidgets.QComboBox(self.groupBox_3) self.presetComboBox.setGeometry(QtCore.QRect(10, 30, 181, 21)) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.presetComboBox.setFont(font) self.presetComboBox.setEditable(False) self.presetComboBox.setCurrentText("") self.presetComboBox.setMaxVisibleItems(10) self.presetComboBox.setMaxCount(10) self.presetComboBox.setObjectName("presetComboBox") homeDir = str(pathlib.Path.home()) # User's home directory. k3Dir = os.path.join(homeDir, '.k3eq') presets = os.path.join(homeDir, '.k3eq', 'presets') self.presetList = [] self.presetComboBox.addItem('EQ presets...') if not os.path.exists(k3Dir): os.makedirs(k3Dir) if not os.path.isfile(presets): f = open(presets, 'w') f.write('SSB|-16|-16|-16| -6| 0| 0| 6| 6|Brown, Jim K9YC)\n') f.write('SSB|-16|-12| -6| 0| 0| 3| 5| 6|Subich Joe W4YV)\n') f.write('SSB|-16|-14| -4| 0| 2| 4| 8| 12|(typ) Heil, Bob K9EID)\n') f.write('SSB|-16|-16|-10| -6| 4| 6| 8| 12|(dx) Heil, Bob K9EID)\n') f.write('AM | 0| 0| 1| 1| 3| 4| 12| 12|Heil, Bob K9EID)\n') f.close() try: f = open(presets, 'r') for line in f: items = line.split('|') mode = items[0].strip() presets = [ int(items[1]), int(items[2]), int(items[3]), int(items[4]), int(items[5]), int(items[6]), int(items[7]), int(items[8])] descr = items[9].strip() self.presetList.append([mode, presets, descr]) f.close() for i in range(len(self.presetList)): self.presetComboBox.addItem( '%s: %s' % (self.presetList[i][0], self.presetList[i][2])) except IOError: print('Creating combo in-place (not from file)') # If no preset file, provide built-in ones. self.presetComboBox.addItem('SSB: Jim Brown K9YC') self.presetComboBox.addItem('SSB: Joe Subich W4TV') self.presetComboBox.addItem('SSB (typ): Bob Heil K9EID') self.presetComboBox.addItem('SSB (dx): Bob Heil K9EID') self.presetComboBox.addItem('AM: Bob Heil K9EID') self.presetComboBox.currentIndexChanged.connect(self.presetHandler) self.groupBox_4 = QtWidgets.QGroupBox(EQ) self.groupBox_4.setGeometry(QtCore.QRect(20, 120, 541, 371)) font = QtGui.QFont() font.setFamily("Times") font.setPointSize(13) font.setBold(True) font.setWeight(75) self.groupBox_4.setFont(font) self.groupBox_4.setObjectName("groupBox_4") self.widget_4 = QtWidgets.QWidget(self.groupBox_4) self.widget_4.setGeometry(QtCore.QRect(20, 50, 451, 281)) font = QtGui.QFont() font.setFamily("Times") font.setPointSize(13) font.setBold(True) font.setWeight(75) self.widget_4.setFont(font) self.widget_4.setObjectName("widget_4") self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget_4) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setObjectName("horizontalLayout") self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.label0050 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label0050.setFont(font) self.label0050.setObjectName("label0050") self.verticalLayout.addWidget(self.label0050) self.slider0050 = QtWidgets.QSlider(self.widget_4) self.slider0050.setMinimum(-16) self.slider0050.setMaximum(16) self.slider0050.setProperty("value", 0) self.slider0050.setOrientation(QtCore.Qt.Vertical) self.slider0050.setTickPosition(QtWidgets.QSlider.TicksBelow) self.slider0050.setTickInterval(1) self.slider0050.setObjectName("slider0050") self.verticalLayout.addWidget(self.slider0050) self.label_2 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label_2.setFont(font) self.label_2.setObjectName("label_2") self.verticalLayout.addWidget(self.label_2) self.horizontalLayout.addLayout(self.verticalLayout) self.verticalLayout_2 = QtWidgets.QVBoxLayout() self.verticalLayout_2.setObjectName("verticalLayout_2") self.label0100 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label0100.setFont(font) self.label0100.setObjectName("label0100") self.verticalLayout_2.addWidget(self.label0100) self.slider0100 = QtWidgets.QSlider(self.widget_4) self.slider0100.setMinimum(-16) self.slider0100.setMaximum(16) self.slider0100.setProperty("value", 0) self.slider0100.setOrientation(QtCore.Qt.Vertical) self.slider0100.setTickPosition(QtWidgets.QSlider.TicksBelow) self.slider0100.setTickInterval(1) self.slider0100.setObjectName("slider0100") self.verticalLayout_2.addWidget(self.slider0100) self.label_3 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label_3.setFont(font) self.label_3.setObjectName("label_3") self.verticalLayout_2.addWidget(self.label_3) self.horizontalLayout.addLayout(self.verticalLayout_2) self.verticalLayout_3 = QtWidgets.QVBoxLayout() self.verticalLayout_3.setObjectName("verticalLayout_3") self.label0200 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label0200.setFont(font) self.label0200.setObjectName("label0200") self.verticalLayout_3.addWidget(self.label0200) self.slider0200 = QtWidgets.QSlider(self.widget_4) self.slider0200.setMinimum(-16) self.slider0200.setMaximum(16) self.slider0200.setProperty("value", 0) self.slider0200.setOrientation(QtCore.Qt.Vertical) self.slider0200.setTickPosition(QtWidgets.QSlider.TicksBelow) self.slider0200.setTickInterval(1) self.slider0200.setObjectName("slider0200") self.verticalLayout_3.addWidget(self.slider0200) self.label_6 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label_6.setFont(font) self.label_6.setObjectName("label_6") self.verticalLayout_3.addWidget(self.label_6) self.horizontalLayout.addLayout(self.verticalLayout_3) self.verticalLayout_4 = QtWidgets.QVBoxLayout() self.verticalLayout_4.setObjectName("verticalLayout_4") self.label0400 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label0400.setFont(font) self.label0400.setObjectName("label0400") self.verticalLayout_4.addWidget(self.label0400) self.slider0400 = QtWidgets.QSlider(self.widget_4) self.slider0400.setMinimum(-16) self.slider0400.setMaximum(16) self.slider0400.setProperty("value", 0) self.slider0400.setOrientation(QtCore.Qt.Vertical) self.slider0400.setTickPosition(QtWidgets.QSlider.TicksBelow) self.slider0400.setTickInterval(1) self.slider0400.setObjectName("slider0400") self.verticalLayout_4.addWidget(self.slider0400) self.label_8 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label_8.setFont(font) self.label_8.setObjectName("label_8") self.verticalLayout_4.addWidget(self.label_8) self.horizontalLayout.addLayout(self.verticalLayout_4) self.verticalLayout_5 = QtWidgets.QVBoxLayout() self.verticalLayout_5.setObjectName("verticalLayout_5") self.label0800 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label0800.setFont(font) self.label0800.setObjectName("label0800") self.verticalLayout_5.addWidget(self.label0800) self.slider0800 = QtWidgets.QSlider(self.widget_4) self.slider0800.setMinimum(-16) self.slider0800.setMaximum(16) self.slider0800.setProperty("value", 0) self.slider0800.setOrientation(QtCore.Qt.Vertical) self.slider0800.setTickPosition(QtWidgets.QSlider.TicksBelow) self.slider0800.setTickInterval(1) self.slider0800.setObjectName("slider0800") self.verticalLayout_5.addWidget(self.slider0800) self.label_10 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label_10.setFont(font) self.label_10.setObjectName("label_10") self.verticalLayout_5.addWidget(self.label_10) self.horizontalLayout.addLayout(self.verticalLayout_5) self.verticalLayout_6 = QtWidgets.QVBoxLayout() self.verticalLayout_6.setObjectName("verticalLayout_6") self.label1600 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label1600.setFont(font) self.label1600.setObjectName("label1600") self.verticalLayout_6.addWidget(self.label1600) self.slider1600 = QtWidgets.QSlider(self.widget_4) self.slider1600.setMinimum(-16) self.slider1600.setMaximum(16) self.slider1600.setProperty("value", 0) self.slider1600.setOrientation(QtCore.Qt.Vertical) self.slider1600.setTickPosition(QtWidgets.QSlider.TicksBelow) self.slider1600.setTickInterval(1) self.slider1600.setObjectName("slider1600") self.verticalLayout_6.addWidget(self.slider1600) self.label_11 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label_11.setFont(font) self.label_11.setObjectName("label_11") self.verticalLayout_6.addWidget(self.label_11) self.horizontalLayout.addLayout(self.verticalLayout_6) self.verticalLayout_7 = QtWidgets.QVBoxLayout() self.verticalLayout_7.setObjectName("verticalLayout_7") self.label2400 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label2400.setFont(font) self.label2400.setObjectName("label2400") self.verticalLayout_7.addWidget(self.label2400) self.slider2400 = QtWidgets.QSlider(self.widget_4) self.slider2400.setMinimum(-16) self.slider2400.setMaximum(16) self.slider2400.setProperty("value", 0) self.slider2400.setOrientation(QtCore.Qt.Vertical) self.slider2400.setTickPosition(QtWidgets.QSlider.TicksBelow) self.slider2400.setTickInterval(1) self.slider2400.setObjectName("slider2400") self.verticalLayout_7.addWidget(self.slider2400) self.label_14 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label_14.setFont(font) self.label_14.setObjectName("label_14") self.verticalLayout_7.addWidget(self.label_14) self.horizontalLayout.addLayout(self.verticalLayout_7) self.verticalLayout_8 = QtWidgets.QVBoxLayout() self.verticalLayout_8.setObjectName("verticalLayout_8") self.label3200 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label3200.setFont(font) self.label3200.setObjectName("label3200") self.verticalLayout_8.addWidget(self.label3200) self.slider3200 = QtWidgets.QSlider(self.widget_4) self.slider3200.setMinimum(-16) self.slider3200.setMaximum(16) self.slider3200.setProperty("value", 0) self.slider3200.setOrientation(QtCore.Qt.Vertical) self.slider3200.setTickPosition(QtWidgets.QSlider.TicksBelow) self.slider3200.setTickInterval(1) self.slider3200.setObjectName("slider3200") self.verticalLayout_8.addWidget(self.slider3200) self.label_16 = QtWidgets.QLabel(self.widget_4) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label_16.setFont(font) self.label_16.setObjectName("label_16") self.verticalLayout_8.addWidget(self.label_16) self.horizontalLayout.addLayout(self.verticalLayout_8) self.label_17 = QtWidgets.QLabel(self.groupBox_4) self.label_17.setGeometry(QtCore.QRect(260, 30, 31, 16)) font = QtGui.QFont() font.setFamily("Times") font.setPointSize(15) font.setBold(True) font.setWeight(75) self.label_17.setFont(font) self.label_17.setObjectName("label_17") self.label_18 = QtWidgets.QLabel(self.groupBox_4) self.label_18.setGeometry(QtCore.QRect(260, 340, 31, 16)) font = QtGui.QFont() font.setFamily("Times") font.setPointSize(15) font.setBold(True) font.setWeight(75) self.label_18.setFont(font) self.label_18.setObjectName("label_18") self.button0dB = QtWidgets.QPushButton(self.groupBox_4) self.button0dB.setGeometry(QtCore.QRect(470, 180, 51, 23)) font = QtGui.QFont() font.setFamily("Times") font.setPointSize(15) font.setBold(True) font.setWeight(75) self.button0dB.setFont(font) self.button0dB.setObjectName("button0dB") self.label_19 = QtWidgets.QLabel(self.groupBox_4) self.label_19.setGeometry(QtCore.QRect(460, 80, 61, 16)) font = QtGui.QFont() font.setFamily("Times") font.setPointSize(15) font.setBold(True) font.setWeight(75) self.label_19.setFont(font) self.label_19.setObjectName("label_19") self.label_20 = QtWidgets.QLabel(self.groupBox_4) self.label_20.setGeometry(QtCore.QRect(460, 290, 51, 16)) font = QtGui.QFont() font.setFamily("Times") font.setPointSize(15) font.setBold(True) font.setWeight(75) self.label_20.setFont(font) self.label_20.setObjectName("label_20") self.exitButton = QtWidgets.QPushButton(EQ) self.exitButton.setGeometry(QtCore.QRect(510, 500, 51, 23)) font = QtGui.QFont() font.setFamily("Times") font.setPointSize(13) font.setBold(True) font.setWeight(75) self.exitButton.setFont(font) self.exitButton.setObjectName("exitButton") self.retranslateUi(EQ) self.presetComboBox.setCurrentIndex(0) self.slider0050.sliderMoved['int'].connect(self.label0050.setNum) self.slider0100.sliderMoved['int'].connect(self.label0100.setNum) self.slider0200.sliderMoved['int'].connect(self.label0200.setNum) self.slider0400.sliderMoved['int'].connect(self.label0400.setNum) self.slider0800.sliderMoved['int'].connect(self.label0800.setNum) self.slider1600.sliderMoved['int'].connect(self.label1600.setNum) self.slider2400.sliderMoved['int'].connect(self.label2400.setNum) self.slider3200.sliderMoved['int'].connect(self.label3200.setNum) self.slider0050.sliderReleased.connect(self.s0050Handler) self.slider0100.sliderReleased.connect(self.s0100Handler) self.slider0200.sliderReleased.connect(self.s0200Handler) self.slider0400.sliderReleased.connect(self.s0400Handler) self.slider0800.sliderReleased.connect(self.s0800Handler) self.slider1600.sliderReleased.connect(self.s1600Handler) self.slider2400.sliderReleased.connect(self.s2400Handler) self.slider3200.sliderReleased.connect(self.s3200Handler) self.exitButton.clicked.connect(self.exitHandler) self.button0dB.clicked.connect(self.zeroHandler) self.rxRadioButton.clicked.connect(self.rxHandler) self.txSsbRadioButton.clicked.connect(self.ssbHandler) self.txWideRadioButton.clicked.connect(self.wideHandler) QtCore.QMetaObject.connectSlotsByName(EQ) self.setUiEnabled(False) def retranslateUi(self, EQ): _translate = QtCore.QCoreApplication.translate EQ.setWindowTitle(_translate("EQ", "AB3AP K3 EQ")) self.groupBox.setTitle(_translate("EQ", "Audio EQ")) self.txWideRadioButton.setText(_translate("EQ", "Tx Wide")) self.txSsbRadioButton.setText(_translate("EQ", "Tx SSB")) self.rxRadioButton.setText(_translate("EQ", "Rx")) self.groupBox_2.setToolTip(_translate("EQ", "Port connected to K3")) self.groupBox_2.setTitle(_translate("EQ", "Serial Port")) self.groupBox_3.setTitle(_translate("EQ", "Presets")) self.groupBox_4.setTitle(_translate("EQ", "Equalizer")) self.label0050.setText(_translate("EQ", "0")) self.label_2.setText(_translate("EQ", "50")) self.label0100.setText(_translate("EQ", "0")) self.label_3.setText(_translate("EQ", "100")) self.label0200.setText(_translate("EQ", "0")) self.label_6.setText(_translate("EQ", "200")) self.label0400.setText(_translate("EQ", "0")) self.label_8.setText(_translate("EQ", "400")) self.label0800.setText(_translate("EQ", "0")) self.label_10.setText(_translate("EQ", "800")) self.label1600.setText(_translate("EQ", "0")) self.label_11.setText(_translate("EQ", "1600")) self.label2400.setText(_translate("EQ", "0")) self.label_14.setText(_translate("EQ", "2400")) self.label3200.setText(_translate("EQ", "0")) self.label_16.setText(_translate("EQ", "3200")) self.label_17.setText(_translate("EQ", "dB")) self.label_18.setText(_translate("EQ", "Hz")) self.button0dB.setText(_translate("EQ", "0 dB")) self.label_19.setText(_translate("EQ", "+16 dB")) self.label_20.setText(_translate("EQ", "-16 dB")) self.exitButton.setText(_translate("EQ", "Exit")) def exitHandler(self): """Handle event when user clicks the Exit button. """ self.k3.disconnect() sys.exit(0) def portHandler(self, i): """Handle event when user makes a choice in the Serial Port combo box. Input: i (int): index of combo box choice. Output: None """ if i == 0: # Just the 'Choose...' message. return self.setUiEnabled(False) self.k3.connect(self.sports[i-1]) # XXX Uses default baud rate. self.k3.setExtendedMode() reply = self.k3.setExtendedMode() if reply == b'': self.setUiEnabled(False) else: self.setUiEnabled(True) def presetHandler(self, i): """Handle event when user makes a choice in the Presets combo box. Input: i (int): index of combo box choice. Output: None """ self.tx = True if i == 0: # Just the 'Choose...' message. return if self.presetList != []: i -= 1 # For proper indeixing into presetList. mode = self.presetList[i][0].lower() if mode == 'ssb': self.k3.setMode('usb') self.txSsbRadioButton.setChecked(True) else: self.k3.setMode('am') self.txWideRadioButton.setChecked(True) vals_dB = self.presetList[i][1] else: if i == 1: # SSB: Jim Brown K9YC self.k3.setMode('usb') self.txSsbRadioButton.setChecked(True) vals_dB = [-16, -16, -16, -6, 0, 0, 6, 6] elif i == 2: # SSB: Joe Subich W4TV: ssb self.k3.setMode('usb') self.txSsbRadioButton.setChecked(True) vals_dB = [-16, -12, -6, 0, 0, 3, 5, 6] elif i == 3: # SSB (typical): Bob Heil K9EID self.k3.setMode('usb') self.txSsbRadioButton.setChecked(True) vals_dB = [-16, -14, -4, 0, 2, 4, 8, 12] elif i == 4: # SSB (contest/dx): Bob Heil K9EID self.k3.setMode('usb') self.txSsbRadioButton.setChecked(True) vals_dB = [-16, -16, -10, -6, 4, 6, 8, 12] elif i == 5: # AM/ESSB: Bob Heil K9EID self.k3.setMode('am') self.txWideRadioButton.setChecked(True) vals_dB = [0, 0, 1, 1, 3, 4, 12, 12] self.k3.setEqBands(self.tx, vals_dB) self.setEqUi(vals_dB) if not self.tx: mi = 0 elif self.k3.getMode() in ['lsb', 'usb', 'cw', 'cwRev']: mi = 1 elif self.k3.getMode() in ['lsbEssb', 'usbEssb', 'am', 'fm']: mi = 2 self.presets[mi] = vals_dB def rxHandler(self): """Handle event when user click Rx radio button. If first time, the K3 rx EQ values are retrieved from the radio. After that, saved values are used. In both cases, those values are used to update the GUI EQ sliders. """ self.tx = False if self.presets[0] == []: self.setUiEnabled(False) # Disable during slooow EQ retrieval. vals_dB = self.k3.getEqSettings(self.tx) self.setUiEnabled(True) # XXX Doesn't work! self.presets[0] = vals_dB else: vals_dB = self.presets[0] self.setEqUi(vals_dB) self.presetComboBox.setCurrentIndex(0) def getGuiBandVals(self): """Retrieve from the GUI the 8 current EQ band values. Input: None Output: (int[]): list of current band settings, each from -16 dB to 16 dB. """ return [self.slider0050.value(), self.slider0100.value(), self.slider0200.value(), self.slider0400.value(), self.slider0800.value(), self.slider1600.value(), self.slider2400.value(), self.slider3200.value()] def s0050Handler(self): """Handle event when 50 Hz slider is moved. """ val_dB = self.slider0050.value() sliderNum = 0 if self.tx: print('tx true') vals_dB = self.getGuiBandVals() self.k3.setEqBands(self.tx, vals_dB) narrow = ['lsb', 'usb', 'cw', 'cwRev'] # Narrow-band voice. mi = 1 if self.k3.getMode() in narrow else 2 else: print('tx true') self.k3.setRxEqBand(sliderNum, val_dB) mi = 0 print('self.presets[%d][%d] = %d' % (mi, sliderNum, val_dB)) self.presets[mi][sliderNum] = val_dB def s0100Handler(self): """Handle event when 100 Hz slider is moved. """ val_dB = self.slider0100.value() sliderNum = 1 if self.tx: vals_dB = self.getGuiBandVals() self.k3.setEqBands(self.tx, vals_dB) narrow = ['lsb', 'usb', 'cw', 'cwRev'] # Narrow-band voice. mi = 1 if self.k3.getMode() in narrow else 2 else: self.k3.setRxEqBand(sliderNum, val_dB) mi = 0 self.presets[mi][sliderNum] = val_dB def s0200Handler(self): """Handle event when 200 Hz slider is moved. """ val_dB = self.slider0200.value() sliderNum = 2 if self.tx: vals_dB = self.getGuiBandVals() self.k3.setEqBands(self.tx, vals_dB) narrow = ['lsb', 'usb', 'cw', 'cwRev'] # Narrow-band voice. mi = 1 if self.k3.getMode() in narrow else 2 else: self.k3.setRxEqBand(sliderNum, val_dB) mi = 0 self.presets[mi][sliderNum] = val_dB def s0400Handler(self): """Handle event when 400 Hz slider is moved. """ val_dB = self.slider0400.value() sliderNum = 3 if self.tx: vals_dB = self.getGuiBandVals() self.k3.setEqBands(self.tx, vals_dB) narrow = ['lsb', 'usb', 'cw', 'cwRev'] # Narrow-band voice. mi = 1 if self.k3.getMode() in narrow else 2 else: self.k3.setRxEqBand(sliderNum, val_dB) mi = 0 self.presets[mi][sliderNum] = val_dB def s0800Handler(self): """Handle event when 800 Hz slider is moved. """ val_dB = self.slider0800.value() sliderNum = 4 if self.tx: vals_dB = self.getGuiBandVals() self.k3.setEqBands(self.tx, vals_dB) narrow = ['lsb', 'usb', 'cw', 'cwRev'] # Narrow-band voice. mi = 1 if self.k3.getMode() in narrow else 2 else: self.k3.setRxEqBand(sliderNum, val_dB) mi = 0 self.presets[mi][sliderNum] = val_dB def s1600Handler(self): """Handle event when 1600 Hz slider is moved. """ val_dB = self.slider1600.value() sliderNum = 5 if self.tx: vals_dB = self.getGuiBandVals() self.k3.setEqBands(self.tx, vals_dB) narrow = ['lsb', 'usb', 'cw', 'cwRev'] # Narrow-band voice. mi = 1 if self.k3.getMode() in narrow else 2 else: self.k3.setRxEqBand(sliderNum, val_dB) mi = 0 self.presets[mi][sliderNum] = val_dB def s2400Handler(self): """Handle event when 2400 Hz slider is moved. """ val_dB = self.slider2400.value() sliderNum = 6 if self.tx: vals_dB = self.getGuiBandVals() self.k3.setEqBands(self.tx, vals_dB) narrow = ['lsb', 'usb', 'cw', 'cwRev'] # Narrow-band voice. mi = 1 if self.k3.getMode() in narrow else 2 else: self.k3.setRxEqBand(sliderNum, val_dB) mi = 0 self.presets[mi][sliderNum] = val_dB def s3200Handler(self): """Handle event when 3200 Hz slider is moved. """ val_dB = self.slider3200.value() sliderNum = 7 if self.tx: vals_dB = self.getGuiBandVals() self.k3.setEqBands(self.tx, vals_dB) narrow = ['lsb', 'usb', 'cw', 'cwRev'] # Narrow-band voice. mi = 1 if self.k3.getMode() in narrow else 2 else: self.k3.setRxEqBand(sliderNum, val_dB) mi = 0 self.presets[mi][sliderNum] = val_dB def setEqUi(self, vals_dB): """Set eight GUI EQ band values. Input: None Output: (int[]): list of current band settings, each from -16 dB to 16 dB. """ # Update values above sliders. self.label0050.setNum(vals_dB[0]) self.label0100.setNum(vals_dB[1]) self.label0200.setNum(vals_dB[2]) self.label0400.setNum(vals_dB[3]) self.label0800.setNum(vals_dB[4]) self.label1600.setNum(vals_dB[5]) self.label2400.setNum(vals_dB[6]) self.label3200.setNum(vals_dB[7]) # Set sliders. self.slider0050.setProperty("value", vals_dB[0]) self.slider0100.setProperty("value", vals_dB[1]) self.slider0200.setProperty("value", vals_dB[2]) self.slider0400.setProperty("value", vals_dB[3]) self.slider0800.setProperty("value", vals_dB[4]) self.slider1600.setProperty("value", vals_dB[5]) self.slider2400.setProperty("value", vals_dB[6]) self.slider3200.setProperty("value", vals_dB[7]) def setUiEnabled(self, enabled): """Gray out or enable much of the GUI. The idea is that if a serial port is not yet chosen, keep the rest of the GUI disabled. Input: enabled (boolean): True/False will enable/disable most of the GUI. Output: None """ self.button0dB.setEnabled(enabled) self.presetComboBox.setEnabled(enabled) self.rxRadioButton.setEnabled(enabled) self.slider0050.setEnabled(enabled) self.slider0100.setEnabled(enabled) self.slider0200.setEnabled(enabled) self.slider0400.setEnabled(enabled) self.slider0800.setEnabled(enabled) self.slider1600.setEnabled(enabled) self.slider2400.setEnabled(enabled) self.slider3200.setEnabled(enabled) self.txSsbRadioButton.setEnabled(enabled) self.txWideRadioButton.setEnabled(enabled) def ssbHandler(self): """Handle event when user clicks SSB radio button. If first time, the K3 tx ssb EQ values are retrieved from the radio. After that, saved values are used. In both cases, those values are used to update the GUI EQ sliders. """ self.tx = True self.k3.setMode('usb') # XXX Maybe check cur mode 1st, esp if LSB?? if self.presets[1] == []: vals_dB = self.k3.getEqSettings(self.tx) self.presets[1] = vals_dB else: vals_dB = self.presets[1] self.setEqUi(vals_dB) self.presetComboBox.setCurrentIndex(0) def wideHandler(self): """Handle event when user clicks Wide radio button. If first time, the K3 tx ssb EQ values are retrieved from the radio. After that, saved values are used. In both cases, those values are used to update the GUI EQ sliders. """ self.tx = True self.k3.setMode('am') if self.presets[2] == []: vals_dB = self.k3.getEqSettings(self.tx) self.presets[2] = vals_dB else: vals_dB = self.presets[2] self.setEqUi(vals_dB) self.presetComboBox.setCurrentIndex(0) def zeroHandler(self): """Handle event when user clicks '0 dB' button. The radio and GUI are both updated, setting all bands to 0 dB. """ vals_dB = [0, 0, 0, 0, 0, 0, 0, 0] if not self.tx: mi = 0 elif self.k3.getMode() in ['lsb', 'usb', 'cw', 'cwRev']: mi = 1 elif self.k3.getMode() in ['lsbEssb', 'usbEssb', 'am', 'fm']: mi = 2 self.presets[mi] = vals_dB self.k3.setEqBands(self.tx, vals_dB) self.setEqUi(vals_dB) self.presetComboBox.setCurrentIndex(0) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) EQ = QtWidgets.QDialog() ui = Ui_EQ() ui.setupUi(EQ) EQ.show() sys.exit(app.exec_())