def contextMenuEvent(self, event): network_node = engine.node(self.network_level) menu = QtGui.QMenu(event.widget()) group = QtGui.QActionGroup(menu) menu.addAction('Tool Menu...') add_operators_menu = menu.addMenu("Add") node_types = network_node.childTypeCategory().nodeTypes() for node_type_name, node_class in node_types.iteritems(): icon = QtGui.QIcon(node_class.iconName()) action = add_operators_menu.addAction(icon, node_type_name) action.setActionGroup(group) action.setData(node_type_name) group.triggered.connect(self.addOperator) menu.exec_(event.screenPos())
def init_menubar(self): """ Create menu bar and add all possible menu options. These are: - Image Plots: possible 2D image/scatter plots - Line Plots: possible 1D line plots - Probe Plots: possible 2D plots arranged according to probe geometry - Slice Plots: possible coronal slice images - Filter Units: filter displayed plots by unit type (All, Good, MUA) - Fit Options: possible keyboard interactions for applying alignment - Display Options: possible keyboard interactions to what is displayed on GUI - Session Information: extra info, session notes and Allen brain regions description """ # Create menubar widget and add it to the main GUI window menu_bar = QtWidgets.QMenuBar(self) menu_bar.setNativeMenuBar(False) self.setMenuBar(menu_bar) # IMAGE PLOTS MENU BAR # Define all 2D scatter/ image plot options scatter_drift = QtGui.QAction('Amplitude', self, checkable=True, checked=False) scatter_drift.triggered.connect( lambda: self.plot_scatter(self.scat_drift_data)) scatter_fr = QtGui.QAction('Cluster Amp vs Depth vs FR', self, checkable=True, checked=False) scatter_fr.triggered.connect( lambda: self.plot_scatter(self.scat_fr_data)) scatter_p2t = QtGui.QAction('Cluster Amp vs Depth vs Duration', self, checkable=True, checked=False) scatter_p2t.triggered.connect( lambda: self.plot_scatter(self.scat_p2t_data)) scatter_amp = QtGui.QAction('Cluster FR vs Depth vs Amp', self, checkable=True, checked=False) scatter_amp.triggered.connect( lambda: self.plot_scatter(self.scat_amp_data)) img_fr = QtGui.QAction('Firing Rate', self, checkable=True, checked=True) img_fr.triggered.connect(lambda: self.plot_image(self.img_fr_data)) img_corr = QtGui.QAction('Correlation', self, checkable=True, checked=False) img_corr.triggered.connect(lambda: self.plot_image(self.img_corr_data)) img_rmsAP = QtGui.QAction('rms AP', self, checkable=True, checked=False) img_rmsAP.triggered.connect( lambda: self.plot_image(self.img_rms_APdata)) img_rmsLFP = QtGui.QAction('rms LFP', self, checkable=True, checked=False) img_rmsLFP.triggered.connect( lambda: self.plot_image(self.img_rms_LFPdata)) img_LFP = QtGui.QAction('LFP Spectrum', self, checkable=True, checked=False) img_LFP.triggered.connect(lambda: self.plot_image(self.img_lfp_data)) # Initialise with firing rate 2D plot self.img_init = img_fr # Add menu bar for 2D scatter/ image plot options img_options = menu_bar.addMenu('Image Plots') # Add action group so we can toggle through 2D scatter/ image plot options self.img_options_group = QtGui.QActionGroup(img_options) # Only allow one to plot to be selected at any one time self.img_options_group.setExclusive(True) img_options.addAction(img_fr) self.img_options_group.addAction(img_fr) img_options.addAction(scatter_drift) self.img_options_group.addAction(scatter_drift) img_options.addAction(img_corr) self.img_options_group.addAction(img_corr) img_options.addAction(img_rmsAP) self.img_options_group.addAction(img_rmsAP) img_options.addAction(img_rmsLFP) self.img_options_group.addAction(img_rmsLFP) img_options.addAction(img_LFP) self.img_options_group.addAction(img_LFP) img_options.addAction(scatter_fr) self.img_options_group.addAction(scatter_fr) img_options.addAction(scatter_p2t) self.img_options_group.addAction(scatter_p2t) img_options.addAction(scatter_amp) self.img_options_group.addAction(scatter_amp) stim_type = list(self.img_stim_data.keys()) for stim in stim_type: img = QtGui.QAction(stim, self, checkable=True, checked=False) img.triggered.connect(lambda checked, item=stim: self.plot_image( self.img_stim_data[item])) img_options.addAction(img) self.img_options_group.addAction(img) # LINE PLOTS MENU BAR # Define all 1D line plot options line_fr = QtGui.QAction('Firing Rate', self, checkable=True, checked=True) line_fr.triggered.connect(lambda: self.plot_line(self.line_fr_data)) line_amp = QtGui.QAction('Amplitude', self, checkable=True, checked=False) line_amp.triggered.connect(lambda: self.plot_line(self.line_amp_data)) # Initialise with firing rate 1D plot self.line_init = line_fr # Add menu bar for 1D line plot options line_options = menu_bar.addMenu('Line Plots') # Add action group so we can toggle through 2D scatter/ image plot options self.line_options_group = QtGui.QActionGroup(line_options) # Only allow one to plot to be selected at any one time self.line_options_group.setExclusive(True) line_options.addAction(line_fr) self.line_options_group.addAction(line_fr) line_options.addAction(line_amp) self.line_options_group.addAction(line_amp) # PROBE PLOTS MENU BAR # Define all 2D probe plot options # In two stages 1) RMS plots manually, 2) frequency plots in for loop probe_rmsAP = QtGui.QAction('rms AP', self, checkable=True, checked=True) probe_rmsAP.triggered.connect( lambda: self.plot_probe(self.probe_rms_APdata)) probe_rmsLFP = QtGui.QAction('rms LFP', self, checkable=True, checked=False) probe_rmsLFP.triggered.connect( lambda: self.plot_probe(self.probe_rms_LFPdata)) # Initialise with rms of AP probe plot self.probe_init = probe_rmsAP # Add menu bar for 2D probe plot options probe_options = menu_bar.addMenu("Probe Plots") # Add action group so we can toggle through probe plot options self.probe_options_group = QtGui.QActionGroup(probe_options) self.probe_options_group.setExclusive(True) probe_options.addAction(probe_rmsAP) self.probe_options_group.addAction(probe_rmsAP) probe_options.addAction(probe_rmsLFP) self.probe_options_group.addAction(probe_rmsLFP) # Add the different frequency band options in a loop. These bands must be the same as # defined in plot_data freq_bands = np.vstack(([0, 4], [4, 10], [10, 30], [30, 80], [80, 200])) for iF, freq in enumerate(freq_bands): band = f"{freq[0]} - {freq[1]} Hz" probe = QtGui.QAction(band, self, checkable=True, checked=False) probe.triggered.connect(lambda checked, item=band: self.plot_probe( self.probe_lfp_data[item])) probe_options.addAction(probe) self.probe_options_group.addAction(probe) sub_types = list(self.probe_rfmap.keys()) for sub in sub_types: probe = QtGui.QAction(f'RF Map - {sub}', self, checkable=True, checked=False) probe.triggered.connect(lambda checked, item=sub: self.plot_probe( self.probe_rfmap[item], bounds=self.rfmap_boundaries)) probe_options.addAction(probe) self.probe_options_group.addAction(probe) # SLICE PLOTS MENU BAR # Define all coronal slice plot options slice_hist_rd = QtGui.QAction('Histology Red', self, checkable=True, checked=True) slice_hist_rd.triggered.connect( lambda: self.plot_slice(self.slice_data, 'hist_rd')) slice_hist_gr = QtGui.QAction('Histology Green', self, checkable=True, checked=False) slice_hist_gr.triggered.connect( lambda: self.plot_slice(self.slice_data, 'hist_gr')) slice_ccf = QtGui.QAction('CCF', self, checkable=True, checked=False) slice_ccf.triggered.connect( lambda: self.plot_slice(self.slice_data, 'ccf')) slice_label = QtGui.QAction('Annotation', self, checkable=True, checked=False) slice_label.triggered.connect( lambda: self.plot_slice(self.slice_data, 'label')) # Initialise with raw histology image self.slice_init = slice_hist_rd # Add menu bar for slice plot slice_options = menu_bar.addMenu("Slice Plots") # Add action group so we can toggle through slice plot options self.slice_options_group = QtGui.QActionGroup(slice_options) self.slice_options_group.setExclusive(True) slice_options.addAction(slice_hist_rd) self.slice_options_group.addAction(slice_hist_rd) slice_options.addAction(slice_hist_gr) self.slice_options_group.addAction(slice_hist_gr) slice_options.addAction(slice_ccf) self.slice_options_group.addAction(slice_ccf) slice_options.addAction(slice_label) self.slice_options_group.addAction(slice_label) # FILTER UNITS MENU BAR # Define unit filtering options all_units = QtGui.QAction('All', self, checkable=True, checked=True) all_units.triggered.connect(lambda: self.filter_unit_pressed('all')) good_units = QtGui.QAction('KS good', self, checkable=True, checked=False) good_units.triggered.connect( lambda: self.filter_unit_pressed('KS good')) mua_units = QtGui.QAction('KS mua', self, checkable=True, checked=False) mua_units.triggered.connect(lambda: self.filter_unit_pressed('KS mua')) ibl_units = QtGui.QAction('IBL good', self, checkable=True, checked=False) ibl_units.triggered.connect( lambda: self.filter_unit_pressed('IBL good')) # Initialise with all units being shown self.unit_init = all_units # Add menu bar for slice plot options unit_filter_options = menu_bar.addMenu("Filter Units") # Add action group so we can toggle through unit options unit_filter_options_group = QtGui.QActionGroup(unit_filter_options) unit_filter_options_group.setExclusive(True) unit_filter_options.addAction(all_units) unit_filter_options_group.addAction(all_units) unit_filter_options.addAction(good_units) unit_filter_options_group.addAction(good_units) unit_filter_options.addAction(mua_units) unit_filter_options_group.addAction(mua_units) unit_filter_options.addAction(ibl_units) unit_filter_options_group.addAction(ibl_units) # FIT OPTIONS MENU BAR # Define all possible keyboard shortcut interactions for GUI # Shortcut to apply interpolation fit_option = QtGui.QAction('Fit', self) fit_option.setShortcut('Return') fit_option.triggered.connect(self.fit_button_pressed) # Shortcuts to apply offset offset_option = QtGui.QAction('Offset', self) offset_option.setShortcut('O') offset_option.triggered.connect(self.offset_button_pressed) moveup_option = QtGui.QAction('Offset + 50um', self) moveup_option.setShortcut('Shift+Up') moveup_option.triggered.connect(self.moveup_button_pressed) movedown_option = QtGui.QAction('Offset - 50um', self) movedown_option.setShortcut('Shift+Down') movedown_option.triggered.connect(self.movedown_button_pressed) # Shortcut to remove a reference line delete_line_option = QtGui.QAction('Remove Line', self) delete_line_option.setShortcut('Shift+D') delete_line_option.triggered.connect(self.delete_line_button_pressed) # Shortcut to move between previous/next moves next_option = QtGui.QAction('Next', self) next_option.setShortcut('Right') next_option.triggered.connect(self.next_button_pressed) prev_option = QtGui.QAction('Previous', self) prev_option.setShortcut('Left') prev_option.triggered.connect(self.prev_button_pressed) # Shortcut to reset GUI to initial state reset_option = QtGui.QAction('Reset', self) reset_option.setShortcut('Shift+R') reset_option.triggered.connect(self.reset_button_pressed) # Shortcut to upload final state to Alyx/to local file complete_option = QtGui.QAction('Upload', self) complete_option.setShortcut('Shift+U') if not self.offline: complete_option.triggered.connect(self.display_qc_options) else: complete_option.triggered.connect( self.complete_button_pressed_offline) # Add menu bar with all possible keyboard interactions fit_options = menu_bar.addMenu("Fit Options") fit_options.addAction(fit_option) fit_options.addAction(offset_option) fit_options.addAction(moveup_option) fit_options.addAction(movedown_option) fit_options.addAction(delete_line_option) fit_options.addAction(next_option) fit_options.addAction(prev_option) fit_options.addAction(reset_option) fit_options.addAction(complete_option) # DISPLAY OPTIONS MENU BAR # Define all possible keyboard shortcut for visualisation features # Shortcuts to toggle between plots options toggle1_option = QtGui.QAction('Toggle Image Plots', self) toggle1_option.setShortcut('Alt+1') toggle1_option.triggered.connect( lambda: self.toggle_plots(self.img_options_group)) toggle2_option = QtGui.QAction('Toggle Line Plots', self) toggle2_option.setShortcut('Alt+2') toggle2_option.triggered.connect( lambda: self.toggle_plots(self.line_options_group)) toggle3_option = QtGui.QAction('Toggle Probe Plots', self) toggle3_option.setShortcut('Alt+3') toggle3_option.triggered.connect( lambda: self.toggle_plots(self.probe_options_group)) toggle4_option = QtGui.QAction('Toggle Slice Plots', self) toggle4_option.setShortcut('Alt+4') toggle4_option.triggered.connect( lambda: self.toggle_plots(self.slice_options_group)) # Shortcuts to switch order of 3 panels in ephys plot view1_option = QtGui.QAction('View 1', self) view1_option.setShortcut('Shift+1') view1_option.triggered.connect(lambda: self.set_view(view=1)) view2_option = QtGui.QAction('View 2', self) view2_option.setShortcut('Shift+2') view2_option.triggered.connect(lambda: self.set_view(view=2)) view3_option = QtGui.QAction('View 3', self) view3_option.setShortcut('Shift+3') view3_option.triggered.connect(lambda: self.set_view(view=3)) # Shortcut to reset axis on figures axis_option = QtGui.QAction('Reset Axis', self) axis_option.setShortcut('Shift+A') axis_option.triggered.connect(self.reset_axis_button_pressed) # Shortcut to hide/show region labels toggle_labels_option = QtGui.QAction('Hide/Show Labels', self) toggle_labels_option.setShortcut('Shift+L') toggle_labels_option.triggered.connect( self.toggle_labels_button_pressed) # Shortcut to hide/show reference lines toggle_lines_option = QtGui.QAction('Hide/Show Lines', self) toggle_lines_option.setShortcut('Shift+H') toggle_lines_option.triggered.connect(self.toggle_line_button_pressed) # Shortcut to hide/show reference lines and channels on slice image toggle_channels_option = QtGui.QAction('Hide/Show Channels', self) toggle_channels_option.setShortcut('Shift+C') toggle_channels_option.triggered.connect( self.toggle_channel_button_pressed) # Shortcut to change default histology reference image toggle_histology_option = QtGui.QAction('Hide/Show Nearby Boundaries', self) toggle_histology_option.setShortcut('Shift+N') toggle_histology_option.triggered.connect( self.toggle_histology_button_pressed) # Shortcuts for cluster popup window popup_minimise = QtGui.QAction('Minimise/Show Cluster Popup', self) popup_minimise.setShortcut('Alt+M') popup_minimise.triggered.connect(self.minimise_popups) popup_close = QtGui.QAction('Close Cluster Popup', self) popup_close.setShortcut('Alt+X') popup_close.triggered.connect(self.close_popups) # Option to save all plots save_plots = QtGui.QAction('Save Plots', self) save_plots.triggered.connect(self.save_plots) # Add menu bar with all possible display options display_options = menu_bar.addMenu('Display Options') display_options.addAction(toggle1_option) display_options.addAction(toggle2_option) display_options.addAction(toggle3_option) display_options.addAction(toggle4_option) display_options.addAction(view1_option) display_options.addAction(view2_option) display_options.addAction(view3_option) display_options.addAction(axis_option) display_options.addAction(toggle_labels_option) display_options.addAction(toggle_lines_option) display_options.addAction(toggle_channels_option) display_options.addAction(toggle_histology_option) display_options.addAction(popup_minimise) display_options.addAction(popup_close) display_options.addAction(save_plots) # SESSION INFORMATION MENU BAR # Define all session information options # Display any notes associated with recording session session_notes = QtGui.QAction('Session Notes', self) session_notes.triggered.connect(self.display_session_notes) # Shortcut to show label information region_info = QtGui.QAction('Region Info', self) region_info.setShortcut('Shift+I') region_info.triggered.connect(self.describe_labels_pressed) # Add menu bar with all possible session info options info_options = menu_bar.addMenu('Session Information') info_options.addAction(session_notes) info_options.addAction(region_info) # Display other sessions that are closeby if online mode if not self.offline: nearby_info = QtGui.QAction('Nearby Sessions', self) nearby_info.triggered.connect(self.display_nearby_sessions) info_options.addAction(nearby_info)
def addMenuAndToolBar(self, name): self.menu[name] = self.menuBar.addMenu(name) self.toolBar[name] = self.addToolBar(name) self.actionGroup[name] = QtGui.QActionGroup(self)
def __init__(self, lazy=False): super(MainWindow, self).__init__() uic.loadUi(Path(__file__).parent.joinpath('mainUI.ui'), self) self.atlas = AllenAtlas(25) # Configure the Menu bar menu_bar = QtWidgets.QMenuBar(self) menu_bar.setNativeMenuBar(False) self.setMenuBar(menu_bar) # Add menu bar for mappings self.map_menu = menu_bar.addMenu('Mappings') self.map_group = QtGui.QActionGroup(self.map_menu) # Only allow one to plot to be selected at any one time self.map_group.setExclusive(True) self.add_menu_bar(self.map_menu, self.map_group, list(self.atlas.regions.mappings.keys()), callback=self.change_mapping, default='Allen') # Add menu bar for base image self.img_menu = menu_bar.addMenu('Images') self.img_group = QtGui.QActionGroup(self.img_menu) self.img_group.setExclusive(True) images = ['Image', 'Annotation'] self.add_menu_bar(self.img_menu, self.img_group, images, callback=self.change_image, default='Image') # Add menu bar for coverage self.coverage_menu = menu_bar.addMenu('Coverage') self.coverage_group = QtGui.QActionGroup(self.coverage_menu) self.coverage_group.setExclusive(True) coverages = ['Coverage cosine', 'Coverage grid 500', 'Coverage grid 250', 'Coverage grid 100'] self.add_menu_bar(self.coverage_menu, self.coverage_group, coverages, callback=self.add_coverage) # Add menubar for insertions self.insertion_menu = menu_bar.addMenu('Insertions') self.insertion_group = QtGui.QActionGroup(self.insertion_menu) self.insertion_group.setExclusive(True) insertions = ['Resolved', 'Ephys aligned histology track', 'Histology track', 'Histology track (best)', 'Micro-manipulator', 'Micro-manipulator (best)', 'Planned', 'Planned (best)'] self.add_menu_bar(self.insertion_menu, self.insertion_group, insertions, callback=self.add_insertions) self.coronal = SliceView(self, self.fig_coronal, self.atlas, slice='coronal', waxis=0, haxis=2, daxis=1) self.sagittal = SliceView(self, self.fig_sagittal, self.atlas, slice='sagittal', waxis=1, haxis=2, daxis=0) self.horizontal = SliceView(self, self.fig_horizontal, self.atlas, slice='horizontal', waxis=1, haxis=0, daxis=2) self.horizontal.fig_slice.getViewBox().invertY(True) self.top = TopView(self, self.fig_top, self.atlas) self.probe = ProbeView(self, self.fig_probe) self.coverage = CoverageView(self) self.probe_model = ProbeModel(one=one, ba=self.atlas, lazy=lazy) self.region = RegionView(self, self.atlas) self.change_mapping() layout = QtWidgets.QGridLayout() layout.addWidget(self.coverage) self.coverage_placeholder.setLayout(layout) layout = QtWidgets.QGridLayout() layout.addWidget(self.region) self.region_placeholder.setLayout(layout) self.target = None
def create_actions(self): self.open_world_action = \ QtGui.QAction(QtGui.QIcon.fromTheme("document-open", QtGui.QIcon("./res/image/open.png")), "Open XML &World", self) self.open_world_action.triggered.connect(self.on_open_world) self.open_world_action.setShortcut( QtGui.QKeySequence(QtGui.QKeySequence.Open)) self.open_world_action.setStatusTip("Open a new simulation") self.exit_action = \ QtGui.QAction(QtGui.QIcon.fromTheme("application-exit"), "E&xit", self) self.exit_action.triggered.connect(self.close) self.exit_action.setShortcut( QtGui.QKeySequence(QtGui.QKeySequence.Quit)) self.exit_action.setToolTip("Quit the Program") self.exit_action.setStatusTip("Exit QtSimiam") self.rev_action = \ QtGui.QAction(QtGui.QIcon.fromTheme("media-seek-backward", QtGui.QIcon("./res/image/arrow-left-double.png")), "Rewind", self) self.rev_action.triggered.connect(self.on_rewind) self.rev_action.setStatusTip("Reset simulation") self.run_action = PlayPauseAction(self, self.on_run, self.on_pause) self.run_action.setEnabled(False) self.grid_action = \ QtGui.QAction(QtGui.QIcon("./res/image/grid.png"), "Show/Hide grid", self) self.grid_action.setStatusTip("Show/hide grid") self.grid_action.triggered[bool].connect(self.show_grid) self.grid_action.setCheckable(True) self.grid_action.setChecked(False) self.sens_action = \ QtGui.QAction(QtGui.QIcon("./res/image/robot-sensors.png"), "Show/Hide sensors", self) self.sens_action.setStatusTip("Show/hide robot sensors") self.sens_action.triggered[bool].connect(self.show_sensors) self.sens_action.setCheckable(True) self.sens_action.setChecked(True) self.trace_action = \ QtGui.QAction(QtGui.QIcon("./res/image/robot-tracks.png"), "Show/Hide robot trajectores", self) self.trace_action.setStatusTip("Show/hide robot trajectores") self.trace_action.triggered[bool].connect(self.show_tracks) self.trace_action.setCheckable(True) self.trace_action.setChecked(True) self.superv_action = \ QtGui.QAction(QtGui.QIcon("./res/image/robot-supervisors.png"), "Show/Hide supervisor information", self) self.superv_action.setStatusTip("Show/hide supervisor information") self.superv_action.triggered[bool].connect(self.show_supervisors) self.superv_action.setCheckable(True) self.superv_action.setChecked(False) zoom_group = QtGui.QActionGroup(self) self.zoom_world_action = \ QtGui.QAction(QtGui.QIcon("./res/image/zoom-scene.png"), "Show all", self) self.zoom_world_action.triggered.connect(self.zoom_scene) self.zoom_world_action.setStatusTip("Show the whole world in view") self.zoom_world_action.setCheckable(True) self.zoom_world_action.setChecked(True) zoom_group.addAction(self.zoom_world_action) self.zoom_robot_action = \ QtGui.QAction(QtGui.QIcon("./res/image/zoom-robot.png"), "Follow robot", self) self.zoom_robot_action.triggered.connect(self.zoom_robot) self.zoom_robot_action.setStatusTip("Center the view on robot") self.zoom_robot_action.setCheckable(True) self.zoom_robot_action.setChecked(False) zoom_group.addAction(self.zoom_robot_action) self.rotate_action = \ QtGui.QAction(QtGui.QIcon("./res/image/zoom-robot-rot.png"), "Follow robot orientation", self) self.rotate_action.triggered.connect(self.rot_robot) self.rotate_action.setStatusTip("Rotate the view with the robot") self.rotate_action.setCheckable(True) self.rotate_action.setChecked(False) self.rotate_action.setEnabled(False) self.showlog_action = QtGui.QAction("Show log", self) self.showlog_action.triggered.connect(self.add_logdock) self.about_action = \ QtGui.QAction(QtGui.QIcon.fromTheme("help-about", self.windowIcon()), "About",self) self.about_action.setStatusTip("About QtSimiam") self.about_action.triggered.connect(self.about)
def setupUi(self, MainWindow): #MainWindow.setWindowTitle('PictureWorkshop') MainWindow.setObjectName("Pupil Dilation Tracker") MainWindow.resize(1603, 1158) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( MainWindow.sizePolicy().hasHeightForWidth()) MainWindow.setSizePolicy(sizePolicy) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setEnabled(True) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.centralwidget.sizePolicy().hasHeightForWidth()) self.centralwidget.setSizePolicy(sizePolicy) self.centralwidget.setObjectName("centralwidget") self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout.setObjectName("gridLayout") self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.gridLayout.addLayout(self.verticalLayout, 1, 0, 1, 1) self.video_title = QtWidgets.QLabel(self.centralwidget) self.video_title.setStyleSheet("font: 75 11pt \"Adobe Devanagari\";") self.video_title.setObjectName("video_title") self.gridLayout.addWidget(self.video_title, 0, 0, 1, 2, QtCore.Qt.AlignHCenter) self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) self.tabWidget.setObjectName("tabWidget") self.tab_FrameViewer = QtWidgets.QWidget() sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.tab_FrameViewer.sizePolicy().hasHeightForWidth()) self.tab_FrameViewer.setSizePolicy(sizePolicy) self.tab_FrameViewer.setObjectName("tab_FrameViewer") self.gridLayout_2 = QtWidgets.QGridLayout(self.tab_FrameViewer) self.gridLayout_2.setContentsMargins(0, 0, 0, 0) self.gridLayout_2.setObjectName("gridLayout_2") self.frame = QtWidgets.QFrame(self.tab_FrameViewer) self.frame.setMinimumSize(QtCore.QSize(0, 100)) self.frame.setSizeIncrement(QtCore.QSize(0, 0)) self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame.setFrameShadow(QtWidgets.QFrame.Raised) self.frame.setObjectName("frame") self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.frame) self.verticalLayout_3.setObjectName("verticalLayout_3") self.frame_2 = QtWidgets.QFrame(self.frame) self.frame_2.setMinimumSize(QtCore.QSize(0, 70)) self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) self.frame_2.setObjectName("frame_2") self.gridLayout_3 = QtWidgets.QGridLayout(self.frame_2) self.gridLayout_3.setObjectName("gridLayout_3") self.horizontalSlider = QtWidgets.QSlider(self.frame_2) self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal) self.horizontalSlider.setObjectName("horizontalSlider") self.gridLayout_3.addWidget(self.horizontalSlider, 0, 1, 1, 2) self.label_frameNum = QtWidgets.QLabel(self.frame_2) self.label_frameNum.setStyleSheet("font: 75 9pt \"Adobe Devanagari\";") self.label_frameNum.setObjectName("label_frameNum") self.gridLayout_3.addWidget(self.label_frameNum, 2, 1, 1, 2, QtCore.Qt.AlignHCenter) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_3.addItem(spacerItem, 1, 0, 1, 1) self.L_button = QtWidgets.QPushButton(self.frame_2) self.L_button.setMinimumSize(QtCore.QSize(100, 100)) self.L_button.setMaximumSize(QtCore.QSize(100, 100)) self.L_button.setStyleSheet("font: 16pt \"MS Shell Dlg 2\";") self.L_button.setObjectName("L_button") self.gridLayout_3.addWidget(self.L_button, 1, 1, 1, 1) self.R_button = QtWidgets.QPushButton(self.frame_2) self.R_button.setMinimumSize(QtCore.QSize(100, 100)) self.R_button.setMaximumSize(QtCore.QSize(100, 100)) self.R_button.setStyleSheet("font: 16pt \"MS Shell Dlg 2\";") self.R_button.setObjectName("R_button") self.gridLayout_3.addWidget(self.R_button, 1, 2, 1, 1) spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_3.addItem(spacerItem1, 1, 3, 1, 1) self.verticalLayout_3.addWidget(self.frame_2) self.gridLayout_2.addWidget(self.frame, 2, 1, 1, 1) self.checkBox_UsePrevData = QtWidgets.QCheckBox(self.tab_FrameViewer) self.checkBox_UsePrevData.setObjectName("checkBox_UsePrevData") self.gridLayout_2.addWidget(self.checkBox_UsePrevData, 0, 1, 1, 1, QtCore.Qt.AlignRight) self.start_push_button = QtWidgets.QPushButton(self.tab_FrameViewer) # self.start_push_button.setGeometry(QtCore.QRect(350, 10, 131, 40)) self.start_push_button.setGeometry(QtCore.QRect(180, 10, 131, 40)) self.start_push_button.setObjectName("start_push_button") self.custom_range_box = QtWidgets.QLineEdit(self.tab_FrameViewer) self.custom_range_box.setGeometry(QtCore.QRect(90, 10, 71, 41)) self.custom_range_box.setObjectName("custom_range_box") self.threshold_box = QtWidgets.QLineEdit(self.tab_FrameViewer) # self.threshold_box.setGeometry(QtCore.QRect(260, 10, 61, 41)) self.threshold_box.setGeometry(QtCore.QRect(580, 10, 61, 41)) self.threshold_box.setObjectName("threshold_box") self.threshold_label = QtWidgets.QLabel(self.tab_FrameViewer) # self.threshold_label.setGeometry(QtCore.QRect(170, 10, 81, 23)) self.threshold_label.setGeometry(QtCore.QRect(490, 10, 81, 23)) self.threshold_label.setObjectName("threshold_label") self.label_2 = QtWidgets.QLabel(self.tab_FrameViewer) self.label_2.setGeometry(QtCore.QRect(20, 10, 80, 23)) self.label_2.setObjectName("label_2") self.customRange_label = QtWidgets.QLabel(self.tab_FrameViewer) self.customRange_label.setGeometry(QtCore.QRect(30, 30, 80, 23)) self.customRange_label.setObjectName("customRange_label") self.progressBar = QtWidgets.QProgressBar(self.tab_FrameViewer) #self.progressBar.setGeometry(QtCore.QRect(500, 20, 124, 25)) self.progressBar.setGeometry(QtCore.QRect(320, 20, 124, 25)) self.progressBar.setProperty("value", 24) self.progressBar.setObjectName("progressBar") self.threshold_label_2 = QtWidgets.QLabel(self.tab_FrameViewer) # self.threshold_label_2.setGeometry(QtCore.QRect(170, 30, 81, 23)) self.threshold_label_2.setGeometry(QtCore.QRect(490, 30, 81, 23)) self.threshold_label_2.setObjectName("threshold_label_2") #self.graphicsView = PlotWidget(self.tab_FrameViewer) #self.graphicsView.setObjectName("graphicsView") #self.graphicsView.setAspectLocked(True) #keeps aspect locked for imported video frames, otherwise it stretches everything out. self.graphicsView = PlotWidget(self.tab_FrameViewer) self.graphicsView = self.graphicsView self.graphicsView.setObjectName("graphicsView") self.graphicsView.setAspectLocked( True ) #keeps aspect locked for imported video frames, otherwise it stretches everything out. self.gridLayout_2.setContentsMargins( 0, 40, 0, 0 ) # Lowers grphicsView a little, so the options are visible at the top self.gridLayout_2.addWidget(self.graphicsView, 1, 1, 1, 1) self.tabWidget.addTab(self.tab_FrameViewer, "") self.tab_Data = QtWidgets.QWidget() self.tab_Data.setObjectName("tab_Data") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.tab_Data) self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") #self.graphicsView_Plot = QtWidgets.QGraphicsView(self.tab_Data) self.graphicsView_Plot = PlotWidget(self.tab_Data) self.graphicsView_Plot.setObjectName("graphicsView_Plot") #sizePolicy.setHeightForWidth(self.graphicsView_Plot.sizeAdjustPolicy()) self.horizontalLayout_2.addWidget(self.graphicsView_Plot) self.dataDisplay = QtWidgets.QTextBrowser(self.tab_Data) self.dataDisplay.setMaximumSize(QtCore.QSize(640, 16777215)) self.dataDisplay.setObjectName("dataDisplay") self.horizontalLayout_2.addWidget(self.dataDisplay) self.tabWidget.addTab(self.tab_Data, "") self.gridLayout.addWidget(self.tabWidget, 1, 1, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 1603, 47)) self.menubar.setObjectName("menubar") self.menuFile = QtWidgets.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") self.menuOptions = QtWidgets.QMenu(self.menubar) self.menuOptions.setObjectName("menuOptions") self.menuHelp = QtWidgets.QMenu(self.menubar) self.menuHelp.setObjectName("menuHelp") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.actionUpload_new = QtWidgets.QAction(MainWindow) self.actionUpload_new.setObjectName("actionUpload_new") self.actionOpen = QtWidgets.QAction(MainWindow) self.actionOpen.setObjectName("actionOpen") self.actionSave = QtWidgets.QAction(MainWindow) self.actionSave.setObjectName("actionSave") self.actionKalman = QtWidgets.QAction(MainWindow) self.actionKalman.setObjectName("actionKalman") self.actionProperties = QtWidgets.QAction(MainWindow) self.actionProperties.setObjectName("actionProperties") self.actionTutorial = QtWidgets.QAction(MainWindow) self.actionTutorial.setObjectName("actionTutorial") self.actionEllipseFitting = QtWidgets.QAction(MainWindow) self.actionEllipseFitting.setObjectName("actionEllipseFitting") self.actionEllipseFitting.setCheckable(True) self.actionEllipseFitting.setChecked(True) # Commented out for now - until we can implement this feature in the future ''' self.actionManualSelection = QtWidgets.QAction(MainWindow) self.actionManualSelection.setCheckable(True) self.actionManualSelection.setChecked(False) self.actionManualSelection.setObjectName("actionManualSelection") ''' ''' self.action1 = QtWidgets.QAction(MainWindow) self.action1.setCheckable(True) self.action1.setObjectName("action1") self.action2 = QtWidgets.QAction(MainWindow) self.action2.setObjectName("action2") self.action3 = QtWidgets.QAction(MainWindow) self.action3.setCheckable(True) self.action3.setObjectName("action3") ''' # Adding menu actions under "FILE" self.menuFile.addAction(self.actionUpload_new) self.menuFile.addAction(self.actionOpen) self.menuFile.addSeparator() self.menuFile.addAction(self.actionSave) self.menuFile.addAction(self.actionKalman) #Adding menu actions under "OPTIONS" # self.menuOptions.addAction(self.actionEllipseFitting) # self.menuOptions.addAction(self.actionManualSelection) #Creating QActionGroup to have radio buttons in the file menu, code w/o radio buttons commented out above self.ag = QtGui.QActionGroup(MainWindow, exclusive=True) self.a1 = self.ag.addAction(self.actionEllipseFitting) self.menuOptions.addAction(self.a1) # self.a2 = self.ag.addAction(self.actionManualSelection) # self.menuOptions.addAction(self.a2) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuOptions.menuAction()) self.retranslateUi(MainWindow) self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow)