def key_press_event(event):
    """
    checks for key presses and reacts accordingly
    """

    if Qt.QKeySequence(event.key()).toString() in ALLOWED_KEYS:
        add_input_to_text(Qt.QKeySequence(event.key()).toString(), InputType.KEYBOARD)

    # Key_Return = "Normal" Enter, Key_Enter = NumPad Enter
    elif event.key() == Qt.Qt.Key_Return or event.key() == Qt.Qt.Key_Enter:
        evaluate(EVALUATE, InputType.KEYBOARD)
    elif event.key() == Qt.Qt.Key_Backspace:
        backspace(BACKSPACE, InputType.KEYBOARD)
예제 #2
0
def add_shortcut(key: int,
                 handler: Callable[[], None],
                 widget: Optional[Qt.QWidget] = None) -> None:
    if widget is None:
        widget = main_window()
    Qt.QShortcut(Qt.QKeySequence(key),
                 widget).activated.connect(handler)  # type: ignore
예제 #3
0
    def loadControls(self) -> None:
        """Load widgets for this form."""
        if self.pushButtonAcceptContinue:
            self.pushButtonAcceptContinue.hide()

        if self.pushButtonAccept:
            self.pushButtonAccept.hide()

        if self.pushButtonCancel:
            self.pushButtonCancel.hide()

        if self.pushButtonFirst:
            self.pushButtonFirst.hide()

        if self.pushButtonPrevious:
            self.pushButtonPrevious.hide()

        if self.pushButtonNext:
            self.pushButtonNext.hide()

        if self.pushButtonLast:
            self.pushButtonLast.hide()

        if self.bottomToolbar and self.toolButtonClose:
            self.toolButtonClose.hide()

        self.bottomToolbar = QtWidgets.QFrame()

        if self.bottomToolbar:
            self.bottomToolbar.setMinimumSize(self.iconSize)
            hblay = QtWidgets.QHBoxLayout()
            hblay.setContentsMargins(0, 0, 0, 0)
            hblay.setSpacing(0)
            hblay.addStretch()
            self.bottomToolbar.setLayout(hblay)
            self.bottomToolbar.setFocusPolicy(QtCore.Qt.NoFocus)
            self.layout_.addWidget(self.bottomToolbar)

        else:
            raise Exception("bottomToolbar is missing!")
        # if self.layout:
        #    self.layout = None
        # Limpiamos la toolbar

        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy(0),
                                           QtWidgets.QSizePolicy.Policy(0))
        sizePolicy.setHeightForWidth(True)

        pbSize = self.iconSize

        if settings.config.value("application/isDebuggerMode", False):

            pushButtonExport = QtWidgets.QToolButton()
            pushButtonExport.setObjectName("pushButtonExport")
            pushButtonExport.setSizePolicy(sizePolicy)
            pushButtonExport.setMinimumSize(pbSize)
            pushButtonExport.setMaximumSize(pbSize)
            pushButtonExport.setIcon(
                QtGui.QIcon(
                    utils_base.filedir("./core/images/icons",
                                       "gtk-properties.png")))
            pushButtonExport.setShortcut(Qt.QKeySequence(self.tr("F3")))
            pushButtonExport.setWhatsThis("Exportar a XML(F3)")
            pushButtonExport.setToolTip("Exportar a XML(F3)")
            pushButtonExport.setFocusPolicy(QtCore.Qt.NoFocus)
            self.bottomToolbar.layout().addWidget(pushButtonExport)
            pushButtonExport.clicked.connect(self.exportToXml)

            if settings.config.value("ebcomportamiento/show_snaptshop_button",
                                     False):
                push_button_snapshot = QtWidgets.QToolButton()
                push_button_snapshot.setObjectName("pushButtonSnapshot")
                push_button_snapshot.setSizePolicy(sizePolicy)
                push_button_snapshot.setMinimumSize(pbSize)
                push_button_snapshot.setMaximumSize(pbSize)
                push_button_snapshot.setIcon(
                    QtGui.QIcon(
                        utils_base.filedir("./core/images/icons",
                                           "gtk-paste.png")))
                push_button_snapshot.setShortcut(Qt.QKeySequence(
                    self.tr("F8")))
                push_button_snapshot.setWhatsThis("Capturar pantalla(F8)")
                push_button_snapshot.setToolTip("Capturar pantalla(F8)")
                push_button_snapshot.setFocusPolicy(QtCore.Qt.NoFocus)
                self.bottomToolbar.layout().addWidget(push_button_snapshot)
                push_button_snapshot.clicked.connect(self.saveSnapShot)

            spacer = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                           QtWidgets.QSizePolicy.Fixed)
            self.bottomToolbar.layout().addItem(spacer)

        if self.cursor().modeAccess() in (self.cursor().Edit,
                                          self.cursor().Browse):
            if not self.pushButtonFirst:
                self.pushButtonFirst = QtWidgets.QToolButton()
                self.pushButtonFirst.setObjectName("pushButtonFirst")
                self.pushButtonFirst.setIcon(
                    QtGui.QIcon(
                        utils_base.filedir("./core/images/icons",
                                           "gtk-goto-first-ltr.png")))
                self.pushButtonFirst.clicked.connect(self.firstRecord)
                self.pushButtonFirst.setSizePolicy(sizePolicy)
                self.pushButtonFirst.setMaximumSize(pbSize)
                self.pushButtonFirst.setMinimumSize(pbSize)
                self.pushButtonFirst.setShortcut(Qt.QKeySequence(
                    self.tr("F5")))
                self.pushButtonFirst.setWhatsThis(
                    "Aceptar los cambios e ir al primer registro (F5)")
                self.pushButtonFirst.setToolTip(
                    "Aceptar los cambios e ir al primer registro (F5)")
                self.pushButtonFirst.setFocusPolicy(QtCore.Qt.NoFocus)
                self.bottomToolbar.layout().addWidget(self.pushButtonFirst)
                # self.pushButtonFirst.show()

            if not self.pushButtonPrevious:
                self.pushButtonPrevious = QtWidgets.QToolButton()
                self.pushButtonPrevious.setObjectName("pushButtonPrevious")
                self.pushButtonPrevious.setIcon(
                    QtGui.QIcon(
                        utils_base.filedir("./core/images/icons",
                                           "gtk-go-back-ltr.png")))
                self.pushButtonPrevious.clicked.connect(self.previousRecord)
                self.pushButtonPrevious.setSizePolicy(sizePolicy)
                self.pushButtonPrevious.setMaximumSize(pbSize)
                self.pushButtonPrevious.setMinimumSize(pbSize)
                self.pushButtonPrevious.setShortcut(
                    Qt.QKeySequence(self.tr("F6")))
                self.pushButtonPrevious.setWhatsThis(
                    "Aceptar los cambios e ir al registro anterior (F6)")
                self.pushButtonPrevious.setToolTip(
                    "Aceptar los cambios e ir al registro anterior (F6)")
                self.pushButtonPrevious.setFocusPolicy(QtCore.Qt.NoFocus)
                self.bottomToolbar.layout().addWidget(self.pushButtonPrevious)
                # self.pushButtonPrevious.show()

            if not self.pushButtonNext:
                self.pushButtonNext = QtWidgets.QToolButton()
                self.pushButtonNext.setObjectName("pushButtonNext")
                self.pushButtonNext.setIcon(
                    QtGui.QIcon(
                        utils_base.filedir("./core/images/icons",
                                           "gtk-go-back-rtl.png")))
                self.pushButtonNext.clicked.connect(self.nextRecord)
                self.pushButtonNext.setSizePolicy(sizePolicy)
                self.pushButtonNext.setMaximumSize(pbSize)
                self.pushButtonNext.setMinimumSize(pbSize)
                self.pushButtonNext.setShortcut(Qt.QKeySequence(self.tr("F7")))
                self.pushButtonNext.setWhatsThis(
                    "Aceptar los cambios e ir al registro siguiente (F7)")
                self.pushButtonNext.setToolTip(
                    "Aceptar los cambios e ir al registro siguiente (F7)")
                self.pushButtonNext.setFocusPolicy(QtCore.Qt.NoFocus)
                self.bottomToolbar.layout().addWidget(self.pushButtonNext)
                # self.pushButtonNext.show()

            if not self.pushButtonLast:
                self.pushButtonLast = QtWidgets.QToolButton()
                self.pushButtonLast.setObjectName("pushButtonLast")
                self.pushButtonLast.setIcon(
                    QtGui.QIcon(
                        utils_base.filedir("./core/images/icons",
                                           "gtk-goto-last-ltr.png")))
                self.pushButtonLast.clicked.connect(self.lastRecord)
                self.pushButtonLast.setSizePolicy(sizePolicy)
                self.pushButtonLast.setMaximumSize(pbSize)
                self.pushButtonLast.setMinimumSize(pbSize)
                self.pushButtonLast.setShortcut(Qt.QKeySequence(self.tr("F8")))
                self.pushButtonLast.setWhatsThis(
                    "Aceptar los cambios e ir al último registro (F8)")
                self.pushButtonLast.setToolTip(
                    "Aceptar los cambios e ir al último registro (F8)")
                self.pushButtonLast.setFocusPolicy(QtCore.Qt.NoFocus)
                self.bottomToolbar.layout().addWidget(self.pushButtonLast)
                # self.pushButtonLast.show()

        if not self.cursor().modeAccess() == self.cursor().Browse:
            self.pushButtonAcceptContinue = QtWidgets.QToolButton()
            self.pushButtonAcceptContinue.setObjectName(
                "pushButtonAcceptContinue")
            self.pushButtonAcceptContinue.clicked.connect(self.acceptContinue)
            self.pushButtonAcceptContinue.setSizePolicy(sizePolicy)
            self.pushButtonAcceptContinue.setMaximumSize(pbSize)
            self.pushButtonAcceptContinue.setMinimumSize(pbSize)
            self.pushButtonAcceptContinue.setIcon(
                QtGui.QIcon(
                    utils_base.filedir("./core/images/icons",
                                       "gtk-refresh.png")))
            self.pushButtonAcceptContinue.setShortcut(
                Qt.QKeySequence(self.tr("F9")))
            self.pushButtonAcceptContinue.setWhatsThis(
                "Aceptar los cambios y continuar con la edición de un nuevo registro (F9)"
            )
            self.pushButtonAcceptContinue.setToolTip(
                "Aceptar los cambios y continuar con la edición de un nuevo registro (F9)"
            )
            self.pushButtonAcceptContinue.setFocusPolicy(QtCore.Qt.NoFocus)
            self.bottomToolbar.layout().addWidget(
                self.pushButtonAcceptContinue)
            if not self.showAcceptContinue_:
                self.pushButtonAcceptContinue.close()
                # self.pushButtonAcceptContinue.show()

            if not self.pushButtonAccept:
                self.pushButtonAccept = QtWidgets.QToolButton()
                self.pushButtonAccept.setObjectName("pushButtonAccept")
                self.pushButtonAccept.clicked.connect(self.accept)

            self.pushButtonAccept.setSizePolicy(sizePolicy)
            self.pushButtonAccept.setMaximumSize(pbSize)
            self.pushButtonAccept.setMinimumSize(pbSize)
            self.pushButtonAccept.setIcon(
                QtGui.QIcon(
                    utils_base.filedir("./core/images/icons", "gtk-save.png")))
            self.pushButtonAccept.setShortcut(Qt.QKeySequence(self.tr("F10")))
            self.pushButtonAccept.setWhatsThis(
                "Aceptar los cambios y cerrar formulario (F10)")
            self.pushButtonAccept.setToolTip(
                "Aceptar los cambios y cerrar formulario (F10)")
            self.pushButtonAccept.setFocusPolicy(QtCore.Qt.NoFocus)
            self.bottomToolbar.layout().addWidget(self.pushButtonAccept)
            # self.pushButtonAccept.show()

        if not self.pushButtonCancel:
            self.pushButtonCancel = QtWidgets.QToolButton()
            self.pushButtonCancel.setObjectName("pushButtonCancel")
            try:
                self.cursor().autoCommit.connect(self.disablePushButtonCancel)
            except Exception:
                pass

            self.pushButtonCancel.clicked.connect(self.reject)

        self.pushButtonCancel.setSizePolicy(sizePolicy)
        self.pushButtonCancel.setMaximumSize(pbSize)
        self.pushButtonCancel.setMinimumSize(pbSize)
        self.pushButtonCancel.setShortcut(Qt.QKeySequence(self.tr("Esc")))
        self.pushButtonCancel.setIcon(
            QtGui.QIcon(
                utils_base.filedir("./core/images/icons", "gtk-stop.png")))
        if not self.cursor().modeAccess() == self.cursor().Browse:
            self.pushButtonCancel.setFocusPolicy(QtCore.Qt.NoFocus)
            self.pushButtonCancel.setWhatsThis(
                "Cancelar los cambios y cerrar formulario (Esc)")
            self.pushButtonCancel.setToolTip(
                "Cancelar los cambios y cerrar formulario (Esc)")
        else:
            self.pushButtonCancel.setFocusPolicy(QtCore.Qt.StrongFocus)
            self.pushButtonCancel.setFocus()
            # pushButtonCancel->setAccel(4096); FIXME
            self.pushButtonCancel.setWhatsThis(
                "Aceptar y cerrar formulario (Esc)")
            self.pushButtonCancel.setToolTip(
                "Aceptar y cerrar formulario (Esc)")

        # pushButtonCancel->setDefault(true);
        self.bottomToolbar.layout().addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed))
        self.bottomToolbar.layout().addWidget(self.pushButtonCancel)
        # self.pushButtonAccept.show()

        self.setFocusPolicy(QtCore.Qt.NoFocus)

        # self.toolButtonAccept = QtGui.QToolButton()
        # self.toolButtonAccept.setIcon(QtGui.QIcon(utils_base.filedir("./core/images/icons","gtk-add.png")))
        # self.toolButtonAccept.clicked.connect(self.validateForm)
        # self.bottomToolbar.layout.addWidget(self.toolButtonAccept)
        self.inicializeControls()
예제 #4
0
    def _init_ui(self):
        # log setup TODO: define None Value - distinguish from empty
        os.makedirs(self.log_dir, exist_ok=True)
        self.cur_log_path = os.path.join(self.log_dir, self.dataset_name)
        self.tags = ['model err', 'model diff', 'label err']
        if os.path.isfile(self.cur_log_path):
            self.log_file = pd.read_csv(
                self.cur_log_path,
                index_col=['file', 'data'],
            )

            log_file_index = self.log_file.index.get_level_values('file')
            new_file = []
            for f in self.data_files:
                if f not in log_file_index:
                    new_file.append(f)
            if new_file:  # append index for new file into logs
                file_df = pd.DataFrame(index=pd.Index([(f, 0)
                                                       for f in new_file],
                                                      name=['file', 'data']),
                                       columns=self.tags)
                self.log_file = pd.concat([self.log_file, file_df],
                                          copy=False).sort_index()
            assert all(self.log_file.columns == self.tags)
        else:
            self.log_file = pd.DataFrame(index=pd.Index(
                [(f, 0) for f in self.data_files], name=['file', 'data']),
                                         columns=self.tags)
        self.need_to_save = False

        # window config
        self.setWindowTitle('Model Viewer')
        self.setToolButtonStyle(qtc.Qt.ToolButtonTextUnderIcon)  # icon style
        self.setWindowFlags(self.windowFlags() | qtc.Qt.WindowSystemMenuHint
                            | qtc.Qt.WindowMinMaxButtonsHint)

        # save log - action
        save_log = qtwg.QAction('save log', self)
        save_log.setStatusTip('save log')
        save_log.setShortcuts(Qt.QKeySequence('Ctrl+S'))
        save_log.setShortcutContext(qtc.Qt.ApplicationShortcut)
        save_log.triggered.connect(self._save_log)

        # next/last - action
        next_example = qtwg.QAction('next', self)
        next_example.setStatusTip('next example')
        next_example.setShortcuts(Qt.QKeySequence('Alt+Right'))
        next_example.setShortcutContext(qtc.Qt.ApplicationShortcut)
        next_example.triggered.connect(
            lambda: self._show_example(self.file_idx, self.data_idx + 1))

        last_example = qtwg.QAction('last_example', self)
        last_example.setStatusTip('last example')
        last_example.setShortcuts(Qt.QKeySequence('Alt+Left'))
        last_example.setShortcutContext(qtc.Qt.ApplicationShortcut)
        last_example.triggered.connect(
            lambda: self._show_example(self.file_idx, self.data_idx - 1))

        # refresh all - action
        refresh = qtwg.QAction('refresh', self)
        refresh.setStatusTip('refresh to begining')
        refresh.triggered.connect(self._refresh)

        # current & all data files - combo
        combo = qtwg.QComboBox()
        combo.addItems(self.data_files)
        combo.setEditable(False)
        self.path_widget = combo
        combo.currentIndexChanged.connect(
            lambda i: self._show_example(file_idx=i, data_idx=0))

        # current & all data in the current file - combo
        combo = qtwg.QComboBox()
        combo.setEditable(False)
        self.data_widget = combo  # no data before file loaded
        combo.currentIndexChanged.connect(
            lambda i: self._show_example(file_idx=self.file_idx, data_idx=i))

        # play examples set-up
        play_examples = qtwg.QAction('play', self)
        play_examples.setStatusTip('play through all examples as auto-ppt')
        play_examples.triggered.connect(self._play_all_examples)
        self.timer = qtc.QTimer()
        self.timer.timeout.connect(lambda: self._show_example(
            file_idx=self.file_idx, data_idx=self.data_idx + 1))
        self.timer_step = 1 * 1000
        self.play_widget = play_examples

        play_setting = qtwg.QLineEdit()
        play_setting.setFixedWidth(40)
        play_setting.setMaxLength(6)
        play_setting.setPlaceholderText('1s')
        play_setting.textChanged.connect(self._set_timer_step)

        # tagging cur example - line
        self.tag_widget = {}
        for cur_t in self.tags:
            line = qtwg.QLineEdit()
            line.setFixedWidth(100)
            line.setClearButtonEnabled(True)
            self.tag_widget[cur_t] = line

        # config toolbar, statusbar
        toolbar = qtwg.QToolBar("My main toolbar")
        toolbar.addAction(last_example)
        toolbar.addAction(next_example)
        toolbar.addWidget(qtwg.QLabel(self.dataset_dir))
        toolbar.addWidget(self.path_widget)
        toolbar.addWidget(self.data_widget)
        toolbar.addAction(play_examples)
        toolbar.addWidget(play_setting)
        toolbar.addAction(refresh)
        toolbar.addSeparator()  # separate function zone
        for cur_t, t_wg in self.tag_widget.items():
            toolbar.addWidget(qtwg.QLabel(cur_t + ':'))
            toolbar.addWidget(t_wg)
        toolbar.addAction(save_log)
        self.addToolBar(toolbar)
        self.setStatusBar(Qt.QStatusBar(self))

        # layout framework
        layout_main = qtwg.QHBoxLayout()

        # image - image label
        img_label = qtwg.QLabel('image')
        img_label.setScaledContents(True)
        img_label.setPixmap(qtui.QPixmap())
        layout_main.addWidget(img_label)
        self.img_widget = img_label

        # input/label - matlibplot widget
        label_layout = qtwg.QVBoxLayout()
        feature_names = ' '.join(self.feeder.feature_names)
        label_metaline = qtwg.QLabel(feature_names)
        label_metaline.setWordWrap(True)
        label_metaline.setAlignment(qtc.Qt.AlignCenter)
        label_widget = Matlibplot_Widget('input')
        label_layout.addWidget(label_metaline)
        label_layout.addWidget(label_widget)
        layout_main.addLayout(label_layout)
        self.label_widget = label_widget

        # prediction - tab
        pred_tab = qtwg.QTabWidget()
        pred_tab.setDocumentMode(True)
        pred_tab.setTabPosition(Qt.QTabWidget.North)
        pred_tab.setMovable(True)
        layout_main.addWidget(pred_tab)
        self.pred_widget = pred_tab

        # set layout to central widget
        central_widget = qtwg.QWidget()
        central_widget.setLayout(layout_main)
        self.setCentralWidget(central_widget)

        self._load_file(0)
        self._fill_layout()
예제 #5
0
    def __init__(self, window_name, options, parent=None):
        QtGui.QMainWindow.__init__(self, parent)

        # give Ctrl+C back to system
        signal.signal(signal.SIGINT, signal.SIG_DFL)

        self.gui = uic.loadUi(
            os.path.join(os.path.dirname(__file__), 'main_window.ui'), self)

        self.update_timer = Qt.QTimer()

        # socket addresses
        rpc_adr_server = "tcp://" + options.servername + ":6666"
        rpc_adr_client = "tcp://" + options.clientname + ":6667"
        probe_adr_server = "tcp://" + options.servername + ":5556"
        probe_adr_client = "tcp://" + options.clientname + ":5557"

        # ZeroMQ
        self.probe_manager = zeromq.probe_manager()
        self.probe_manager.add_socket(probe_adr_server, 'float32',
                                      self.plot_data_server)
        self.probe_manager.add_socket(probe_adr_client, 'float32',
                                      self.plot_data_client)

        self.rpc_mgr_server = zeromq.rpc_manager()
        self.rpc_mgr_server.set_request_socket(rpc_adr_server)
        self.rpc_mgr_client = zeromq.rpc_manager()
        self.rpc_mgr_client.set_request_socket(rpc_adr_client)

        self.gui.setWindowTitle(window_name)
        self.gui.qwtPlotServer.setTitle("Signal Scope")
        self.gui.qwtPlotServer.setAxisTitle(Qwt.QwtPlot.xBottom, "Samples")
        self.gui.qwtPlotServer.setAxisTitle(Qwt.QwtPlot.yLeft, "Amplitude")
        self.gui.qwtPlotServer.setAxisScale(Qwt.QwtPlot.xBottom, 0, 100)
        self.gui.qwtPlotServer.setAxisScale(Qwt.QwtPlot.yLeft, -2, 2)
        self.gui.qwtPlotClient.setTitle("Signal Scope")
        self.gui.qwtPlotClient.setAxisTitle(Qwt.QwtPlot.xBottom, "Samples")
        self.gui.qwtPlotClient.setAxisTitle(Qwt.QwtPlot.yLeft, "Amplitude")
        self.gui.qwtPlotClient.setAxisScale(Qwt.QwtPlot.xBottom, 0, 100)
        self.gui.qwtPlotClient.setAxisScale(Qwt.QwtPlot.yLeft, -2, 2)

        # Grid
        pen = Qt.QPen(Qt.Qt.DotLine)
        pen.setColor(Qt.Qt.black)
        pen.setWidth(0)
        grid_server = Qwt.QwtPlotGrid()
        grid_client = Qwt.QwtPlotGrid()
        grid_server.setPen(pen)
        grid_client.setPen(pen)
        grid_server.attach(self.gui.qwtPlotServer)
        grid_client.attach(self.gui.qwtPlotClient)

        #Signals
        self.connect(self.update_timer, QtCore.SIGNAL("timeout()"),
                     self.probe_manager.watcher)
        self.connect(self.gui.pushButtonRunServer, QtCore.SIGNAL("clicked()"),
                     self.start_fg_server)
        self.connect(self.gui.pushButtonStopServer, QtCore.SIGNAL("clicked()"),
                     self.stop_fg_server)
        self.connect(self.gui.pushButtonRunClient, QtCore.SIGNAL("clicked()"),
                     self.start_fg_client)
        self.connect(self.gui.pushButtonStopClient, QtCore.SIGNAL("clicked()"),
                     self.stop_fg_client)
        self.connect(self.gui.comboBox,
                     QtCore.SIGNAL("currentIndexChanged(QString)"),
                     self.set_waveform)
        self.connect(self.gui.spinBox, QtCore.SIGNAL("valueChanged(int)"),
                     self.set_gain)
        self.shortcut_start = QtGui.QShortcut(Qt.QKeySequence("Ctrl+S"),
                                              self.gui)
        self.shortcut_stop = QtGui.QShortcut(Qt.QKeySequence("Ctrl+C"),
                                             self.gui)
        self.shortcut_exit = QtGui.QShortcut(Qt.QKeySequence("Ctrl+D"),
                                             self.gui)
        self.connect(self.shortcut_exit, QtCore.SIGNAL("activated()"),
                     self.gui.close)

        # start update timer
        self.update_timer.start(30)
예제 #6
0
    def loadControls(self) -> None:
        """Load form controls."""

        self.bottomToolbar = QtWidgets.QFrame()
        if self.bottomToolbar:
            self.bottomToolbar.setMaximumHeight(64)
            self.bottomToolbar.setMinimumHeight(16)
            hblay = QtWidgets.QHBoxLayout()
            hblay.setContentsMargins(0, 0, 0, 0)
            hblay.setSpacing(0)
            hblay.addStretch()
            self.bottomToolbar.setLayout(hblay)
            self.bottomToolbar.setFocusPolicy(QtCore.Qt.NoFocus)
            self.layout_.addWidget(self.bottomToolbar)

        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy(0),
                                           QtWidgets.QSizePolicy.Policy(0))
        sizePolicy.setHeightForWidth(True)

        pbSize = self.iconSize
        if settings.config.value("application/isDebuggerMode", False):

            pushButtonExport = QtWidgets.QToolButton(self)
            pushButtonExport.setObjectName("pushButtonExport")
            pushButtonExport.setSizePolicy(sizePolicy)
            pushButtonExport.setMinimumSize(pbSize)
            pushButtonExport.setMaximumSize(pbSize)
            pushButtonExport.setIcon(
                QtGui.QIcon(
                    utils_base.filedir("./core/images/icons",
                                       "gtk-properties.png")))
            pushButtonExport.setShortcut(Qt.QKeySequence(self.tr("F3")))
            pushButtonExport.setWhatsThis("Exportar a XML(F3)")
            pushButtonExport.setToolTip("Exportar a XML(F3)")
            pushButtonExport.setFocusPolicy(QtCore.Qt.NoFocus)
            self.bottomToolbar.layout().addWidget(pushButtonExport)
            pushButtonExport.clicked.connect(self.exportToXml)

            if settings.config.value("ebcomportamiento/show_snaptshop_button",
                                     False):
                push_button_snapshot = QtWidgets.QToolButton(self)
                push_button_snapshot.setObjectName("pushButtonSnapshot")
                push_button_snapshot.setSizePolicy(sizePolicy)
                push_button_snapshot.setMinimumSize(pbSize)
                push_button_snapshot.setMaximumSize(pbSize)
                push_button_snapshot.setIcon(
                    QtGui.QIcon(
                        utils_base.filedir("./core/images/icons",
                                           "gtk-paste.png")))
                push_button_snapshot.setShortcut(Qt.QKeySequence(
                    self.tr("F8")))
                push_button_snapshot.setWhatsThis("Capturar pantalla(F8)")
                push_button_snapshot.setToolTip("Capturar pantalla(F8)")
                push_button_snapshot.setFocusPolicy(QtCore.Qt.NoFocus)
                self.bottomToolbar.layout().addWidget(push_button_snapshot)
                push_button_snapshot.clicked.connect(self.saveSnapShot)

            spacer = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed,
                                           QtWidgets.QSizePolicy.Fixed)
            self.bottomToolbar.layout().addItem(spacer)

        if not self.pushButtonAccept:
            self.pushButtonAccept = QtWidgets.QToolButton(self)
            self.pushButtonAccept.setObjectName("pushButtonAccept")
            self.pushButtonAccept.clicked.connect(self.accept)

        self.pushButtonAccept.setSizePolicy(sizePolicy)
        self.pushButtonAccept.setMaximumSize(pbSize)
        self.pushButtonAccept.setMinimumSize(pbSize)
        self.pushButtonAccept.setIcon(
            QtGui.QIcon(
                utils_base.filedir("./core/images/icons", "gtk-save.png")))
        # pushButtonAccept->setAccel(Qt.QKeySequence(Qt::Key_F10)); FIXME
        self.pushButtonAccept.setFocus()
        self.pushButtonAccept.setWhatsThis(
            "Seleccionar registro actual y cerrar formulario (F10)")
        self.pushButtonAccept.setToolTip(
            "Seleccionar registro actual y cerrar formulario (F10)")
        self.pushButtonAccept.setFocusPolicy(QtCore.Qt.NoFocus)
        self.bottomToolbar.layout().addWidget(self.pushButtonAccept)
        self.pushButtonAccept.show()

        if not self.pushButtonCancel:
            self.pushButtonCancel = QtWidgets.QToolButton(self)
            self.pushButtonCancel.setObjectName("pushButtonCancel")
            self.pushButtonCancel.clicked.connect(self.reject)

        self.pushButtonCancel.setSizePolicy(sizePolicy)
        self.pushButtonCancel.setMaximumSize(pbSize)
        self.pushButtonCancel.setMinimumSize(pbSize)
        self.pushButtonCancel.setIcon(
            QtGui.QIcon(
                utils_base.filedir("./core/images/icons", "gtk-stop.png")))
        self.pushButtonCancel.setFocusPolicy(QtCore.Qt.NoFocus)
        # pushButtonCancel->setAccel(Esc); FIXME
        self.pushButtonCancel.setWhatsThis(
            "Cerrar formulario sin seleccionar registro (Esc)")
        self.pushButtonCancel.setToolTip(
            "Cerrar formulario sin seleccionar registro (Esc)")
        self.bottomToolbar.layout().addWidget(self.pushButtonCancel)
        self.pushButtonCancel.show()
        if self.cursor_ is None:
            raise Exception("Cursor is empty!.")
        self.cursor_.setEdition(False)
        self.cursor_.setBrowse(False)
        self.cursor_.recordChoosed.connect(self.accept)