Source code for pynta.view.GUI.main_window

import os
from PyQt5 import uic
from PyQt5.QtCore import QTimer, Qt
from PyQt5.QtWidgets import QMainWindow, QHBoxLayout, QPushButton, QSplitter

from pynta.view.GUI import resources # This is what allows the icons to show up even if not explicitly used in the code
from pynta.util.log import get_logger
from pynta.view.GUI.camera_viewer_widget import CameraViewerWidget
from pynta.view.GUI.config_tracking_widget import ConfigTrackingWidget
from pynta.view.GUI.config_widget import ConfigWidget
from pynta.view.GUI.histogram_tracks_widget import HistogramTracksWidget


[docs]class MainWindowGUI(QMainWindow): def __init__(self, refresh_time=30): super().__init__() uic.loadUi(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'designer', 'MainWindow.ui'), self) self.logger = get_logger(name=__name__) self.central_layout = QHBoxLayout(self.centralwidget) self.widget_splitter = QSplitter() self.camera_viewer_widget = CameraViewerWidget() self.histogram_tracks_widget = HistogramTracksWidget(self) self.widget_splitter.addWidget(self.camera_viewer_widget) self.widget_splitter.addWidget(self.histogram_tracks_widget) self.widget_splitter.setSizes((750, 750)) self.central_layout.addWidget(self.widget_splitter) self.config_widget = ConfigWidget() self.config_tracking_widget = ConfigTrackingWidget() self.refresh_timer = QTimer() self.refresh_timer.timeout.connect(self.update_gui) self.refresh_timer.start(refresh_time) self.showMaximized() self.connect_actions() self.connect_buttons() self.connect_signals()
[docs] def update_gui(self): self.logger.error('Update gui not defined')
[docs] def connect_signals(self): self.config_tracking_widget.apply_config.connect(self.update_tracking_config) self.config_widget.apply_config.connect(self.update_config)
[docs] def connect_buttons(self): self.histogram_tracks_widget.button_histogram.clicked.connect(self.calculate_histogram) self.histogram_tracks_widget.button_tracks.clicked.connect(self.update_tracks)
[docs] def connect_actions(self): self.actionClose.triggered.connect(self.safe_close) self.actionLoad_Config.triggered.connect(self.load_config) self.actionSave_Image.triggered.connect(self.save_image) self.actionLoad_Data.triggered.connect(self.load_data) self.actionSnap_Photo.triggered.connect(self.snap) self.actionStart_Movie.triggered.connect(self.start_movie) self.actionStop_Movie.triggered.connect(self.stop_movie) self.actionStart_Continuous_Saves.triggered.connect(self.start_continuous_saves) self.actionStop_Continuous_Saves.triggered.connect(self.stop_continuous_saves) self.actionSet_ROI.triggered.connect(self.set_roi) self.actionClear_ROI.triggered.connect(self.clear_roi) self.actionConfiguration.triggered.connect(self.configure) self.actionToggle_bg_reduction.triggered.connect(self.background_reduction) self.actionStart_Tracking.triggered.connect(self.start_tracking) self.actionStop_Tracking.triggered.connect(self.stop_tracking) self.actionStart_Linking.triggered.connect(self.start_linking) self.actionStop_Linking.triggered.connect(self.stop_linking) self.actionSave_Tracks.triggered.connect(self.start_saving_tracks) self.actionShow_Cheatsheet.triggered.connect(self.show_cheat_sheet) self.actionAbout.triggered.connect(self.show_about) self.actionInitialize_Camera.triggered.connect(self.initialize_camera) self.actionUpdate_Histogram.triggered.connect(self.calculate_histogram) self.actionTracking_Config.triggered.connect(self.config_tracking_widget.show) self.actionConfiguration.triggered.connect(self.config_widget.show)
[docs] def initialize_camera(self): self.logger.debug('Initialize Camera')
[docs] def show_about(self): self.logger.debug('Showing About')
[docs] def load_config(self): self.logger.debug('Loading config')
[docs] def snap(self): self.logger.debug('Snapped a photo')
[docs] def save_image(self): self.logger.debug('Saved an image')
[docs] def start_movie(self): self.logger.debug('Start a movie')
[docs] def stop_movie(self): self.logger.error('Stop movie not defined')
[docs] def start_continuous_saves(self): self.logger.debug('Started continuous saves')
[docs] def stop_continuous_saves(self): self.logger.error('Stop continuous Saves not implemented')
[docs] def start_tracking(self): self.logger.debug('Started tracking particles')
[docs] def stop_tracking(self): self.logger.debug('Stopped tracking particles')
[docs] def start_saving_tracks(self): self.logger.debug('Started saving tracks')
[docs] def stop_saving_tracks(self): self.logger.debug('Stopped saving tracks')
[docs] def start_linking(self): self.logger.debug('Started linking particles')
[docs] def stop_linking(self): self.logger.debug('Stopped linking')
[docs] def configure(self): self.logger.debug('Showed the config window')
[docs] def set_roi(self): self.logger.debug('Setting the ROI')
[docs] def clear_roi(self): self.logger.debug('Resetting the ROI')
[docs] def background_reduction(self): self.logger.debug('Setting background reduction')
[docs] def show_cheat_sheet(self): self.logger.debug('Showing the cheat sheet')
[docs] def load_data(self): self.logger.debug('Loading data')
[docs] def safe_close(self): self.logger.debug('Closing the program') self.close()
[docs] def calculate_histogram(self): self.logger.error('Update Histogram method not defiend')
[docs] def update_tracks(self): self.logger.error('Update tracks method not defined')
[docs] def update_tracking_config(self, config): self.logger.error('Update Tracking config method not defined')
[docs] def update_config(self, config): self.logger.error('Update Config method not defined')
[docs] def closeEvent(self, *args, **kwargs): self.config_widget.close() self.config_tracking_widget.close() super(MainWindowGUI, self).closeEvent(*args, **kwargs)
if __name__ == "__main__": import sys import logging from PyQt5.QtWidgets import QApplication logger = get_logger(name=__name__) logger.setLevel(logging.DEBUG) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') ch.setFormatter(formatter) logger.addHandler(ch) app = QApplication([]) win = MainWindowGUI() win.show() sys.exit(app.exec_())