import sys import os from pandas import read_csv from PyQt5.QtWidgets import (QMainWindow, QApplication, QMessageBox, qApp,) from PyQt5.QtGui import QPixmap from PyQt5 import uic from PyQt5.QtCore import QFileInfo, QSize from audio_player import AudioPlayer qt_creator_file = "main_window.ui" Ui_MainWindow, _ = uic.loadUiType(qt_creator_file) class MyApp(QMainWindow, Ui_MainWindow): def __init__(self): super().__init__() self.setupUi(self) self.show() self.actionExit.triggered.connect(qApp.quit) self.db_version = None self.load_db() self.display_signals() self.search_bar.textChanged.connect(self.display_signals) self.result_list.itemSelectionChanged.connect(self.display_specs) self.result_list.currentItemChanged.connect(self.display_specs) self.audio_widget = AudioPlayer(self.play, self.pause, self.stop, self.volume, self.audio_progress) def load_db(self): try: db = read_csv(os.path.join('Data', 'db.csv'), sep = '*', header = None, prefix = 'signal_') except FileNotFoundError: self.signal_names = '' self.search_bar.setDisabled(True) box = QMessageBox(self) box.setStyleSheet(""" color:#FFFFFF; """) box.setWindowTitle("No database") box.setText("No database available.\n" "Go to Updates->Download database.") box.show() else: self.signal_names = db['signal_0'] try: with open(os.path.join('Data', 'verdb.ini'), 'r') as dbver: self.db_version = int(dbver.read()) except (FileNotFoundError, ValueError): box = QMessageBox(self) box.setStyleSheet(""" color:#FFFFFF; """) box.setWindowTitle("No database version") box.setText("Unable to detect database version.\n" "Possible data curruption.\n" "Go to Updates->Force Download.") box.show() self.setStatusTip(f"Database version: undefined.") else: self.setStatusTip(f"Database version: {self.db_version}.") def display_signals(self): self.result_list.clear() for signal in self.signal_names: if self.search_bar.text().lower() in signal.lower(): self.result_list.addItem(signal) def display_specs(self): self.display_spectrogram() item = self.result_list.currentItem() if item: self.audio_widget.set_audio_player(item.text()) else: self.audio_widget.set_audio_player() def display_spectrogram(self): default_pic = os.path.join("icons_imgs", "image_not_found.png") item = self.result_list.currentItem() if item: spectrogram_name = item.text() path_spectr = os.path.join("Data", "Spectra", spectrogram_name + ".jpg") if not QFileInfo(path_spectr).exists(): path_spectr = default_pic else: path_spectr = default_pic self.spectrogram.setPixmap(QPixmap(path_spectr)) if __name__ == '__main__': my_app = QApplication(sys.argv) w = MyApp() sys.exit(my_app.exec_())