import sys, os # Path setup — works both as `python gui/main.py` and `python -m gui.main` for _p in [ os.path.dirname(os.path.dirname(os.path.abspath(__file__))), # nmea_client/ os.path.dirname(os.path.abspath(__file__)), # nmea_client/gui/ ]: if _p not in sys.path: sys.path.insert(0, _p) from PyQt5.QtWidgets import QApplication, QMainWindow, QTabWidget from PyQt5.QtGui import QIcon from data_model import ReceiverManager from connection_tab import ConnectionTab from sky_tab import SkyTab from plot_tab import PlotTab class MainWindow(QMainWindow): def __init__(self, model: ReceiverManager): super().__init__() self._model = model self.setWindowTitle("GNSS Monitor") self.resize(1400, 900) tabs = QTabWidget() tabs.addTab(ConnectionTab(model), "Connection") tabs.addTab(SkyTab(model), "Sky") tabs.addTab(PlotTab(model), "Plot") self.setCentralWidget(tabs) def closeEvent(self, event): for rid in list(self._model.get_receiver_ids()): self._model.disconnect_receiver(rid) event.accept() def main(): app = QApplication(sys.argv) app.setStyle('Fusion') model = ReceiverManager() win = MainWindow(model) win.show() sys.exit(app.exec_()) if __name__ == '__main__': main()