Example #1
0
    def save_design(self, _=None):
        """Handles click on save design."""
        if self.design:
            # get file path
            filename = self.design.save_path
            if not filename:
                QMessageBox.warning(
                    self, 'Warning', 'This  will save a .metal.py script '
                    'that needs to be copied into a jupyter notebook to run.'
                    'The "Load" button has not yet been implemented.')

                filename = QFileDialog.getSaveFileName(
                    None,
                    'Select a new location to save Metal design to',
                    self.design.get_design_name() + '.metal.py',
                    selectedFilter='*.metal.py')[0]
                self.design.save_path = filename
            # save python script to file path
            pyscript = self.design.to_python_script()
            with open(filename, 'w') as f:
                f.write(pyscript)

            #make it clear it's saving
            saving_dialog = QDialog(self)
            saving_dialog.setWindowModality(Qt.NonModal)
            v = QVBoxLayout()
            saving_dialog.setLayout(v)
            v.addWidget(QLabel("Saving..."))
            saving_dialog.open()
            saving_dialog.show()
            QTimer.singleShot(200, saving_dialog.close)
        else:
            self.logger.info('No design present.')
            QMessageBox.warning(self, 'Warning', 'No design present! Can'
                                't save')
Example #2
0
def to_login(next_window):
    def _verify():

        import hashlib
        from datetime import datetime
        day = datetime.today().strftime('%Y%m')
        #signature = hashlib.sha256('jiedanjishiben'+day).hexdigest()[:6]
        signature = day
        password = loginUi.lineEdit_password.text()

        if password == signature:
            loginDialog.close()
            next_window.show()
            return True
        else:
            from PySide2.QtWidgets import QMessageBox
            msg = QMessageBox()
            msg.setText("请重新输入")
            msg.setInformativeText("或者添加公众号获取密码")
            msg.setWindowTitle("密码错误")
            msg.setDetailedText("公众号: \n结丹记事本儿")
            msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
            retval = msg.exec_()
            return retval
            #msg.buttonClicked.connect(msgbtn)    

    
    loginUi = Ui_Dialog_password()
    loginDialog = QDialog()
    loginUi.setupUi(loginDialog)
    loginUi.pushButton_login.clicked.connect(_verify)
    loginDialog.show()
Example #3
0
    def submit_job(self):
        if self.xsd_files_item == []: return
        self.selected_items = []
        for i in self.xsd_files_item:
            if i.isSelected():
                self.selected_items.append(str(i.file_path))

        self.tmp_xvis = xvis = self.vsp.get_XVI_from_relative_xsd_files(
            self.selected_items)
        new_items = []

        for i in xvis:
            if i.status != XVI_Status.NotSubmitted:
                reply = QMessageBox.information(
                    self.main_window,  # 使用information信息框
                    "提示",
                    "包含已经提交的项目,确定再次提交?",
                    QMessageBox.Yes | QMessageBox.No)
                if reply == QMessageBox.Yes:
                    new_items = self.selected_items
                    break
                else:
                    return
            elif i.status == XVI_Status.NotSubmitted:
                new_items.append(i.relative_xsd_file_name)

        self.selected_items = new_items

        reply = QMessageBox.information(
            self.main_window, "提示",
            "将提交以下项目,请确认\n" + "\n".join(self.selected_items),
            QMessageBox.Yes | QMessageBox.No)
        if reply == QMessageBox.No: return

        if len(self.vsp.job_submit_items) == 0:
            QMessageBox.information(self.main_window, "提示",
                                    "没有可用的Job Submit配置")
            return

        def ok():
            job_submit = ui.chooseJobSubmit.currentText()
            if job_submit == "":
                QMessageBox.information(a, "提示", "选择一个Job Submit配置")
                return
            else:
                job_submit = self.vsp.job_submit_items[job_submit]
                self.tmp_note = \
                    QInputDialog(self.main_window).getText(self.main_window, "给这批任务添加一个备注", "任务备注")[0]

                self.submit_job_run(job_submit)
                a.close()

        a = QDialog()
        ui = Ui_submitJob()
        ui.setupUi(a)
        for i in self.vsp.job_submit_items:
            ui.chooseJobSubmit.addItem(i)
        a.show()
        ui.submitJobOK.clicked.connect(ok)
Example #4
0
 def open_error_dialog(self):
     error_dialog = QDialog(self)
     label = QLabel()
     label.setText('Sorry...\nNot support this apk.')
     layout = QHBoxLayout()
     layout.addWidget(label)
     error_dialog.setLayout(layout)
     error_dialog.show()
Example #5
0
def show_and_close_window(qtbot: QtBot, template: QDialog):
    """
    Function for displaying and then closing a window/widget. This appears to be necessary in order to make sure
    some interactions with the UI are recognised. Otherwise the UI can behave as though no clicks/button presses/etc
    actually took place which then causes tests to fail even though they ought to pass in theory.
    :param qtbot: The qtbot testing tool.
    :param template: The window/widget to be opened.
    """
    template.show()
    qtbot.waitForWindowShown(template)
Example #6
0
 def resize(self):
     self.timer.stop()
     temp=QDialog()
     temp.ui=Ui_Dialog_Resize(self.image_stack[-1])
     temp.ui.setupUi(temp)
     temp.show()
     temp.exec_()
     self.image_stack.append(temp.ui.image)
     self.timer.start(1)
     pass
Example #7
0
 def save_image_B(self, fname):
     try:
         save_image(fname, self.im_array_B)
     except ValueError:
         dialog = QDialog(self)
         msg = "Invalid filename extension.\nPlease enter a valid image extension (such as .png or .jpg)"
         label = QLabel(msg)
         layout = QHBoxLayout()
         layout.addWidget(label)
         dialog.setLayout(layout)
         dialog.show()
Example #8
0
def show_window_and_wait_for_interaction(qtbot: QtBot, template: QDialog):
    """
    Helper method that allows you to examine a window during testing. Just here for convenience.
    Does nothing if the test is running on Windows because this is bad for Jenkins.
    :param qtbot: The qtbot testing tool.
    :param template: The window/widget to be opened.
    """
    if RUNNING_ON_WINDOWS:
        return
    template.show()
    qtbot.stopForInteraction()
Example #9
0
    def _open_position_dialog(self, item: FSTTreeItem):
        window = Ui_NodeFieldWindow()
        dialog = QDialog(
            self, Qt.WindowSystemMenuHint | Qt.WindowTitleHint
            | Qt.WindowCloseButtonHint)

        window.setupUi(dialog)

        dialog.setWindowTitle(item.text(0))
        dialog.setModal(True)

        window.label.setText("Position:")
        if item.node._position:
            window.plainTextEdit.setPlainText(f"0x{item.node._position:X}")
        else:
            window.plainTextEdit.setPlainText("-1")

        dialog.show()
        if dialog.exec_() != QFileDialog.Accepted:
            return False, ""

        text = window.plainTextEdit.toPlainText()

        try:
            if text.startswith("0x"):
                position = int(text, 16)
            else:
                position = int(text)
        except ValueError:
            dialog = JobFailedDialog(self)
            dialog.setText(
                f"Invalid input \"{text}\" could not be converted to int")
            return False, dialog

        if position < 0:
            if item.node._position:
                item.node._position = None
                self.iso.pre_calc_metadata(self.iso.MaxSize -
                                           self.iso.get_auto_blob_size())
                self.ui.fileSystemStartInfoTextBox.setPlainText(
                    f"0x{item.node._fileoffset:X}")
            return True, ""
        else:
            newPos = min(position, self.iso.MaxSize - 4) & -4
            if item.node._position != newPos:
                item.node._position = newPos
                self.iso.pre_calc_metadata(self.iso.MaxSize -
                                           self.iso.get_auto_blob_size())

            self.ui.fileSystemStartInfoTextBox.setPlainText(
                f"0x{item.node._position:X}")
            return True, ""
Example #10
0
 def cropping(self):
     if type(self.image_stack[-1])==type(None):
         print("lol")
         return
     self.timer.stop()
     temp=QDialog()
     temp.ui=Ui_Dialog(self.image_stack[-1])
     temp.ui.setupUi(temp)
     temp.show()
     temp.exec_()
     self.image_stack.append(temp.ui.image)
     self.timer.start(1)
     pass
Example #11
0
    def handle_dateSelectButton(self):
        # method to handle the okay button when it is pressed
        def handle_okayButton():
            # get date from calendar widget and create a string out of it
            q_date = calendar.selectedDate()

            if q_date.day() < 10:
                day = str(0) + str(q_date.day())
            else:
                day = str(q_date.day())

            if q_date.month() < 10:
                month = str(0) + str(q_date.month())
            else:
                month = str(q_date.month())

            year = str(q_date.year())

            date = day + '/' + month + '/' + year
            self.dateDisplay.setText(date)
            popup.accept()

        # method to handle the cancel button when it is pressed
        def handle_cancelButton():
            popup.reject()

        # initialise the dialog
        popup = QDialog()
        popup.setWindowTitle('Select Date')

        # create the widgets and connect them to functions
        calendar = QCalendarWidget()
        okayButton = QPushButton('Okay')
        okayButton.clicked.connect(handle_okayButton)
        cancelButton = QPushButton('Cancel')
        cancelButton.clicked.connect(handle_cancelButton)

        # initialise the layout manager
        layout = QVBoxLayout()

        # add the widgets to the layout manager
        layout.addWidget(calendar)
        layout.addWidget(cancelButton)
        layout.addWidget(okayButton)
        popup.setLayout(layout)

        # set the dialog as modal so that the user cannot interact with the main window when the dialog is open
        popup.setModal(True)

        popup.show()
        popup.exec_()
Example #12
0
async def execute_dialog(dialog: QtWidgets.QDialog) -> QtWidgets.QDialog.DialogCode:
    """
    An async version of dialog.exec_, internally using QDialog.show
    :param dialog:
    :return:
    """
    future = asyncio.get_event_loop().create_future()

    dialog.finished.connect(future.set_result)
    try:
        dialog.show()
        return await future
    finally:
        dialog.finished.disconnect(future.set_result)
Example #13
0
    def _open_alignment_dialog(self, item: FSTTreeItem):
        window = Ui_NodeFieldWindow()
        dialog = QDialog(
            self, Qt.WindowSystemMenuHint | Qt.WindowTitleHint
            | Qt.WindowCloseButtonHint)

        window.setupUi(dialog)

        dialog.setWindowTitle(item.text(0))
        dialog.setModal(True)

        window.label.setText("Alignment:")
        if item.node._alignment:
            window.plainTextEdit.setPlainText(str(item.node._alignment))
        else:
            window.plainTextEdit.setPlainText("4")

        dialog.show()
        if dialog.exec_() != QFileDialog.Accepted:
            return False, ""

        text = window.plainTextEdit.toPlainText()

        try:
            if text.startswith("0x"):
                alignment = int(text, 16)
            else:
                alignment = int(text)
        except ValueError:
            dialog = JobFailedDialog(self)
            dialog.setText(
                f"Invalid input \"{text}\" could not be converted to int")
            return False, dialog

        alignment = _round_up_to_power_of_2(max(4, min(alignment, 32768)))
        if item.node.is_file() and item.node._alignment != alignment:
            item.node._alignment = alignment
            self.iso.pre_calc_metadata(self.iso.MaxSize -
                                       self.iso.get_auto_blob_size())
            self.ui.fileSystemStartInfoTextBox.setPlainText(
                f"0x{item.node._fileoffset:X}")
        if item.node.is_dir():
            for child in item.node.rchildren():
                child._alignment = _round_up_to_power_of_2(alignment)
            self.iso.pre_calc_metadata(self.iso.MaxSize -
                                       self.iso.get_auto_blob_size())

        return True, ""
class DialogSteamapiKey:
    steamapi_window: QDialog

    def is_valid_steampi_key(self, key):
        if len(key) == 32:
            return True
        return False

    def steamapi_key_dialog(self):
        self.steamapi_window = QDialog()
        self.steamapi_window.setWindowTitle(_("Set steamapi key"))
        self.steamapi_window.setWindowIcon(self.switcher_logo)

        layout = QVBoxLayout()
        self.steamapi_window.setLayout(layout)

        text_label = QLabel(
            _("Used for getting avatars. Get yours from <a href='https://steamcommunity.com/dev/apikey'>steam</a>"
              ))
        apikey_edit = QLineEdit()
        save_button = QPushButton(_("Save"))

        text_label.setOpenExternalLinks(True)
        apikey_edit.setText(self.switcher.settings.get("steam_api_key"))

        layout.addWidget(text_label)
        layout.addWidget(apikey_edit)
        layout.addWidget(save_button)

        def save_enabled():
            save_button.setEnabled(
                self.is_valid_steampi_key(apikey_edit.text()))

        def save():
            self.switcher.settings["steam_api_key"] = apikey_edit.text()
            self.switcher.settings_write()
            self.steamapi_window.hide()
            if self.switcher.first_run:
                self.import_accounts_dialog()

        save_enabled()

        apikey_edit.textChanged.connect(lambda: save_enabled())
        save_button.clicked.connect(lambda: save())

        self.steamapi_window.show()
Example #15
0
    def __disable(self):
        """Restores the ownership of the inner widget to its GraphicsNode."""
        self.setWidget(None)
        self.__inner_widget.setParent(None)

        dialog = QDialog()

        layout = QVBoxLayout()
        layout.addWidget(self.__inner_widget)
        dialog.setLayout(layout)

        dialog.show()

        self.__inner_widget.setParent(None)

        self.__inner_widget.resize(self.__last_size)
        self.__graphics_node.set_inner_widget(self.__inner_widget)

        dialog.close()
def demo_combine_meshes():
    """
    Demonstrates combining the mesh of two scene nodes
    Prompt user to select two nodes to be merged and merge them.
    """
    dialog = QDialog(GetQMaxMainWindow())
    dialog.resize(250, 100)
    dialog.setWindowTitle('DEMO - Combine 2 Nodes')

    main_layout = QVBoxLayout()
    label = QLabel("Combine 2 Nodes")
    main_layout.addWidget(label)

    combine_btn = QPushButton("Combine")
    combine_btn.clicked.connect(combine_two_meshes)
    main_layout.addWidget(combine_btn)

    dialog.setLayout(main_layout)
    dialog.show()
Example #17
0
    def colorize(self):
        color_im_arr = false_color(self.im_array_A, self.im_array_B)
        color_im = Image.fromarray(color_im_arr).resize((self.w, self.h))

        color_im_label = QLabel()
        color_im_label.setPixmap(color_im.toqpixmap())

        color_im_dialog = QDialog(self)
        color_im_dialog.setWindowTitle("Colorized image")

        save_button = QPushButton("Save")
        save_button.clicked.connect(partial(self.save_colorized, color_im_arr))

        layout = QVBoxLayout()
        layout.addWidget(color_im_label)
        layout.addWidget(save_button)

        color_im_dialog.setLayout(layout)
        color_im_dialog.show()
class DialogAbout:
    about_dialog: QDialog

    def about_dialog(self):
        self.about_dialog = QDialog(self)
        self.about_dialog.setWindowTitle("About")

        layout = QVBoxLayout()
        self.about_dialog.setLayout(layout)

        text_label = QLabel(
            _("Steam account switcher<br>"
              "Author: Tommi Saira &lt;[email protected]&gt;<br>"
              "Url: <a href='https://github.com/tommis/steam_account_switcher'>github.com/tommis/steam_account_switcher</a>"
              ))

        text_label.setOpenExternalLinks(True)

        layout.addWidget(text_label)

        self.about_dialog.show()
Example #19
0
    def reminder(self):
        box = QDialog(self)

        algo = self.algoCombo.currentText()

        pixmap = QPixmap(f'images/{algo.lower()}.png')
        labelImage = QLabel()
        labelImage.setPixmap(pixmap)
        labelImage.setAlignment(Qt.AlignHCenter)

        labelText = QLabel(algoDict[algo].__doc__)
        labelText.setAlignment(Qt.AlignJustify)

        box.setWindowTitle(f"{algo} reminder")

        layout = QVBoxLayout()
        layout.addWidget(labelImage)
        layout.addWidget(labelText)

        box.setLayout(layout)
        box.show()
Example #20
0
    def __toggle_widget_dialog(self, event: "QMouseEvent"):
        """Shows the Node `inner_widget` on a new dialog. The content of the node is
        substituted with a button that hides the dialog and shows the inner_widget back
        in the node when pressed.
        """

        node_inner_widget = self._proxy_widget.widget()
        previous_node_size = node_inner_widget.size()

        show_here_button = QPushButton("Show here")
        show_here_button.setMinimumSize(200, 100)

        # Replace the node widget with the button
        self.set_inner_widget(show_here_button)

        # Create a new dialog for displaying the node widget
        dialog = QDialog()
        dialog.setWindowTitle(self._node.title)

        layout = QVBoxLayout()
        layout.addWidget(node_inner_widget)
        dialog.setLayout(layout)

        dialog.show()

        def place_widget_back_in_node():
            # Widgets embedded in nodes can't have parents
            node_inner_widget.setParent(None)

            node_inner_widget.resize(previous_node_size)
            self.set_inner_widget(node_inner_widget)

            dialog.close()

        # The widget will be displayed back in the node when the dialog is closed or
        # when the "show here" button is pressed
        dialog.finished.connect(place_widget_back_in_node)
        show_here_button.clicked.connect(place_widget_back_in_node)
Example #21
0
    def handle_eftEnterButton(self):
        # method to handle the okay button when it is pressed
        def handle_okayButton():
            machine_1_value = H.char_remover(self, machine_1.text())
            machine_2_value = H.char_remover(self, machine_2.text())
            machine_3_value = H.char_remover(self, machine_3.text())
            machine_prev_value = H.char_remover(self, machine_prev.text())

            global_temp_dict['eftpos 1'] = H.dollar_adder(
                self, machine_1_value)
            global_temp_dict['eftpos 2'] = H.dollar_adder(
                self, machine_2_value)
            global_temp_dict['eftpos 3'] = H.dollar_adder(
                self, machine_3_value)
            global_temp_dict['eftpos prev'] = H.dollar_adder(
                self, machine_prev_value)

            eft_arr = [machine_1_value, machine_2_value, machine_3_value]

            eft_total = 0
            for value in eft_arr:
                if value != None:
                    eft_total += value

            if machine_prev_value != None:
                eft_total -= machine_prev_value

            ftd_eft_total = H.dollar_adder(self, eft_total)

            if ftd_eft_total == '-':
                self.eftEnterButton.setText('Enter Values')
            else:
                self.eftEnterButton.setText(ftd_eft_total)

            popup.accept()

        # method to handle the cancel button when it is pressed

        def handle_cancelButton():
            popup.reject()

        # initialise the dialog
        popup = QDialog()
        popup.setWindowTitle('Enter Eftpos Machine Values')

        # create the widgets and connect them to functions
        machine_1_label = QLabel()
        machine_1_label.setText('Eftpos Machine 1')
        machine_1 = QLineEdit()
        machine_2_label = QLabel()
        machine_2_label.setText('Eftpos Machine 2')
        machine_2 = QLineEdit()
        machine_3_label = QLabel()
        machine_3_label.setText('Eftpos Machine 3')
        machine_3 = QLineEdit()
        machine_prev_label = QLabel()
        machine_prev_label.setText('Previous Day\'s Eftpos (if applicable)')
        machine_prev = QLineEdit()

        okayButton = QPushButton('Okay')
        okayButton.clicked.connect(handle_okayButton)
        cancelButton = QPushButton('Cancel')
        cancelButton.clicked.connect(handle_cancelButton)

        # initialise values
        machine_1.setText(global_temp_dict['eftpos 1'])
        machine_2.setText(global_temp_dict['eftpos 2'])
        machine_3.setText(global_temp_dict['eftpos 3'])
        machine_prev.setText(global_temp_dict['eftpos prev'])

        # initialise the layout manager
        layout = QGridLayout()

        # add the widgets to the layout manager
        layout.addWidget(machine_1_label, 0, 0)
        layout.addWidget(machine_1, 0, 1)
        layout.addWidget(machine_2_label, 1, 0)
        layout.addWidget(machine_2, 1, 1)
        layout.addWidget(machine_3_label, 2, 0)
        layout.addWidget(machine_3, 2, 1)
        layout.addWidget(machine_prev_label, 3, 0)
        layout.addWidget(machine_prev, 3, 1)
        layout.addWidget(cancelButton, 4, 0, 1, 2)
        layout.addWidget(okayButton, 5, 0, 1, 2)
        popup.setLayout(layout)

        # set the dialog as modal so that the user cannot interact with the main window when the dialog is open
        popup.setModal(True)

        popup.show()
        popup.exec_()
Example #22
0
class FieldWidget(QFrame):
    # Used for deletion of field
    something_clicked = Signal()

    def dataset_type_changed(self, _):
        self.value_line_edit.validator(
        ).dataset_type_combo = self.value_type_combo
        self.value_line_edit.validator(
        ).field_type_combo = self.field_type_combo
        self.value_line_edit.validator().validate(self.value_line_edit.text(),
                                                  0)

    def __init__(
        self,
        possible_field_names=None,
        parent: QListWidget = None,
        instrument: "Instrument" = None,  # noqa: F821
        hide_name_field: bool = False,
    ):
        super(FieldWidget, self).__init__(parent)

        if possible_field_names is None:
            possible_field_names = []

        self.edit_dialog = QDialog(parent=self)
        self.attrs_dialog = FieldAttrsDialog(parent=self)
        self.instrument = instrument

        self.field_name_edit = FieldNameLineEdit(possible_field_names)
        self.hide_name_field = hide_name_field
        if hide_name_field:
            self.name = str(uuid.uuid4())

        self.units_line_edit = QLineEdit()
        self.unit_validator = UnitValidator()
        self.units_line_edit.setValidator(self.unit_validator)

        self.unit_validator.is_valid.connect(
            partial(validate_line_edit, self.units_line_edit))
        self.units_line_edit.setPlaceholderText(CommonAttrs.UNITS)

        self.field_type_combo = QComboBox()
        self.field_type_combo.addItems([item.value for item in FieldType])
        self.field_type_combo.currentIndexChanged.connect(
            self.field_type_changed)

        fix_horizontal_size = QSizePolicy()
        fix_horizontal_size.setHorizontalPolicy(QSizePolicy.Fixed)
        self.field_type_combo.setSizePolicy(fix_horizontal_size)

        self.value_type_combo = QComboBox()
        self.value_type_combo.addItems(list(DATASET_TYPE.keys()))
        self.value_type_combo.currentIndexChanged.connect(
            self.dataset_type_changed)

        self.value_line_edit = QLineEdit()
        self.value_line_edit.setPlaceholderText("value")

        self._set_up_value_validator(False)
        self.dataset_type_changed(0)

        self.nx_class_combo = QComboBox()

        self.edit_button = QPushButton("Edit")
        edit_button_size = 50
        self.edit_button.setMaximumSize(edit_button_size, edit_button_size)
        self.edit_button.setSizePolicy(fix_horizontal_size)
        self.edit_button.clicked.connect(self.show_edit_dialog)

        self.attrs_button = QPushButton("Attrs")
        self.attrs_button.setMaximumSize(edit_button_size, edit_button_size)
        self.attrs_button.setSizePolicy(fix_horizontal_size)
        self.attrs_button.clicked.connect(self.show_attrs_dialog)

        self.layout = QHBoxLayout()
        self.layout.addWidget(self.field_name_edit)
        self.layout.addWidget(self.field_type_combo)
        self.layout.addWidget(self.value_line_edit)
        self.layout.addWidget(self.nx_class_combo)
        self.layout.addWidget(self.edit_button)
        self.layout.addWidget(self.value_type_combo)
        self.layout.addWidget(self.units_line_edit)
        self.layout.addWidget(self.attrs_button)

        self.layout.setAlignment(Qt.AlignLeft)
        self.setLayout(self.layout)

        self.setFrameShadow(QFrame.Raised)
        self.setFrameShape(QFrame.StyledPanel)

        # Allow selecting this field widget in a list by clicking on it's contents
        self.field_name_edit.installEventFilter(self)
        if parent is not None:
            self._set_up_name_validator()
            self.field_name_edit.validator().is_valid.emit(False)

        self.value_line_edit.installEventFilter(self)
        self.nx_class_combo.installEventFilter(self)

        # These cause odd double-clicking behaviour when using an event filter so just connecting to the clicked() signals instead.
        self.edit_button.clicked.connect(self.something_clicked)
        self.value_type_combo.highlighted.connect(self.something_clicked)
        self.field_type_combo.highlighted.connect(self.something_clicked)

        # Set the layout for the default field type
        self.field_type_changed()

    def _set_up_name_validator(self):
        field_widgets = []
        for i in range(self.parent().count()):
            field_widgets.append(self.parent().itemWidget(
                self.parent().item(i)))

        self.field_name_edit.setValidator(
            NameValidator(field_widgets, invalid_names=INVALID_FIELD_NAMES))
        self.field_name_edit.validator().is_valid.connect(
            partial(
                validate_line_edit,
                self.field_name_edit,
                tooltip_on_accept="Field name is valid.",
                tooltip_on_reject=f"Field name is not valid",
            ))

    @property
    def field_type(self) -> FieldType:
        return FieldType(self.field_type_combo.currentText())

    @field_type.setter
    def field_type(self, field_type: str):
        self.field_type_combo.setCurrentText(field_type)
        self.field_type_changed()

    @property
    def name(self) -> str:
        return self.field_name_edit.text()

    @name.setter
    def name(self, name: str):
        self.field_name_edit.setText(name)

    @property
    def dtype(self) -> Union[h5py.Datatype, h5py.SoftLink, h5py.Group]:
        if self.field_type == FieldType.scalar_dataset:
            return self.value.dtype
        if self.field_type == FieldType.array_dataset:
            return self.table_view.model.array.dtype
        if self.field_type == FieldType.link:
            return h5py.SoftLink
        if self.field_type == FieldType.kafka_stream:
            return h5py.Group

    @dtype.setter
    def dtype(self, dtype: h5py.Datatype):
        type_map = {
            np.object: "String",
            np.float64: "Float",
            np.int64: "Integer"
        }
        for item in type_map.keys():
            if dtype == item:
                self.value_type_combo.setCurrentText(type_map[item])
                return
        self.value_type_combo.setCurrentText(
            next(key for key, value in DATASET_TYPE.items() if value == dtype))

    @property
    def attrs(self) -> h5py.Dataset.attrs:
        return self.value.attrs

    @attrs.setter
    def attrs(self, field: h5py.Dataset):
        self.attrs_dialog.fill_existing_attrs(field)

    @property
    def value(self) -> Union[h5py.Dataset, h5py.Group, h5py.SoftLink]:
        return_object = None
        if self.field_type == FieldType.scalar_dataset:
            dtype = DATASET_TYPE[self.value_type_combo.currentText()]
            val = self.value_line_edit.text()
            if dtype == h5py.special_dtype(vlen=str):
                return_object = create_temporary_in_memory_file(
                ).create_dataset(name=self.name, dtype=dtype, data=val)
            else:
                return_object = create_temporary_in_memory_file(
                ).create_dataset(name=self.name, dtype=dtype, data=dtype(val))
        elif self.field_type == FieldType.array_dataset:
            # Squeeze the array so 1D arrays can exist. Should not affect dimensional arrays.
            return_object = create_temporary_in_memory_file().create_dataset(
                name=self.name, data=np.squeeze(self.table_view.model.array))
        elif self.field_type == FieldType.kafka_stream:
            return_object = self.streams_widget.get_stream_group()
        elif self.field_type == FieldType.link:
            return_object = h5py.SoftLink(self.value_line_edit.text())
        else:
            logging.error(f"unknown field type: {self.name}")
        if self.field_type != FieldType.link:
            for attr_name, attr_value in self.attrs_dialog.get_attrs().items():
                self.instrument.nexus.set_attribute_value(
                    return_object, attr_name, attr_value)
            if self.units and self.units is not None:
                self.instrument.nexus.set_attribute_value(
                    return_object, CommonAttrs.UNITS, self.units)
        return return_object

    @value.setter
    def value(self, value):
        if self.field_type == FieldType.scalar_dataset:
            self.value_line_edit.setText(to_string(value))
        elif self.field_type == FieldType.array_dataset:
            self.table_view.model.array = value
        elif self.field_type == FieldType.link:
            self.value_line_edit.setText(value)

    @property
    def units(self):
        return self.units_line_edit.text()

    @units.setter
    def units(self, new_units):
        self.units_line_edit.setText(new_units)

    def eventFilter(self, watched: QObject, event: QEvent) -> bool:
        if event.type() == QEvent.MouseButtonPress:
            self.something_clicked.emit()
            return True
        else:
            return False

    def field_type_changed(self):
        self.edit_dialog = QDialog(parent=self)
        self._set_up_value_validator(False)
        if self.field_type == FieldType.scalar_dataset:
            self.set_visibility(True, False, False, True)
        elif self.field_type == FieldType.array_dataset:
            self.set_visibility(False, False, True, True)
            self.table_view = ArrayDatasetTableWidget()
        elif self.field_type == FieldType.kafka_stream:
            self.set_visibility(False,
                                False,
                                True,
                                False,
                                show_name_line_edit=True)
            self.streams_widget = StreamFieldsWidget(self.edit_dialog)
        elif self.field_type == FieldType.link:
            self.set_visibility(True, False, False, False)
            self._set_up_value_validator(True)
        elif self.field_type == FieldType.nx_class:
            self.set_visibility(False, True, False, False)

    def _set_up_value_validator(self, is_link: bool):
        self.value_line_edit.setValidator(None)
        if is_link:
            self.value_line_edit.setValidator(
                HDFLocationExistsValidator(self.instrument.nexus.nexus_file,
                                           self.field_type_combo))

            tooltip_on_accept = "Valid HDF path"
            tooltip_on_reject = "HDF Path is not valid"
        else:
            self.value_line_edit.setValidator(
                FieldValueValidator(
                    self.field_type_combo,
                    self.value_type_combo,
                    FieldType.scalar_dataset.value,
                ))
            tooltip_on_accept = "Value is cast-able to numpy type."
            tooltip_on_reject = "Value is not cast-able to selected numpy type."

        self.value_line_edit.validator().is_valid.connect(
            partial(
                validate_line_edit,
                self.value_line_edit,
                tooltip_on_accept=tooltip_on_accept,
                tooltip_on_reject=tooltip_on_reject,
            ))
        self.value_line_edit.validator().validate(self.value_line_edit.text(),
                                                  None)

    def set_visibility(
        self,
        show_value_line_edit: bool,
        show_nx_class_combo: bool,
        show_edit_button: bool,
        show_value_type_combo: bool,
        show_name_line_edit: bool = True,
    ):
        self.value_line_edit.setVisible(show_value_line_edit)
        self.nx_class_combo.setVisible(show_nx_class_combo)
        self.edit_button.setVisible(show_edit_button)
        self.value_type_combo.setVisible(show_value_type_combo)
        self.field_name_edit.setVisible(show_name_line_edit
                                        and not self.hide_name_field)

    def show_edit_dialog(self):
        if self.field_type == FieldType.array_dataset:
            self.edit_dialog.setLayout(QGridLayout())
            self.table_view.model.update_array_dtype(
                DATASET_TYPE[self.value_type_combo.currentText()])
            self.edit_dialog.layout().addWidget(self.table_view)
            self.edit_dialog.setWindowTitle(
                f"Edit {self.value_type_combo.currentText()} Array field")
        elif self.field_type == FieldType.kafka_stream:
            self.edit_dialog.setLayout(QFormLayout())
            self.edit_dialog.layout().addWidget(self.streams_widget)
        elif self.field_type.currentText() == FieldType.nx_class:
            # TODO: show nx class panels
            pass
        self.edit_dialog.show()

    def show_attrs_dialog(self):
        self.attrs_dialog.show()
Example #23
0
from PySide2.QtWidgets import QApplication
from PySide2.QtWidgets import QDialog, QVBoxLayout, QPushButton

app = QApplication([])
dialog = QDialog()

layout = QVBoxLayout()
layout.addWidget(QPushButton('Top'))
layout.addWidget(QPushButton('Bottom'))
dialog.setLayout(layout)
dialog.show()
app.exec_()
class NotificationsDialog(object):
    def __init__(self, parent, parent_window, notifications, dp=None):
        self._dialog = QDialog(parent_window)
        self._dp = dp

        self._notifications = notifications
        self._parent = parent
        self._parent_window = parent_window

        self._dialog.setWindowIcon(QIcon(':/images/icon.png'))
        self._ui = Ui_Dialog()
        self._ui.setupUi(self._dialog)

        self._init_ui()

    def _init_ui(self):
        self._dialog.setWindowFlags(Qt.Dialog)
        self._dialog.setAttribute(Qt.WA_TranslucentBackground)
        self._dialog.setAttribute(Qt.WA_MacFrameworkScaled)

        self._notifications_list = NotificationsList(self._dp)
        self._ui.notifications_area.setWidget(self._notifications_list)
        self._ui.notifications_area.verticalScrollBar().valueChanged.connect(
            self._on_list_scroll_changed)

        self._old_main_resize_event = self._ui.centralwidget.resizeEvent
        self._ui.centralwidget.resizeEvent = self._main_resize_event

        self._loader_movie = QMovie(":/images/loader.gif")
        self._ui.loader_label.setMovie(self._loader_movie)

    def show(self, on_finished):
        def finished():
            self.show_cursor_normal()
            self._dialog.finished.disconnect(finished)
            on_finished()

        logger.debug("Opening notifications dialog")

        screen_width = QApplication.desktop().width()
        parent_x = self._dialog.parent().x()
        parent_width = self._dialog.parent().width()
        width = self._dialog.width()
        offset = 16
        if parent_x + parent_width / 2 > screen_width / 2:
            x = parent_x - width - offset
            if x < 0:
                x = 0
        else:
            x = parent_x + parent_width + offset
            diff = x + width - screen_width
            if diff > 0:
                x -= diff
        self._dialog.move(x, self._dialog.parent().y())

        # Execute dialog
        self._dialog.finished.connect(finished)
        if not self._parent.load_notifications(show_loading=True):
            self.show_notifications()
        self._dialog.raise_()
        self._dialog.show()

    def raise_dialog(self):
        self._dialog.raise_()

    def close(self):
        self._dialog.reject()

    def show_cursor_loading(self, show_movie=False):
        if show_movie:
            self._ui.notifications_pages.setCurrentIndex(2)
            self._loader_movie.start()
        else:
            self._dialog.setCursor(Qt.WaitCursor)
            self._parent_window.setCursor(Qt.WaitCursor)

    def show_cursor_normal(self):
        self._dialog.setCursor(Qt.ArrowCursor)
        self._parent_window.setCursor(Qt.ArrowCursor)
        if self._loader_movie.state() == QMovie.Running:
            self._loader_movie.stop()

    def show_notifications(self):
        if not self._notifications:
            self._ui.notifications_pages.setCurrentIndex(1)
        else:
            self._ui.notifications_pages.setCurrentIndex(0)
            self._notifications_list.show_notifications(self._notifications)

        self.show_cursor_normal()

    def _on_list_scroll_changed(self, *args, **kwargs):
        # value = self._ui.notifications_area.verticalScrollBar().value()
        # logger.debug("Scroll value %s", value)
        if self._parent.all_loaded or self._parent.is_querying:
            return

        if self._notifications_list.loading_needed(self._parent.limit):
            logger.debug("Loading notifications")
            self._parent.load_notifications()

    def _main_resize_event(self, e):
        self._old_main_resize_event(e)
        self._notifications_list.setFixedWidth(
            self._ui.notifications_pages.width() - 8)

        self._on_list_scroll_changed()
Example #25
0
    def run_command(self, command_list):
        try:
            if len(self.vsp.job_submit_items) == 0:
                QMessageBox.information(self.main_window, "提示",
                                        "没有可用的Job Submit配置")
                return

            def ok():
                job_submit = ui.chooseJobSubmit.currentText()
                if job_submit == "":
                    QMessageBox.information(a, "提示", "选择一个Job Submit配置")
                    return
                else:
                    job_submit = self.vsp.job_submit_items[job_submit]
                    a.close()

                    def command_run(*args):

                        sf = SFTP_SSH_Utils(host=job_submit.host,
                                            port=job_submit.port,
                                            username=job_submit.username,
                                            password=job_submit.password)
                        a, b, c = sf.ssh_run_command(args)
                        print(a)
                        print(b)
                        print(c)
                        return a, b, c, 1

                    class SJT(QThread):
                        def __init__(self, job_submit_confg, *args):
                            super().__init__()
                            self.status = None
                            self.jc = job_submit_confg
                            self.args = args

                        def run(self):
                            print(self.args)
                            self.output = command_run(self.args[0])
                            self.status = self.output[3]
                            self.output = self.output[:3]

                        def get_output(self):
                            return self.output

                    try:
                        thread = SJT(job_submit, command_list)
                        thread.start()

                        while True:

                            q = thread.status
                            if q == None:
                                QCoreApplication.processEvents()
                                continue

                            elif q == 1:
                                try:
                                    string = ""
                                    for i in thread.output[1]:
                                        string += str(i,
                                                      encoding="utf-8") + "\n"
                                    # 提交成功才更新节点信息
                                    self.main_window_ui.commandOutput.setText(
                                        string)
                                    self.command_output = string
                                    return

                                except:
                                    traceback.print_exc()

                                    QMessageBox.information(
                                        self.main_window, '提示', "command运行失败")
                                    return

                    except:
                        traceback.print_exc()

            a = QDialog()
            ui = Ui_submitJob()
            ui.setupUi(a)
            for i in self.vsp.job_submit_items:
                ui.chooseJobSubmit.addItem(i)
            a.show()
            ui.submitJobOK.clicked.connect(ok)

        except:
            traceback.print_exc()
Example #26
0
    def handle_lottoPayEnterButton(self):
        # method to handle the okay button when it is pressed
        def handle_okayButton():
            instants_cash_value = H.char_remover(self, instants_cash.text())
            prizes_paid_value = H.char_remover(self, prizes_paid.text())

            global_temp_dict['instants cash'] = H.dollar_adder(
                self, instants_cash_value)
            global_temp_dict['total prizes'] = H.dollar_adder(
                self, prizes_paid_value)

            if (prizes_paid_value and instants_cash_value) != None:
                lotto_pay_total = prizes_paid_value - instants_cash_value

                ftd_lotto_pay_total = H.dollar_adder(self, lotto_pay_total)

                if ftd_lotto_pay_total == '-':
                    self.lottoPayEnterButton.setText('Enter Values')
                else:
                    self.lottoPayEnterButton.setText(ftd_lotto_pay_total)

                popup.accept()
            else:
                self.lottoPayEnterButton.setText('Enter Values')
                popup.reject()

        # method to handle the cancel button when it is pressed

        def handle_cancelButton():
            popup.reject()

        # initialise the dialog
        popup = QDialog()
        popup.setWindowTitle('Enter Lotto Payout Values')

        # create the widgets and connect them to functions
        instants_cash_label = QLabel()
        instants_cash_label.setText('Instants Cash')
        instants_cash = QLineEdit()
        prizes_paid_label = QLabel()
        prizes_paid_label.setText('Total Prizes Paid')
        prizes_paid = QLineEdit()

        okayButton = QPushButton('Okay')
        okayButton.clicked.connect(handle_okayButton)
        cancelButton = QPushButton('Cancel')
        cancelButton.clicked.connect(handle_cancelButton)

        # initialise values
        instants_cash.setText(global_temp_dict['instants cash'])
        prizes_paid.setText(global_temp_dict['total prizes'])

        # initialise the layout manager
        layout = QGridLayout()

        # add the widgets to the layout manager
        layout.addWidget(prizes_paid_label, 0, 0)
        layout.addWidget(prizes_paid, 0, 1)
        layout.addWidget(instants_cash_label, 1, 0)
        layout.addWidget(instants_cash, 1, 1)

        layout.addWidget(cancelButton, 2, 0, 1, 2)
        layout.addWidget(okayButton, 3, 0, 1, 2)
        popup.setLayout(layout)

        # set the dialog as modal so that the user cannot interact with the main window when the dialog is open
        popup.setModal(True)

        popup.show()
        popup.exec_()
Example #27
0
class VideoCompareView(object):
    def __init__(self, parent=None):
        self.widget = QWidget()
        self.setting_widget = Ui_video_pre_settings()
        self.setting_widget.setupUi(self.widget)
        self.scene = QGraphicsScene()
        self.imageview = ImageView(self.scene, self.widget)
        self.setting_widget.videoview.addWidget(self.imageview)
        parent.addWidget(self.widget)
        # init params
        self.video_valid = False
        self.process_speed = 33
        self.skip_frames = 0
        self.processing_video = False
        self.video_timer = QTimer()
        self.video_timer.timeout.connect(self.open_frame)
        # init func
        self.setting_widget.openvideo.clicked.connect(self.open_video)
        self.setting_widget.open_rtsp.clicked.connect(self.open_rtsp)
        self.setting_widget.skipframe.valueChanged.connect(self.set_skip_frame)
        self.imageview.sigDragEvent.connect(self.open_video_path)

    def set_skip_frame(self, value):
        # self.skip_frames = self.setting_widget.skipframe.value()
        self.skip_frames = value
        self.vertify_video()

    def open_video(self):
        videopath = QFileDialog.getOpenFileName(None, '打开文件', './',
                                                'video files(*.mp4)')
        if (videopath[0] != ''):
            self.open_video_path(videopath[0])

    def open_video_path(self, string):
        self.setting_widget.path.setText(string)
        self.vertify_video()
        # self.set_ui_enable(True)

    def open_rtsp(self):
        self.rtsp_config_window = QDialog()
        self.rtsp_config_ui = Ui_RtspConfigView()
        self.rtsp_config_ui.setupUi(self.rtsp_config_window)
        self.rtsp_config_window.show()
        self.rtsp_config_ui.buttonBox.clicked.connect(self.rtsp_config)

    def rtsp_config(self):
        username = self.rtsp_config_ui.username.text()
        password = self.rtsp_config_ui.password.text()
        ip = self.rtsp_config_ui.ip.text()
        port = self.rtsp_config_ui.port.text()
        # 移动设备需要通过adb映射端口
        if (self.rtsp_config_ui.isphoto.isChecked() == True):
            command = "forward tcp:" + port + ' ' + "tcp:" + port
            os.system("adb " + command)
            os.system("kdb " + command)
        rtsp_path = "rtsp://" + username + ":" + password + "@" + ip + ":" + port
        self.open_video_path(rtsp_path)

    def vertify_video(self):
        # 输出参数初始化
        # self.frame_count = 0
        self.vidcap = cv2.VideoCapture(self.setting_widget.path.text())
        # 片头调过多少帧
        self.vidcap.set(cv2.CAP_PROP_POS_FRAMES, self.skip_frames)
        success, frame = self.vidcap.read()
        if success:
            self.display(frame)
            self.video_valid = True
        else:
            self.critical_window_show('视频打不开')
            self.video_valid = False
            return

    def display(self, img):
        self.scene.clear()
        self.scene.addPixmap(
            QPixmap(
                QImage(img, img.shape[1], img.shape[0], QImage.Format_BGR888)))

    def open_frame(self):
        success, frame = self.vidcap.read()
        if success:
            # self.frame_count += 1
            self.display(frame)
        else:
            self.video_timer.stop()
            self.processing_video = False
            self.video_valid = False

    def set_speed(self, value):
        speed = value * 33
        if (self.processing_video == True
                and int(speed) != self.process_speed):
            self.process_speed = int(speed)
            self.stop_video()
            self.start_video()

    def start_video(self):
        if (self.video_valid == True):
            self.processing_video = True
            # 增加定时器,每100ms进行一帧的处理
            self.video_timer.start(self.process_speed)

    def stop_video(self):
        self.processing_video = False
        self.video_timer.stop()

    def restart_video(self):
        self.stop_video()
        self.vertify_video()
        self.start_video()

    def critical_window_show(self, str):
        reply = QMessageBox.critical(self.widget, '警告', str, QMessageBox.Yes,
                                     QMessageBox.Yes)
        return
Example #28
0
    def handle_lottoEnterButton(self):
        # method to handle the okay button when it is pressed
        def handle_okayButton():
            gross_sales_value = H.char_remover(self, gross_sales.text())
            instants_comm_value = H.char_remover(self, instants_comm.text())
            instants_net_value = H.char_remover(self, instants_net.text())

            global_temp_dict['gross sales'] = H.dollar_adder(
                self, gross_sales_value)
            global_temp_dict['instants comm'] = H.dollar_adder(
                self, instants_comm_value)
            global_temp_dict['instants net'] = H.dollar_adder(
                self, instants_net_value)

            if (gross_sales_value and instants_comm_value
                    and instants_net_value) != None:
                lotto_total = gross_sales_value - instants_comm_value - instants_net_value

                ftd_lotto_total = H.dollar_adder(self, lotto_total)

                if ftd_lotto_total == '-':
                    self.lottoEnterButton.setText('Enter Values')
                else:
                    self.lottoEnterButton.setText(ftd_lotto_total)

                popup.accept()
            else:
                self.lottoEnterButton.setText('Enter Values')
                popup.reject()

        # method to handle the cancel button when it is pressed

        def handle_cancelButton():
            popup.reject()

        # initialise the dialog
        popup = QDialog()
        popup.setWindowTitle('Enter Lotto Values')

        # create the widgets and connect them to functions
        gross_sales_label = QLabel()
        gross_sales_label.setText('Gross Sales')
        gross_sales = QLineEdit()
        instants_comm_label = QLabel()
        instants_comm_label.setText('Instants Commission')
        instants_comm = QLineEdit()
        instants_net_label = QLabel()
        instants_net_label.setText('Instants Net')
        instants_net = QLineEdit()

        okayButton = QPushButton('Okay')
        okayButton.clicked.connect(handle_okayButton)
        cancelButton = QPushButton('Cancel')
        cancelButton.clicked.connect(handle_cancelButton)

        # initialise values
        gross_sales.setText(global_temp_dict['gross sales'])
        instants_comm.setText(global_temp_dict['instants comm'])
        instants_net.setText(global_temp_dict['instants net'])

        # initialise the layout manager
        layout = QGridLayout()

        # add the widgets to the layout manager
        layout.addWidget(gross_sales_label, 0, 0)
        layout.addWidget(gross_sales, 0, 1)
        layout.addWidget(instants_comm_label, 1, 0)
        layout.addWidget(instants_comm, 1, 1)
        layout.addWidget(instants_net_label, 2, 0)
        layout.addWidget(instants_net, 2, 1)

        layout.addWidget(cancelButton, 3, 0, 1, 2)
        layout.addWidget(okayButton, 4, 0, 1, 2)
        popup.setLayout(layout)

        # set the dialog as modal so that the user cannot interact with the main window when the dialog is open
        popup.setModal(True)

        popup.show()
        popup.exec_()
Example #29
0
class Plotter(FigureCanvasQTAgg):
    def __init__(self, xtitle=None, ytitle=None, width=5, height=4, dpi=100):
        fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = fig.add_subplot(111)
        self.axes.autoscale(enable=True)
        super().__init__(fig)
        self._createDialog()

        self._needsUpdating = False

        self.updateTimer = QTimer()
        self.updateTimer.setSingleShot(False)
        self.updateTimer.setInterval(UPDATE_INTERVAL)
        self.updateTimer.timeout.connect(self._updateFigure)
        self.updateThread = QThread()
        self.updateThread.started.connect(self._refreshFigure)

        self.xdata = list(range(MAXIMUM_POINTS))
        self.ydata = [0] * MAXIMUM_POINTS

        #The following lines may not be correct
        self.xtitle = xtitle
        self.ytitle = ytitle
        self.xtitle("SAMPLE X")

        # self._plot_ref = None
        self._showDialog()
        self.updateTimer.start()

    def _updateFigure(self):
        if self._needsUpdating:
            self.updateThread.start()

    def _refreshFigure(self):
        # if self._plot_ref is None:
        #     self._plot_ref, = self.axes.plot(self.xdata, self.ydata, 'r', marker='o', markersize=12)
        # else:
        #     self._plot_ref.set_xdata(self.xdata)
        #     self._plot_ref.set_ydata(self.ydata)
        self.axes.cla()
        self.axes.plot(self.xdata, self.ydata, 'r', marker='o', markersize=12)

        if self.xtitle is not None:
            self.axes.xtitle(self.xtitle)

        if self.ytitle is not None:
            self.axes.ytitle(self.ytitle)

        self.draw()
        self._needsUpdating = False

    def _createDialog(self):
        self.plotDialog = QDialog()
        self.plotDialog.setWindowTitle("Processing Plot")
        dialogButtons = QDialogButtonBox(QDialogButtonBox.Close)
        dialogButtons.clicked.connect(self._closeDialog)
        layout = QVBoxLayout()
        self.toolbar = NavigationToolbar(self, self.plotDialog)
        layout.addWidget(self.toolbar)
        layout.addWidget(self)
        layout.addWidget(dialogButtons)
        self.plotDialog.setLayout(layout)

    def _closeDialog(self):
        self.plotDialog.close()

    def _showDialog(self):
        self.plotDialog.show()

    def addNewData(self, x, y):
        #Check data validity
        x = np.array(x).flatten()
        y = np.array(y).flatten()
        if x.size != y.size:
            print(
                "Problem with adding new values to the plot, x and y should have the same length"
            )
            return
        #TODO: Add other validation conditions

        #Add data to class
        length = x.shape[0]
        self.xdata = self.xdata[-(MAXIMUM_POINTS - length):] + x.tolist()
        self.ydata = self.ydata[-(MAXIMUM_POINTS - length):] + y.tolist()

        #flag it for updates
        self._needsUpdating = True

    def __del__(self):
        self.plotDialog.close()
        while not self.updateThread.isFinished():
            pass
Example #30
0
    def handle_scratchiesPayEnterButton(self):
        # method to handle the okay button when it is pressed
        def handle_okayButton():
            instants_cash_value = H.char_remover(self, instants_cash.text())
            free_instants_value = H.char_remover(self, free_instants.text())

            global_temp_dict['instants cash'] = H.dollar_adder(
                self, instants_cash_value)
            global_temp_dict['free instants'] = H.dollar_adder(
                self, free_instants_value)

            scratchies_pay_arr = [instants_cash_value, free_instants_value]

            scratchies_pay_total = 0
            for value in scratchies_pay_arr:
                if value != None:
                    scratchies_pay_total += value

            ftd_scratchies_pay_total = H.dollar_adder(self,
                                                      scratchies_pay_total)

            if ftd_scratchies_pay_total == '-':
                self.scratchiesPayEnterButton.setText('Enter Values')
            else:
                self.scratchiesPayEnterButton.setText(ftd_scratchies_pay_total)

            popup.accept()

        # method to handle the cancel button when it is pressed

        def handle_cancelButton():
            popup.reject()

        # initialise the dialog
        popup = QDialog()
        popup.setWindowTitle('Enter Scratchies Payout Values')

        # create the widgets and connect them to functions
        instants_cash_label = QLabel()
        instants_cash_label.setText('Instants Cash')
        instants_cash = QLineEdit()
        free_instants_label = QLabel()
        free_instants_label.setText('Free Instants')
        free_instants = QLineEdit()

        okayButton = QPushButton('Okay')
        okayButton.clicked.connect(handle_okayButton)
        cancelButton = QPushButton('Cancel')
        cancelButton.clicked.connect(handle_cancelButton)

        # initialise values
        instants_cash.setText(global_temp_dict['instants cash'])
        free_instants.setText(global_temp_dict['free instants'])

        # initialise the layout manager
        layout = QGridLayout()

        # add the widgets to the layout manager
        layout.addWidget(instants_cash_label, 0, 0)
        layout.addWidget(instants_cash, 0, 1)
        layout.addWidget(free_instants_label, 1, 0)
        layout.addWidget(free_instants, 1, 1)
        layout.addWidget(cancelButton, 2, 0, 1, 2)
        layout.addWidget(okayButton, 3, 0, 1, 2)
        popup.setLayout(layout)

        # set the dialog as modal so that the user cannot interact with the main window when the dialog is open
        popup.setModal(True)

        popup.show()
        popup.exec_()