def build_progress_bar(fig, lastframe, height): vbox = QtWidgets.QVBoxLayout() fig.canvas.setLayout(vbox) width = int(fig.bbox.height * height) bar = QtGui.QSlider(QtCore.Qt.Horizontal) bar.setRange(0, lastframe) bar.setSingleStep(1) bar.setMinimumSize(QtCore.QSize(0, width)) # Add an auto-updating label for the slider value = QtWidgets.QLabel('0 of %d' % lastframe) value.setMinimumSize(QtCore.QSize(0, width)) value.connect(bar, QtCore.SIGNAL('valueChanged(int)'), lambda frame: value.setText("%d of %d" % (frame, lastframe))) hbox = QtWidgets.QHBoxLayout() hbox.addWidget(bar) hbox.addWidget(value) # This spacer will help force the slider down to the bottom of the canvas vspace = QtGui.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) vbox.addItem(vspace) vbox.addLayout(hbox) return bar
def generateLegendMenu(self): self.menuLegend = QtGui.QMenu(self.menubar) self.menuLegend.setTitle('Legend') self.actionGenerateLegend = QtGui.QAction(self) self.actionGenerateLegend.setText('Generate Draggable Legend') self.menuLegend.addAction(self.actionGenerateLegend) self.menubar.addAction(self.menuLegend.menuAction()) self.connect(self.actionGenerateLegend, QtCore.SIGNAL('triggered()'), self.generateLegend)
def closeEvent(self, QCloseEvent): # plt.clf() self.emit(QtCore.SIGNAL("WINDOW_CLOSED")) print self.windowTitle + ' Closed'
def __init__(self, windowTitle='Window', x=0, y=0, legend=True, parent=None): super(Window, self).__init__(parent) # set UI style -- options: u'Windows', u'Motif', u'CDE', u'Plastique', u'Cleanlooks', u'Macintosh (aqua)' # QtGui.QApplication.setStyle(QtGui.QStyleFactory.create(u'Plastique')) # layout self.setAutoFillBackground(True) self.centralwidget = QtGui.QWidget(self) self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget) self.verticalLayout.setMargin(0) self.setCentralWidget(self.centralwidget) self.setBackgroundColor(QtCore.Qt.white) # create menu bar self.menubar = QtGui.QMenuBar(self) self.menubar.setGeometry(QtCore.QRect(0, 0, 340, 22)) # create menus self.menuFile = QtGui.QMenu(self.menubar) self.menuFile.setTitle("File") self.menuConfigurePlot = QtGui.QMenu(self.menubar) self.menuConfigurePlot.setTitle("Configure Plot") # create actions self.actionSaveAs = QtGui.QAction(self) self.actionSaveAs.setText("Save As...") self.actionConfigureSubplots = QtGui.QAction(self) self.actionConfigureSubplots.setText('Configure Subplots') self.actionConfigureAxis = QtGui.QAction(self) self.actionConfigureAxis.setText('Configure Axis and Curve') # add actions to menu self.menuFile.addAction(self.actionSaveAs) self.menubar.addAction(self.menuFile.menuAction()) self.menuConfigurePlot.addAction(self.actionConfigureSubplots) self.menuConfigurePlot.addAction(self.actionConfigureAxis) self.menubar.addAction(self.menuConfigurePlot.menuAction()) # enable menu bar self.setMenuBar(self.menubar) QtCore.QMetaObject.connectSlotsByName(self) # get arguments self.windowTitle = windowTitle # moves menu bar into application -- mac only windows sux self.menubar.setNativeMenuBar(False) # set window title self.setWindowTitle(self.windowTitle) self.initCanvas() self.toolbar = CustomToolbar(self.canvas, self) self.verticalLayout.addWidget(self.toolbar) self.setWindowPosition(x, y) # bind file menu actions self.connect(self.actionSaveAs, QtCore.SIGNAL('triggered()'), self.toolbar.save_figure) # bind configure menu actions self.connect(self.actionConfigureSubplots, QtCore.SIGNAL('triggered()'), self.toolbar.configure_subplots) self.connect(self.actionConfigureAxis, QtCore.SIGNAL('triggered()'), self.toolbar.edit_parameters) if legend: self.generateLegendMenu() # create instance of Plotter class self.plotter = plotter.Plotter()
def __init__(self, fig, raddisp, data, polygons, lines, stormdata): self.fig = fig self.raddisp = raddisp self.data = data self.i = 0 self.selected = None self.polygons = polygons self.lines = lines self.stormdata = stormdata self.stormmap = polygons.create_stormmap(stormdata) self._hidekey = None self._hidecid = None KeymapControl.__init__(self, fig) PickControl.__init__(self, fig) ButtonControl.__init__(self, fig, 0.1, 0.05) self._progress_bar = build_progress_bar(fig, data.shape[0] - 1, 0.02) self._toggle_buttons = build_check_buttons(fig, 0.1) self._mode_buttons = build_radio_buttons(fig, 0.1) self._mode = 'Selection' self._lasso = None self._connect('frame_change', self.update_radar_display) self._connect('frame_change', self.display_stormcells) self._connect('frame_change', self.update_track_display) self._connect('frame_change', self.update_progress_bar) self._connect('select', self.polygons.hilite_polygon) self._connect('deselect', self.polygons.lolite_polygon) self._connect('hide', self.polygons.toggle_polygons) self._connect('delete', self.polygons.delete_polygon) self._connect('delete', self.delete_stormcell) self._connect('create', self.polygons.add_polygon) self._connect('create', self.add_stormcell) self._connect('save', lambda x: self.save_stormdata('polygons_new.shp')) self._connect('help', lambda x: self.display_help_menu()) self._connect('button_press_event', self._start_stormcell) self._connect('about', lambda x: self.display_about()) self._mode_buttons.on_clicked(self.set_mode) self._toggle_buttons.on_clicked(self.toggle_visibility) self._mode_buttons.on_clicked(self.set_mode) self.add_key_action('s', 'Selection mode', lambda: self.set_mode('Selection')) self.add_key_action('o', 'Outline mode', lambda: self.set_mode('Outline')) self.fig.canvas.connect( self._progress_bar, QtCore.SIGNAL('valueChanged(int)'), lambda frame: self.change_frame(int(frame) - self.i)) self.add_key_action('left', 'Back a frame', lambda: self.change_frame(-1)) self.add_key_action('right', 'Forward a frame', lambda: self.change_frame(1)) self.add_key_action('H', 'Hide polygons while holding this key', self.enable_hide) self.add_key_action('d', 'Delete the selected stormcell', self.delete_selected) self.add_key_action('w', 'Save the storm data', lambda: self._emit('save', None)) self.add_key_action('h', 'Display this help menu', lambda: self._emit('help', None)) self.add_button_action('|<', lambda: self.change_frame(-1)) self.add_button_action('>|', lambda: self.change_frame(1)) self.add_button_action('Del', self.delete_selected) self.add_button_action('Save', lambda: self._emit('save', None)) self.add_button_action('Help', lambda: self._emit('help', None)) self.add_pick_action(self.select_stormcell) menuactions = { 'save': lambda: self._emit('save', None), 'exit': QtGui.qApp.quit, 'help': lambda: self._emit('help', None), 'about': lambda: self._emit('about', None) } self._mbar = build_menubar(fig, menuactions)