예제 #1
0
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
예제 #2
0
 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)
예제 #3
0
 def closeEvent(self, QCloseEvent):
     # plt.clf()
     self.emit(QtCore.SIGNAL("WINDOW_CLOSED"))
     print self.windowTitle + ' Closed'
예제 #4
0
    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()
예제 #5
0
    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)