コード例 #1
0
class WriteModeWidget(QWidget):
    def __init__(self, parent=None):
        super(WriteModeWidget, self).__init__(parent)
        self.initUI()

    def initUI(self):
        self.writr_mode_title = QLabel('导出设置')
        self.write_button = QCheckBox('导出docx')
        self.write_every_link_a_file = QRadioButton('每个链接对应一个文件')
        self.write_links_to_one_file = QRadioButton('保存为一个文件')

        self.write_mode_core_box = QVBoxLayout()
        self.write_mode_core_box.addWidget(self.write_every_link_a_file)
        self.write_mode_core_box.addWidget(self.write_links_to_one_file)
        self.write_mode_surface_box = QHBoxLayout()
        self.write_mode_surface_box.addSpacing(25)
        self.write_mode_surface_box.addLayout(self.write_mode_core_box)

        self.writr_mode_box = QVBoxLayout()
        self.writr_mode_title.setAlignment(Qt.AlignCenter)
        self.writr_mode_box.addWidget(self.writr_mode_title)
        self.writr_mode_box.addWidget(self.write_button)
        self.writr_mode_box.addLayout(self.write_mode_surface_box)

        self.write = True
        self.write_button.toggle()
        self.writr_mode = 'multi'
        self.write_every_link_a_file.toggle()
        self.write_mode_button_group = QButtonGroup()
        self.write_mode_button_group.addButton(self.write_every_link_a_file)
        self.write_mode_button_group.addButton(self.write_links_to_one_file)

        self.write_button.stateChanged.connect(self.onWriteButtonClicked)
        self.write_mode_button_group.buttonClicked.connect(
            self.onWriteModeButtonClicked)

        self.setLayout(self.writr_mode_box)

    def onWriteButtonClicked(self, state):
        if state == Qt.Checked:
            self.write = True
            self.setWriteModeButtonGroupEnabled(True)
        else:
            self.write = False
            self.setWriteModeButtonGroupEnabled(False)

    def onWriteModeButtonClicked(self):
        if self.write_mode_button_group.checkedButton(
        ) is self.write_every_link_a_file:
            self.writr_mode = 'multi'
        elif self.write_mode_button_group.checkedButton(
        ) is self.write_links_to_one_file:
            self.writr_mode = 'one'

    def setWriteModeButtonGroupEnabled(self, bool):
        self.write_every_link_a_file.setEnabled(bool)
        self.write_links_to_one_file.setEnabled(bool)

    def getMode(self):
        return self.write, self.writr_mode
コード例 #2
0
class Pencere(QWidget):
    def __init__(self):
        super().__init__()
        self.yerlesim = QVBoxLayout(self)
        self.radyo1 = QRadioButton("Kadın", self)
        self.radyo2 = QRadioButton("Erkek", self)
        self.dugme = QPushButton("Tamam", self)
        self.yazi = QLabel("Erkek cinsiyetini seçtiniz.", self)

        self.dugmeGrubu = QButtonGroup(self)
        self.dugmeGrubu.addButton(self.radyo1)
        self.dugmeGrubu.addButton(self.radyo2)

        self.yerlesim.addWidget(self.radyo1)
        self.yerlesim.addWidget(self.radyo2)
        self.yerlesim.addWidget(self.dugme)
        self.yerlesim.addWidget(self.yazi)

        self.dugme.clicked.connect(self.tiklandi)

    def tiklandi(self):
        if self.dugmeGrubu.checkedButton():
            metin = self.dugmeGrubu.checkedButton().text(
            ) + " cinsiyetini seçtiniz."
            self.yazi.setText(metin)
コード例 #3
0
ファイル: gui_classes.py プロジェクト: bobev18/stujeditor
class LabelButtonGroup(QWidget):
    def __init__(self, label = '', buttons = {'UJ object reference value': 'Name to show'}):
        super(LabelButtonGroup, self).__init__()
        self.label = QLabel()
        self.label.setText(label)
        self.button_group = QButtonGroup()
        self.buttons = {}
        self.layout = QHBoxLayout()
        self.layout.setContentsMargins(0,0,0,0)
        self.layout.addWidget(self.label)
        for button_key in buttons.keys():
            self.buttons[button_key] = QRadioButton(buttons[button_key])
            self.button_group.addButton(self.buttons[button_key])
            self.layout.addWidget(self.buttons[button_key])

    def show(self):
        for button in self.buttons.values():
            button.show()
        self.label.show()

    def hide(self):
        for button in self.buttons.values():
            button.hide()
        self.label.hide()

    def set_text(self, key):
        if key != '':
            self.buttons[key].setChecked(1)

    def text(self):
        return self.button_group.checkedButton().text()

    def checked(self):
        return self.button_group.checkedButton()
コード例 #4
0
ファイル: binding.py プロジェクト: aleekaup2/potku
def get_btn_group_value(button_group: QtWidgets.QButtonGroup) -> Optional[Any]:
    """Retuns the value of data_item attribute of the selected button.
    """
    try:
        return button_group.checkedButton().data_item
    except AttributeError:
        return None
コード例 #5
0
class DyStockSelectAddColumnsDlg(QDialog):
    def __init__(self, data, title, parent=None):
        super().__init__(parent)

        self._data = data

        self._initUi(title)

    def _initUi(self, title):
        self.setWindowTitle('添加{0}列'.format(title))

        # 控件
        increaseColumnsLable = QLabel('基准日期几日{0}'.format(title))
        self._increaseColumnsLineEdit = QLineEdit(
            ','.join(self._data['days']) if self._data else '1,2,3,4,5,10')

        # 前 & 后
        forwardRadioButton = QRadioButton('向前')
        backwardRadioButton = QRadioButton('向后')
        backwardRadioButton.setChecked(True)

        # 添加到QButtonGroup
        self._wardButtonGroup = QButtonGroup()
        self._wardButtonGroup.addButton(forwardRadioButton, 1)
        self._wardButtonGroup.addButton(backwardRadioButton, 2)

        cancelPushButton = QPushButton('Cancel')
        okPushButton = QPushButton('OK')
        cancelPushButton.clicked.connect(self._cancel)
        okPushButton.clicked.connect(self._ok)

        # 布局
        grid = QGridLayout()
        grid.setSpacing(10)

        grid.addWidget(increaseColumnsLable, 0, 0, 1, 2)
        grid.addWidget(self._increaseColumnsLineEdit, 1, 0, 1, 2)

        grid.addWidget(forwardRadioButton, 2, 0)
        grid.addWidget(backwardRadioButton, 2, 1)

        grid.addWidget(okPushButton, 3, 1)
        grid.addWidget(cancelPushButton, 3, 0)

        self.setLayout(grid)
        self.setMinimumWidth(QApplication.desktop().size().width() // 5)

    def _ok(self):
        checkedButton = self._wardButtonGroup.checkedButton()
        text = checkedButton.text()
        self._data['backward'] = True if text == '向后' else False

        self._data['days'] = [
            int(x) for x in self._increaseColumnsLineEdit.text().split(',')
        ]

        self.accept()

    def _cancel(self):
        self.reject()
コード例 #6
0
class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(200, 200)
        self.setWindowTitle('Buttongroup')

        # Widgets
        self.radiolist = []
        self.radios = QButtonGroup()

        for i in range(20):
            b = QRadioButton(f'Radio {i + 1}')
            self.radiolist.append(b)
            self.radios.addButton(b)


        self.radios.buttonClicked.connect(self.button_func)

        self.output = QLabel('Before check!')

        # Layout
        vBox = QVBoxLayout()
        for i in range(len(self.radiolist)):
            vBox.addWidget(self.radiolist[i])

        vBox.addWidget(self.output)

        self.setLayout(vBox)
        self.show()

    def button_func(self):
        self.output.setText('A button was clicked!')

        txt_of_button = self.radios.checkedButton().text()
        self.output.setText(str(txt_of_button))
コード例 #7
0
class DyStockSelectAddColumnsDlg(QDialog):

    def __init__(self, data, title, parent=None):
        super().__init__(parent)

        self._data = data

        self._initUi(title)

    def _initUi(self, title):
        self.setWindowTitle('添加{0}列'.format(title))
 
        # 控件
        increaseColumnsLable = QLabel('基准日期几日{0}'.format(title))
        self._increaseColumnsLineEdit = QLineEdit(','.join(self._data['days']) if self._data else '2,3,4,5,10' )

        # 前 & 后
        forwardRadioButton = QRadioButton('向前')
        backwardRadioButton = QRadioButton('向后'); backwardRadioButton.setChecked(True)

        # 添加到QButtonGroup
        self._wardButtonGroup = QButtonGroup()
        self._wardButtonGroup.addButton(forwardRadioButton, 1); 
        self._wardButtonGroup.addButton(backwardRadioButton, 2)

        cancelPushButton = QPushButton('Cancel')
        okPushButton = QPushButton('OK')
        cancelPushButton.clicked.connect(self._cancel)
        okPushButton.clicked.connect(self._ok)

        # 布局
        grid = QGridLayout()
        grid.setSpacing(10)
 
        grid.addWidget(increaseColumnsLable, 0, 0, 1, 2)
        grid.addWidget(self._increaseColumnsLineEdit, 1, 0, 1, 2)

        grid.addWidget(forwardRadioButton, 2, 0)
        grid.addWidget(backwardRadioButton, 2, 1)

        grid.addWidget(okPushButton, 3, 1)
        grid.addWidget(cancelPushButton, 3, 0)
 
 
        self.setLayout(grid)
        self.setMinimumWidth(QApplication.desktop().size().width()//5)

    def _ok(self):
        checkedButton = self._wardButtonGroup.checkedButton()
        text = checkedButton.text()
        self._data['backward'] = True if text == '向后' else False

        self._data['days'] = [int(x) for x in self._increaseColumnsLineEdit.text().split(',')]

        self.accept()

    def _cancel(self):
        self.reject()
コード例 #8
0
class PixelSizeWidget(QWidget):
    pixelSizeChanged = pyqtSignal(int)

    def __init__(self):
        super(PixelSizeWidget, self).__init__()

        self._layout = QHBoxLayout()

        self._button_group = QButtonGroup()
        self._button_group.buttonClicked.connect(self._on_btn_checked)

        self._1pxButton = QPushButton()
        self._1pxButton.setCheckable(True)
        self._1pxButton.setProperty("pixel_size", 1)

        icon = QIcon()
        icon.addPixmap(QPixmap(":/icons/ico_1px"), QIcon.Normal, QIcon.Off)

        self._1pxButton.setIcon(icon)
        self._1pxButton.setIconSize(QSize(21, 21))

        self._2pxButton = QPushButton()
        self._2pxButton.setCheckable(True)
        self._2pxButton.setProperty("pixel_size", 2)

        icon = QIcon()
        icon.addPixmap(QPixmap(":/icons/ico_2px"), QIcon.Normal, QIcon.Off)

        self._2pxButton.setIcon(icon)
        self._2pxButton.setIconSize(QSize(21, 21))

        self._4pxButton = QPushButton()
        self._4pxButton.setCheckable(True)
        self._4pxButton.setProperty("pixel_size", 4)

        icon = QIcon()
        icon.addPixmap(QPixmap(":/icons/ico_4px"), QIcon.Normal, QIcon.Off)

        self._4pxButton.setIcon(icon)
        self._4pxButton.setIconSize(QSize(21, 21))

        self._button_group.addButton(self._1pxButton, 0)
        self._button_group.addButton(self._2pxButton, 1)
        self._button_group.addButton(self._4pxButton, 2)

        self._layout.addWidget(self._1pxButton)
        self._layout.addWidget(self._2pxButton)
        self._layout.addWidget(self._4pxButton)

        self._1pxButton.setChecked(True)

        self.setLayout(self._layout)

    def _on_btn_checked(self):
        pixel_size = self._button_group.checkedButton().property("pixel_size")
        self.pixelSizeChanged.emit(pixel_size)
コード例 #9
0
ファイル: buttonarea.py プロジェクト: saltekar2000/sloth
class ButtonListWidget(QGroupBox):
    selectionChanged = pyqtSignal(object)

    def __init__(self, name, parent=None):
        QGroupBox.__init__(self, name, parent)
        self.setLayout(FloatingLayout())

        self.name = name
        self.button_group = QButtonGroup()
        self.button_group.setExclusive(False)
        self.buttons = {}

    def create_button(self, button_name):
        button = QPushButton(button_name)
        button.setFlat(True)
        button.setCheckable(True)
        button.clicked.connect(self.clickedButton)
        return button

    def add_button(self, button_name):
        button = self.create_button(button_name)
        self.buttons[button_name] = button
        self.layout().addWidget(button)
        self.button_group.addButton(button)
        return button

    def get_button(self, button_name):
        return self.buttons[button_name]

    def toggleChecked(self, button_name, apply=True):
        selection = None

        for button in self.button_group.buttons():
            if button.text() != button_name:
                button.setChecked(False)
            else:
                if apply:
                    button.setChecked(not button.isChecked())
                if button.isChecked():
                    selection = button_name

        self.selectionChanged.emit(selection)

    def clickedButton(self):
        button_name = str(self.sender().text())
        self.toggleChecked(button_name, False)

        #for button in self.button_group.buttons():
        #if button is not self.sender():
        #button.setChecked(False)
        #print "sender:", label_name

    def get_checked_button(self):
        return self.button_group.checkedButton()
コード例 #10
0
class PromotionDialog(QDialog):
    """
      BRIEF  A dialog used to decide what to promote a pawn to
   """
    def __init__(self, parent=None):
        """
         BRIF  Initialize the dialog with buttons
      """
        super().__init__(parent, Qt.WindowSystemMenuHint | Qt.WindowTitleHint)
        self.setWindowTitle("Promotion")

        radio_q = QRadioButton("q")
        radio_r = QRadioButton("r")
        radio_b = QRadioButton("b")
        radio_n = QRadioButton("n")

        self.button_group = QButtonGroup()
        self.button_group.addButton(radio_q)
        self.button_group.addButton(radio_r)
        self.button_group.addButton(radio_b)
        self.button_group.addButton(radio_n)

        radio_q.setChecked(True)

        radio_h_layout = QHBoxLayout()
        radio_h_layout.addWidget(radio_q)
        radio_h_layout.addWidget(radio_r)
        radio_h_layout.addWidget(radio_b)
        radio_h_layout.addWidget(radio_n)

        group_box = QGroupBox()
        group_box.setLayout(radio_h_layout)

        ok_button = QPushButton("Ok")
        cancel_button = QPushButton("Cancel")

        ok_button.released.connect(self.accept)
        cancel_button.released.connect(self.reject)

        button_h_layout = QHBoxLayout()
        button_h_layout.addWidget(ok_button)
        button_h_layout.addWidget(cancel_button)

        v_layout = QVBoxLayout()
        v_layout.addWidget(group_box)
        v_layout.addLayout(button_h_layout)
        self.setLayout(v_layout)

    def SelectedPiece(self):
        """
         BRIEF  Get the uci piece type the user selected from the dialog
      """
        return self.button_group.checkedButton().text()
コード例 #11
0
class FieldSelector(QDialog):
    def __init__(self, parent, mw: AnkiQt, note_type: int, field_type: str,
                 config: Config):
        super().__init__(parent)
        self.config = config
        self.mw = mw
        self.page = 0
        self.setWindowTitle("Select Fields")
        self.setFixedWidth(400)
        self.layout = QVBoxLayout()
        self.setLayout(self.layout)

        description_header = "<h1>Select Fields</h1>"
        description_label = QLabel(description_header)
        description_label.setMinimumSize(self.sizeHint())
        description_label.setWordWrap(True)
        description_label.setAlignment(Qt.AlignCenter)

        self.layout.addWidget(description_label)

        note_type_fetched = mw.col.models.get(note_type)

        description_label.setText(
            description_header +
            config.get_template(field_type, "noteTypeSpecific")
            ["description"].replace("{{noteType}}", note_type_fetched["name"]))

        fields: list = note_type_fetched["flds"]

        self.next_btn = QPushButton("Continue")
        self.next_btn.setEnabled(False)
        self.next_btn.clicked.connect(lambda: self.close())
        self.buttongroup = QButtonGroup()
        radios = []
        for field in fields:
            radio = QRadioButton(field["name"])
            radio.field = field["name"]
            radios.append(radio)

        [self.buttongroup.addButton(x) for x in radios]
        [self.layout.addWidget(x) for x in radios]
        self.buttongroup.buttonClicked.connect(self.selection_changed)
        self.selected_field = None
        self.layout.addWidget(self.next_btn)

    def selection_changed(self):
        selected = self.buttongroup.checkedButton()
        if selected is not None:
            self.selected_field = selected.field
            self.next_btn.setEnabled(True)
        else:
            self.selected_field = None
            self.next_btn.setEnabled(False)
コード例 #12
0
ファイル: gui_classes.py プロジェクト: bobev18/stujeditor
class LabelButtonGroup(QWidget):
    def __init__(self,
                 label='',
                 buttons={'UJ object reference value': 'Name to show'}):
        super(LabelButtonGroup, self).__init__()
        self.label = QLabel()
        self.label.setText(label)
        self.button_group = QButtonGroup()
        self.buttons = {}
        self.layout = QHBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.addWidget(self.label)
        for button_key in buttons.keys():
            self.buttons[button_key] = QRadioButton(buttons[button_key])
            self.button_group.addButton(self.buttons[button_key])
            self.layout.addWidget(self.buttons[button_key])

    def show(self):
        for button in self.buttons.values():
            button.show()
        self.label.show()

    def hide(self):
        for button in self.buttons.values():
            button.hide()
        self.label.hide()

    def set_text(self, key):
        if key != '':
            self.buttons[key].setChecked(1)

    def text(self):
        return self.button_group.checkedButton().text()

    def checked(self):
        return self.button_group.checkedButton()
コード例 #13
0
class DyStockTableSelectDlg(QDialog):

    def __init__(self, data, dlgName):
        super().__init__()

        self._data = data

        self._initUi(dlgName)

    def _initUi(self, dlgName):
        self.setWindowTitle(dlgName)
 
        allRadioButton = QRadioButton('所有'); allRadioButton.setChecked(True)
        highlightRadioButton = QRadioButton('高亮')

        # 添加到QButtonGroup
        self._buttonGroup = QButtonGroup()
        self._buttonGroup.addButton(allRadioButton, 1); 
        self._buttonGroup.addButton(highlightRadioButton, 2)

        cancelPushButton = QPushButton('Cancel')
        okPushButton = QPushButton('OK')
        cancelPushButton.clicked.connect(self._cancel)
        okPushButton.clicked.connect(self._ok)

        # 布局
        grid = QGridLayout()
        grid.setSpacing(10)
 
        grid.addWidget(allRadioButton, 1, 0)
        grid.addWidget(highlightRadioButton, 1, 1)

        grid.addWidget(okPushButton, 2, 1)
        grid.addWidget(cancelPushButton, 2, 0)
 
        self.setLayout(grid)
        self.setMinimumWidth(QApplication.desktop().size().width()//5)

    def _ok(self):
        checkedButton = self._buttonGroup.checkedButton()
        text = checkedButton.text()
        self._data['all'] = True if text == '所有' else False

        self.accept()

    def _cancel(self):
        self.reject()
コード例 #14
0
class DyStockTableSelectDlg(QDialog):
    def __init__(self, data, dlgName):
        super().__init__()

        self._data = data

        self._initUi(dlgName)

    def _initUi(self, dlgName):
        self.setWindowTitle(dlgName)

        allRadioButton = QRadioButton('所有')
        allRadioButton.setChecked(True)
        highlightRadioButton = QRadioButton('高亮')

        # 添加到QButtonGroup
        self._buttonGroup = QButtonGroup()
        self._buttonGroup.addButton(allRadioButton, 1)
        self._buttonGroup.addButton(highlightRadioButton, 2)

        cancelPushButton = QPushButton('Cancel')
        okPushButton = QPushButton('OK')
        cancelPushButton.clicked.connect(self._cancel)
        okPushButton.clicked.connect(self._ok)

        # 布局
        grid = QGridLayout()
        grid.setSpacing(10)

        grid.addWidget(allRadioButton, 1, 0)
        grid.addWidget(highlightRadioButton, 1, 1)

        grid.addWidget(okPushButton, 2, 1)
        grid.addWidget(cancelPushButton, 2, 0)

        self.setLayout(grid)
        self.setMinimumWidth(QApplication.desktop().size().width() // 5)

    def _ok(self):
        checkedButton = self._buttonGroup.checkedButton()
        text = checkedButton.text()
        self._data['all'] = True if text == '所有' else False

        self.accept()

    def _cancel(self):
        self.reject()
コード例 #15
0
class Select_Dialog(QDialog, Ui_Dialog):
    def __init__(self):
        super(QDialog, self).__init__()
        super(Ui_Dialog, self).__init__()
        super().setupUi(self)
        self.bg = QButtonGroup()
        self.bg.addButton(self.maxlikelihoodButton, 0)
        self.bg.addButton(self.mindistButton, 1)
        self.bg.addButton(self.mahalanobisButton, 2)
        self.bg.addButton(self.anotherButton, 3)
        self.bg.addButton(self.randomforestButton, 4)
        self.bg.addButton(self.svmButton, 5)
        self.bg.addButton(self.annButton, 6)
        self.bg.addButton(self.adaboostButton, 7)
        self.pushButton.clicked.connect(self.submit)

    def submit(self):
        self.chosen = self.bg.checkedButton().text()
        self.close()
コード例 #16
0
class IdgamesDetailView(Base, Form):
    def __init__(self, root, controller, parent=None):
        super(self.__class__, self).__init__(parent)

        self.setupUi(self)
        add_widget(root, self, 'IDGAMES_DETAIL')

        self.controller = controller

        self.mirror_button_group = QButtonGroup()
        self.button_layout = self.findChild(QVBoxLayout, 'idgames_detail_download_layout')
        radio_button_labels = ['Germany','Idaho','Greece','Greece (HTTP)','Texas','Germany (TLS)','New York','Virginia']
        for i, label in enumerate(radio_button_labels):
            radio_button = QRadioButton(label)
            radio_button.setObjectName(label.upper())
            radio_button.setChecked(i == 0)
            self.button_layout.insertWidget(1 + i, radio_button)
            self.mirror_button_group.addButton(radio_button)

        data_labels = ['title', 'filename', 'size', 'date', 'author', 'description', 'credits', 'base', 'buildtime', 'editors', 'bugs','rating']
        self.idgames_response_widget = IdgamesResponseWidget(self, data_labels, 'idgames_detail', self.download, data_labels)

    def set_data(self, item, already_downloaded, detail_type):
        self.detail_type = detail_type
        self.idgames_response_widget.set_data(item, already_downloaded)
        self.textfile = self.findChild(QPlainTextEdit, 'idgames_detail_textfile')

        if item.get('textfile'):
            self.textfile.setPlainText(item['textfile'])
            self.textfile.show()
        else:
            self.textfile.hide()

    def download(self, id):
        mirror = self.mirror_button_group.checkedButton().objectName()
        self.controller.download(id, mirror, self.detail_type)
コード例 #17
0
class DrawMain(QWidget):
    fileName = ""
    def __init__(self,*args):
        super(DrawMain, self).__init__(*args)
        self.grid = QGridLayout(self)
        self.grid.addWidget(QLabel(),0,0,1,23)
        self.grid.addWidget(QLabel(), 0, 23, 24, 1)
        self.Excel_Loader()
        self.Logo_Print()

    def Excel_Loader(self):
        # ------------title----------------------------------
        self.csv_title = QLabel()
        self.csv_title.setObjectName("title_label")
        self.csv_title.setText('路径')
        self.grid.addWidget(self.csv_title, 2,1,1,22, Qt.AlignLeft | Qt.AlignVCenter)
        # ------------lable----------------------------------
        self.csv_lable = QLabel()
        self.csv_lable.setObjectName("normal_label")
        self.csv_lable.setText('请点击右侧按钮选择市场预算表......')
        self.grid.addWidget(self.csv_lable, 5,2,2,19, Qt.AlignLeft | Qt.AlignVCenter)
        # ------------load_btn----------------------------------
        self.csv_btn = QPushButton('...')
        self.csv_btn.setObjectName('load_btn_CSV')
        self.csv_btn.clicked.connect(self.msg)
        self.grid.addWidget(self.csv_btn, 5,21,2,2, Qt.AlignRight | Qt.AlignVCenter)
        # ------------title----------------------------------
        self.csv_title = QLabel()
        self.csv_title.setObjectName("title_label")
        self.csv_title.setText('表名')
        self.grid.addWidget(self.csv_title, 9, 1, 1, 22, Qt.AlignLeft | Qt.AlignVCenter)
        #-----------------rb---------------------------------
        self.bg1 = QButtonGroup()
        for index,item in enumerate(ROUTER.keys()):
            rb = QRadioButton(item)
            rb.setObjectName('rb_btn')
            if index < 4:
                self.grid.addWidget(rb, 11, 3+index*5, 2, 5, Qt.AlignLeft | Qt.AlignVCenter)
            elif index < 8:
                self.grid.addWidget(rb, 14, index*5-17, 2, 5, Qt.AlignLeft | Qt.AlignVCenter)
            else:
                self.grid.addWidget(rb, 17, index * 5 - 37, 2, 5, Qt.AlignLeft | Qt.AlignVCenter)
            self.bg1.addButton(rb, index)
         # -------------submit_btn-------------------------------
        self.sub_btn = QPushButton('点          击          上          传')
        self.sub_btn.setObjectName('submit_btn')
        self.sub_btn.clicked.connect(self.submit)
        self.grid.addWidget(self.sub_btn, 21, 2, 2, 18, Qt.AlignRight | Qt.AlignVCenter)

    def submit(self):
        if self.bg1.checkedButton():
            self.pL(self.bg1.checkedButton().text(),1)
            if self.fileName[-4:] == '.csv':
                str = self.fileName
                if len(str) > 40:
                    self.csv_lable.setText(str[0:40] + '......')
                else:
                    self.csv_lable.setText(str)
                self.csv_lable.setStyleSheet('#normal_label{color:gray}')
                self.threads = Job()
                self.threads.signal.connect(self.pL)
                self.threads.tbl_name = self.bg1.checkedButton().text()
                self.threads.setFileName(self.fileName)
                self.threads.start()
            else:
                self.csv_lable.setText('您选择的文件不是csv格式,请重新选择......')
                self.csv_lable.setStyleSheet('#normal_label{color:red}')
        else:
            self.pL("选择表名啊凶dei!",2)
            self.csv_lable.setText('选择表名啊凶dei!')
            self.csv_lable.setStyleSheet('#normal_label{color:red}')

    def msg(self):
        fileName, filetype = QFileDialog.getOpenFileName(self, "选取文件", DEFAULT_OPEN_PATH,
                                                          "All Files (*);;Text Files (*.txt)")
        self.fileName = fileName
        if fileName[-4:] == '.csv':
            str = fileName
            if len(str) > 40:
                self.csv_lable.setText(str[0:40] + '......')
            else:
                self.csv_lable.setText(str)
            self.csv_lable.setStyleSheet('#normal_label{color:gray}')
        else:
            self.csv_lable.setText('您选择的文件不是csv格式,请重新选择......')
            self.csv_lable.setStyleSheet('#normal_label{color:red}')

    def Logo_Print(self):
        # ------------title----------------------------------
        self.logo_label = QLabel()
        self.logo_label.setText('log......')
        self.logo_label.setObjectName("logo_label")
        self.grid.addWidget(self.logo_label, 23, 0, 1, 23, Qt.AlignLeft | Qt.AlignBottom)

    def pL(self,var,num=1):
        self.logo_label.setText(var)
        if num == 1:
            self.logo_label.setStyleSheet('#logo_label{color:gray}')
        elif num == 2 :
            self.csv_lable.setStyleSheet('#normal_label{color:red}')
            self.logo_label.setStyleSheet('#logo_label{color:red}')
        elif num == 3 :
            self.csv_lable.setStyleSheet('#normal_label{color:#69AAE0}')
            self.logo_label.setStyleSheet('#logo_label{color:#69AAE0}')
コード例 #18
0
class FileDialogWizardDialog(QDialog, Ui_FileDialogWizardDialog):
    """
    Class implementing the color dialog wizard dialog.
    
    It displays a dialog for entering the parameters
    for the QFileDialog code generator.
    """
    def __init__(self, pyqtVariant, parent=None):
        """
        Constructor
        
        @param pyqtVariant variant of PyQt (integer; 0, 4 or 5)
        @param parent parent widget (QWidget)
        """
        super(FileDialogWizardDialog, self).__init__(parent)
        self.setupUi(self)
        
        self.eStartWithCompleter = E5FileCompleter(self.eStartWith)
        self.eWorkDirCompleter = E5DirCompleter(self.eWorkDir)
        
        self.__pyqtVariant = pyqtVariant
        
        self.__typeButtonsGroup = QButtonGroup(self)
        self.__typeButtonsGroup.setExclusive(True)
        self.__typeButtonsGroup.addButton(self.rOpenFile, 1)
        self.__typeButtonsGroup.addButton(self.rOpenFiles, 2)
        self.__typeButtonsGroup.addButton(self.rSaveFile, 3)
        self.__typeButtonsGroup.addButton(self.rfOpenFile, 11)
        self.__typeButtonsGroup.addButton(self.rfOpenFiles, 12)
        self.__typeButtonsGroup.addButton(self.rfSaveFile, 13)
        self.__typeButtonsGroup.addButton(self.rDirectory, 20)
        self.__typeButtonsGroup.buttonClicked[int].connect(
            self.__toggleInitialFilterAndResult)
        self.__toggleInitialFilterAndResult(1)
        
        self.pyqtComboBox.addItems(["PyQt4", "PyQt5"])
        if self.__pyqtVariant == 5:
            self.pyqtComboBox.setCurrentIndex(1)
        else:
            self.pyqtComboBox.setCurrentIndex(0)
        
        self.rSaveFile.toggled[bool].connect(self.__toggleConfirmCheckBox)
        self.rfSaveFile.toggled[bool].connect(self.__toggleConfirmCheckBox)
        self.rDirectory.toggled[bool].connect(self.__toggleGroupsAndTest)
        self.cStartWith.toggled[bool].connect(self.__toggleGroupsAndTest)
        self.cWorkDir.toggled[bool].connect(self.__toggleGroupsAndTest)
        self.cFilters.toggled[bool].connect(self.__toggleGroupsAndTest)
        
        self.bTest = self.buttonBox.addButton(
            self.tr("Test"), QDialogButtonBox.ActionRole)
        
        msh = self.minimumSizeHint()
        self.resize(max(self.width(), msh.width()), msh.height())
    
    def __adjustOptions(self, options):
        """
        Private method to adjust the file dialog options.
        
        @param options file dialog options (QFileDialog.Options)
        @return modified options (QFileDialog.Options)
        """
        if Globals.isLinuxPlatform():
            options |= QFileDialog.DontUseNativeDialog
        return options
    
    @pyqtSlot(str)
    def on_pyqtComboBox_currentIndexChanged(self, txt):
        """
        Private slot to setup the dialog for the selected PyQt variant.
        
        @param txt text of the selected combo box entry (string)
        """
        self.rfOpenFile.setEnabled(txt == "PyQt5")
        self.rfOpenFiles.setEnabled(txt == "PyQt5")
        self.rfSaveFile.setEnabled(txt == "PyQt5")
        
        if txt == "PyQt5":
            if self.rfOpenFile.isChecked():
                self.rOpenFile.setChecked(True)
            elif self.rfOpenFiles.isChecked():
                self.rOpenFiles.setChecked(True)
            elif self.rfSaveFile.isChecked():
                self.rSaveFile.setChecked(True)
        
        self.__pyqtVariant = 5 if txt == "PyQt5" else 4
        
        self.__toggleInitialFilterAndResult(
            self.__typeButtonsGroup.checkedId())
    
    def on_buttonBox_clicked(self, button):
        """
        Private slot called by a button of the button box clicked.
        
        @param button button that was clicked (QAbstractButton)
        """
        if button == self.bTest:
            self.on_bTest_clicked()
    
    @pyqtSlot()
    def on_bTest_clicked(self):
        """
        Private method to test the selected options.
        """
        if self.rOpenFile.isChecked() or self.rfOpenFile.isChecked():
            if not self.cSymlinks.isChecked():
                options = QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            else:
                options = QFileDialog.Options()
            options = self.__adjustOptions(options)
            if self.rOpenFile.isChecked() and self.__pyqtVariant == 4:
                QFileDialog.getOpenFileName(
                    None,
                    self.eCaption.text(),
                    self.eStartWith.text(),
                    self.eFilters.text(),
                    options)
            else:
                QFileDialog.getOpenFileNameAndFilter(
                    None,
                    self.eCaption.text(),
                    self.eStartWith.text(),
                    self.eFilters.text(),
                    self.eInitialFilter.text(),
                    options)
        elif self.rOpenFiles.isChecked() or self.rfOpenFiles.isChecked():
            if not self.cSymlinks.isChecked():
                options = QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            else:
                options = QFileDialog.Options()
            options = self.__adjustOptions(options)
            if self.rOpenFiles.isChecked() and self.__pyqtVariant == 4:
                QFileDialog.getOpenFileNames(
                    None,
                    self.eCaption.text(),
                    self.eStartWith.text(),
                    self.eFilters.text(),
                    options)
            else:
                QFileDialog.getOpenFileNamesAndFilter(
                    None,
                    self.eCaption.text(),
                    self.eStartWith.text(),
                    self.eFilters.text(),
                    self.eInitialFilter.text(),
                    options)
        elif self.rSaveFile.isChecked() or self.rfSaveFile.isChecked():
            if not self.cSymlinks.isChecked():
                options = QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            else:
                options = QFileDialog.Options()
            options = self.__adjustOptions(options)
            if self.rSaveFile.isChecked() and self.__pyqtVariant == 4:
                QFileDialog.getSaveFileName(
                    None,
                    self.eCaption.text(),
                    self.eStartWith.text(),
                    self.eFilters.text(),
                    options)
            else:
                QFileDialog.getSaveFileNameAndFilter(
                    None,
                    self.eCaption.text(),
                    self.eStartWith.text(),
                    self.eFilters.text(),
                    self.eInitialFilter.text(),
                    options)
        elif self.rDirectory.isChecked():
            options = QFileDialog.Options()
            if not self.cSymlinks.isChecked():
                options |= QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            if self.cDirOnly.isChecked():
                options |= QFileDialog.Options(QFileDialog.ShowDirsOnly)
            else:
                options |= QFileDialog.Options(QFileDialog.Option(0))
            options = self.__adjustOptions(options)
            QFileDialog.getExistingDirectory(
                None,
                self.eCaption.text(),
                self.eWorkDir.text(),
                options)
    
    def __toggleConfirmCheckBox(self):
        """
        Private slot to enable/disable the confirmation check box.
        """
        self.cConfirmOverwrite.setEnabled(
            self.rSaveFile.isChecked() or self.rfSaveFile.isChecked())
    
    def __toggleGroupsAndTest(self):
        """
        Private slot to enable/disable certain groups and the test button.
        """
        if self.rDirectory.isChecked():
            self.filePropertiesGroup.setEnabled(False)
            self.dirPropertiesGroup.setEnabled(True)
            self.bTest.setDisabled(self.cWorkDir.isChecked())
        else:
            self.filePropertiesGroup.setEnabled(True)
            self.dirPropertiesGroup.setEnabled(False)
            self.bTest.setDisabled(
                self.cStartWith.isChecked() or self.cFilters.isChecked())
    
    def __toggleInitialFilterAndResult(self, id):
        """
        Private slot to enable/disable the initial filter elements and the
        results entries.
        
        @param id id of the clicked button (integer)
        """
        if (self.__pyqtVariant == 4 and id in [11, 12, 13]) or \
                (self.__pyqtVariant == 5 and id in [1, 2, 3]):
            enable = True
        else:
            enable = False
        self.lInitialFilter.setEnabled(enable)
        self.eInitialFilter.setEnabled(enable)
        self.cInitialFilter.setEnabled(enable)
        
        self.lFilterVariable.setEnabled(enable)
        self.eFilterVariable.setEnabled(enable)
    
    def getCode(self, indLevel, indString):
        """
        Public method to get the source code for Qt4 and Qt5.
        
        @param indLevel indentation level (int)
        @param indString string used for indentation (space or tab) (string)
        @return generated code (string)
        """
        # calculate our indentation level and the indentation string
        il = indLevel + 1
        istring = il * indString
        estring = os.linesep + indLevel * indString
        
        # now generate the code
        if self.parentSelf.isChecked():
            parent = "self"
        elif self.parentNone.isChecked():
            parent = "None"
        elif self.parentOther.isChecked():
            parent = self.parentEdit.text()
            if parent == "":
                parent = "None"
        
        # prepare the result variables
        nameVariable = self.eNameVariable.text()
        if not nameVariable:
            if self.__typeButtonsGroup.checkedButton() in [
                    self.rOpenFile, self.rfOpenFile,
                    self.rSaveFile, self.rfSaveFile]:
                nameVariable = "fileName"
            elif self.__typeButtonsGroup.checkedButton() in [
                    self.rOpenFiles, self.rfOpenFiles]:
                nameVariable = "fileNames"
            elif self.__typeButtonsGroup.checkedButton() == self.rDirectory:
                nameVariable = "dirName"
            else:
                nameVariable = "res"
        filterVariable = self.eFilterVariable.text()
        if not filterVariable:
            if (self.__pyqtVariant == 4 and
                self.__typeButtonsGroup.checkedButton() in [
                    self.rfOpenFile, self.rfOpenFiles, self.rfSaveFile]) or \
                    (self.__pyqtVariant == 5 and
                        self.__typeButtonsGroup.checkedButton() in [
                            self.rOpenFile, self.rOpenFiles, self.rSaveFile]):
                filterVariable = ", selectedFilter"
            else:
                filterVariable = ""
        
        code = '{0}{1} = QFileDialog.'.format(nameVariable, filterVariable)
        if self.rOpenFile.isChecked() or self.rfOpenFile.isChecked():
            if self.rOpenFile.isChecked():
                code += 'getOpenFileName({0}{1}'.format(os.linesep, istring)
            else:
                code += 'getOpenFileNameAndFilter({0}{1}'.format(
                    os.linesep, istring)
            code += '{0},{1}{2}'.format(parent, os.linesep, istring)
            if not self.eCaption.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                code += 'self.tr("{0}"),{1}{2}'.format(
                    self.eCaption.text(), os.linesep, istring)
            if not self.eStartWith.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                if self.cStartWith.isChecked():
                    fmt = '{0},{1}{2}'
                else:
                    fmt = 'self.tr("{0}"),{1}{2}'
                code += fmt.format(self.eStartWith.text(), os.linesep, istring)
            if self.eFilters.text() == "":
                code += '""'
            else:
                if self.cFilters.isChecked():
                    fmt = '{0}'
                else:
                    fmt = 'self.tr("{0}")'
                code += fmt.format(self.eFilters.text())
            if self.rfOpenFile.isChecked() or self.__pyqtVariant == 5:
                if self.eInitialFilter.text() == "":
                    filter = "None"
                else:
                    if self.cInitialFilter.isChecked():
                        fmt = '{0}'
                    else:
                        fmt = 'self.tr("{0}")'
                    filter = fmt.format(self.eInitialFilter.text())
                code += ',{0}{1}{2}'.format(os.linesep, istring, filter)
            if not self.cSymlinks.isChecked():
                code += \
                    ',{0}{1}QFileDialog.Options(' \
                    'QFileDialog.DontResolveSymlinks)' \
                    .format(os.linesep, istring)
            code += '){0}'.format(estring)
        elif self.rOpenFiles.isChecked() or self.rfOpenFiles.isChecked():
            if self.rOpenFiles.isChecked():
                code += 'getOpenFileNames({0}{1}'.format(os.linesep, istring)
            else:
                code += 'getOpenFileNamesAndFilter({0}{1}'.format(
                    os.linesep, istring)
            code += '{0},{1}{2}'.format(parent, os.linesep, istring)
            if not self.eCaption.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                code += 'self.tr("{0}"),{1}{2}'.format(
                    self.eCaption.text(), os.linesep, istring)
            if not self.eStartWith.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                if self.cStartWith.isChecked():
                    fmt = '{0},{1}{2}'
                else:
                    fmt = 'self.tr("{0}"),{1}{2}'
                code += fmt.format(self.eStartWith.text(), os.linesep, istring)
            if not self.eFilters.text():
                code += '""'
            else:
                if self.cFilters.isChecked():
                    fmt = '{0}'
                else:
                    fmt = 'self.tr("{0}")'
                code += fmt.format(self.eFilters.text())
            if self.rfOpenFiles.isChecked() or self.__pyqtVariant == 5:
                if self.eInitialFilter.text() == "":
                    filter = "None"
                else:
                    if self.cInitialFilter.isChecked():
                        fmt = '{0}'
                    else:
                        fmt = 'self.tr("{0}")'
                    filter = fmt.format(self.eInitialFilter.text())
                code += ',{0}{1}{2}'.format(os.linesep, istring, filter)
            if not self.cSymlinks.isChecked():
                code += \
                    ',{0}{1}QFileDialog.Options(' \
                    'QFileDialog.DontResolveSymlinks)' \
                    .format(os.linesep, istring)
            code += '){0}'.format(estring)
        elif self.rSaveFile.isChecked() or self.rfSaveFile.isChecked():
            if self.rSaveFile.isChecked():
                code += 'getSaveFileName({0}{1}'.format(os.linesep, istring)
            else:
                code += 'getSaveFileNameAndFilter({0}{1}'.format(
                    os.linesep, istring)
            code += '{0},{1}{2}'.format(parent, os.linesep, istring)
            if not self.eCaption.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                code += 'self.tr("{0}"),{1}{2}'.format(
                    self.eCaption.text(), os.linesep, istring)
            if not self.eStartWith.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                if self.cStartWith.isChecked():
                    fmt = '{0},{1}{2}'
                else:
                    fmt = 'self.tr("{0}"),{1}{2}'
                code += fmt.format(self.eStartWith.text(), os.linesep, istring)
            if not self.eFilters.text():
                code += '""'
            else:
                if self.cFilters.isChecked():
                    fmt = '{0}'
                else:
                    fmt = 'self.tr("{0}")'
                code += fmt.format(self.eFilters.text())
            if self.rfSaveFile.isChecked() or self.__pyqtVariant == 5:
                if self.eInitialFilter.text() == "":
                    filter = "None"
                else:
                    if self.cInitialFilter.isChecked():
                        fmt = '{0}'
                    else:
                        fmt = 'self.tr("{0}")'
                    filter = fmt.format(self.eInitialFilter.text())
                code += ',{0}{1}{2}'.format(os.linesep, istring, filter)
            if (not self.cSymlinks.isChecked()) or \
               (not self.cConfirmOverwrite.isChecked()):
                code += ',{0}{1}QFileDialog.Options('.format(
                    os.linesep, istring)
                if not self.cSymlinks.isChecked():
                    code += 'QFileDialog.DontResolveSymlinks'
                if (not self.cSymlinks.isChecked()) and \
                   (not self.cConfirmOverwrite.isChecked()):
                    code += ' | '
                if not self.cConfirmOverwrite.isChecked():
                    code += 'QFileDialog.DontConfirmOverwrite'
                code += ')'
            code += '){0}'.format(estring)
        elif self.rDirectory.isChecked():
            code += 'getExistingDirectory({0}{1}'.format(os.linesep, istring)
            code += '{0},{1}{2}'.format(parent, os.linesep, istring)
            if not self.eCaption.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                code += 'self.tr("{0}"),{1}{2}'.format(
                    self.eCaption.text(), os.linesep, istring)
            if not self.eWorkDir.text():
                code += '""'
            else:
                if self.cWorkDir.isChecked():
                    fmt = '{0}'
                else:
                    fmt = 'self.tr("{0}")'
                code += fmt.format(self.eWorkDir.text())
            code += ',{0}{1}QFileDialog.Options('.format(os.linesep, istring)
            if not self.cSymlinks.isChecked():
                code += 'QFileDialog.DontResolveSymlinks | '
            if self.cDirOnly.isChecked():
                code += 'QFileDialog.ShowDirsOnly'
            else:
                code += 'QFileDialog.Option(0)'
            code += ')){0}'.format(estring)
            
        return code
コード例 #19
0
class FoodOrder(QWidget):
    def __init__(self):
        super().__init__()
        self.initialize_ui()

    def initialize_ui(self):
        self.setMinimumSize(600, 700)
        self.setWindowTitle('Food Order GUI')
        self.setupTabsAndLayout()
        self.show()

    def setupTabsAndLayout(self):
        """
        Set up tab bar and different tab widgets.
        Also, create the side widget to display items selected.
        """
        self.tab_bar = QTabWidget()

        self.pizza_tab = QWidget()
        self.pizza_tab.setObjectName("Tabs")

        self.wings_tab = QWidget()
        self.wings_tab.setObjectName("Tabs")

        self.tab_bar.addTab(self.pizza_tab, "Pizza")
        self.tab_bar.addTab(self.wings_tab, "Wings")

        self.pizzaTab()
        self.wingsTab()

        # Set up side widget which is not part of the tab widget
        self.side_widget = QWidget()
        self.side_widget.setObjectName("Tabs")

        order_label = QLabel("YOUR ORDER")
        order_label.setObjectName("Header")

        items_box = QWidget()
        items_box.setObjectName("Side")
        pizza_label = QLabel("Pizza Type: ")
        self.display_pizza_label = QLabel("")
        toppings_label = QLabel("Toppings: ")
        self.display_toppings_label = QLabel("")
        extra_label = QLabel("Extra: ")
        self.display_wings_label = QLabel("")

        # Set grid layout for objects in side widget
        items_grid = QGridLayout()
        items_grid.addWidget(pizza_label, 0, 0, Qt.AlignRight)
        items_grid.addWidget(self.display_pizza_label, 0, 1)
        items_grid.addWidget(toppings_label, 1, 0, Qt.AlignRight)
        items_grid.addWidget(self.display_toppings_label, 1, 1)
        items_grid.addWidget(extra_label, 2, 0, Qt.AlignRight)
        items_grid.addWidget(self.display_wings_label, 2, 1)
        items_box.setLayout(items_grid)

        # Set main layout for side widget
        side_v_box = QVBoxLayout()
        side_v_box.addWidget(order_label)
        side_v_box.addWidget(items_box)
        side_v_box.addStretch()
        self.side_widget.setLayout(side_v_box)

        # Add widgets to main window and set layout
        main_h_box = QHBoxLayout()
        main_h_box.addWidget(self.tab_bar)
        main_h_box.addWidget(self.side_widget)
        self.setLayout(main_h_box)

    def pizzaTab(self):
        """
        Create the pizza tab. Allows the user to select the type
        of pizza and topping using radio buttons.
        """
        tab_pizza_label = QLabel("BUILD YOUR OWN PIZZA")
        tab_pizza_label.setObjectName("Header")

        description_box = QWidget()
        description_box.setObjectName("ImageBorder")

        pizza_image_path = "images/pizza.png"
        pizza_image = self.loadImage(pizza_image_path)

        pizza_desc = QLabel()
        pizza_desc.setObjectName("ImageInfo")

        pizza_desc.setText(
            "Build a custom pizza for you. Start with your favorite crust and add any toppings, "
            "plus the perfect amount of cheese and sauce.")
        pizza_desc.setWordWrap(True)

        h_box = QHBoxLayout()
        h_box.addWidget(pizza_image)
        h_box.addWidget(pizza_desc)

        description_box.setLayout(h_box)

        crust_gbox = QGroupBox()
        crust_gbox.setTitle("CHOOSE YOUR CRUST")

        self.crust_group = QButtonGroup()
        gb_v_box = QVBoxLayout()
        crust_list = ["Hand-Tossed", "Flat", "Stuffed"]

        for cr in crust_list:
            crust_rb = QRadioButton(cr)
            gb_v_box.addWidget(crust_rb)
            self.crust_group.addButton(crust_rb)

        crust_gbox.setLayout(gb_v_box)

        # Create group box that will contain toppings choices
        toppings_gbox = QGroupBox()
        toppings_gbox.setTitle("CHOOSE YOUR TOPPINGS")

        # Set up button group for toppings radio buttons
        self.toppings_group = QButtonGroup()
        gb_v_box = QVBoxLayout()

        toppings_list = [
            "Pepperoni", "Sausage", "Bacon", "Canadian Bacon", "Beef",
            "Pineapple", "Mushroom", "Onion", "Olive", "Green Pepper",
            "Tomato", "Spinach", "Cheese"
        ]
        # Create radio buttons for the different toppings and
        # add to layout
        for top in toppings_list:
            toppings_rb = QRadioButton(top)
            gb_v_box.addWidget(toppings_rb)
            self.toppings_group.addButton(toppings_rb)
        self.toppings_group.setExclusive(False)

        toppings_gbox.setLayout(gb_v_box)

        # Create button to add information to side widget
        # when clicked
        add_to_order_button1 = QPushButton("Add To Order")
        add_to_order_button1.clicked.connect(self.displayPizzaInOrder)

        # create layout for pizza tab (page 1)
        page1_v_box = QVBoxLayout()
        page1_v_box.addWidget(tab_pizza_label)
        page1_v_box.addWidget(description_box)
        page1_v_box.addWidget(crust_gbox)
        page1_v_box.addWidget(toppings_gbox)
        page1_v_box.addStretch()
        page1_v_box.addWidget(add_to_order_button1, alignment=Qt.AlignRight)

        self.pizza_tab.setLayout(page1_v_box)

    def wingsTab(self):
        """
        Set up widgets and layouts to display information to the user about the page
        """
        tab_wings_label = QLabel("TRY OUR AMAZING WINGS")
        tab_wings_label.setObjectName("Header")
        description_box = QWidget()
        description_box.setObjectName("ImageBorder")
        wings_image_path = "images/wings.png"
        wings_image = self.loadImage(wings_image_path)
        wings_desc = QLabel()
        wings_desc.setObjectName("ImageInfo")
        wings_desc.setText(
            "6 pieces of rich-tasting, white meat chicken that will have you coming back for more."
        )
        wings_desc.setWordWrap(True)

        h_box = QHBoxLayout()
        h_box.addWidget(wings_image)
        h_box.addWidget(wings_desc)

        description_box.setLayout(h_box)

        wings_gbox = QGroupBox()
        wings_gbox.setTitle("CHOOSE YOUR FLAVOR")

        self.wings_group = QButtonGroup()
        gb_v_box = QVBoxLayout()
        wings_list = ["Buffalo", "Sweet-Sour", "Teriyaki", "Barbecue"]

        for fl in wings_list:
            flavor_rb = QRadioButton(fl)
            gb_v_box.addWidget(flavor_rb)
            self.wings_group.addButton(flavor_rb)

        wings_gbox.setLayout(gb_v_box)

        add_to_order_button2 = QPushButton("Add To Order")
        add_to_order_button2.clicked.connect(self.displayWingsInOrder)

        page2_v_box = QVBoxLayout()
        page2_v_box.addWidget(tab_wings_label)
        page2_v_box.addWidget(description_box)
        page2_v_box.addWidget(wings_gbox)
        page2_v_box.addWidget(add_to_order_button2, alignment=Qt.AlignRight)
        page2_v_box.addStretch()

        self.wings_tab.setLayout(page2_v_box)

    def collectTopingfInList(self):
        """
        Create list of all checked toppings radio  buttons.
        """
        return [
            button.text()
            for i, button in enumerate(self.toppings_group.buttons())
            if button.isChecked()
        ]

    def displayPizzaInOrder(self):
        """
        Collect the text from the radio buttons that are checked on pizza page.
        Display text in side widget.
        """
        try:
            pizza_text = self.crust_group.checkedButton().text()
            self.display_pizza_label.setText(pizza_text)

            toppings = self.collectTopingfInList()
            toppings_str = '\n'.join(toppings)
            self.display_toppings_label.setText(toppings_str)
            self.repaint()
        except AttributeError:
            print("No value selected.")
            QMessageBox.warning(self, "Error", "No value selected",
                                QMessageBox.Ok)
            pass

    def displayWingsInOrder(self):
        """
        Collect the text from the radio buttons that are checked on wings page.
        Display text in side widget.
        """
        try:
            text = self.wings_group.checkedButton().text() + " Wings"
            self.display_wings_label.setText(text)
            self.repaint()
        except AttributeError:
            # print("No value selected.")
            QMessageBox.warning(self, "Error", "No value selected",
                                QMessageBox.Ok)
            pass

    def loadImage(self, path):
        """
        Load and scale images.
        :param path: path to the file
        """
        try:
            with open(path):
                image = QLabel(self)
                image.setObjectName("ImageInfo")
                pixmap = QPixmap(path)
                image.setPixmap(
                    pixmap.scaled(image.size(), Qt.KeepAspectRatioByExpanding,
                                  Qt.SmoothTransformation))
                return image
        except FileNotFoundError:
            print("Image not found.")
コード例 #20
0
class TARWindow(QDialog):
    def __init__(self, resource, size):
        # Load UI
        super(TARWindow, self).__init__()
        uic.loadUi(GUI_FOLDER + 'tarCreation.ui', self)
        self.resource = cv2.imread(resource)
        self.h, self.w = self.resource.shape[:2]
        self.tileSize = size
        # We'll need a temporal folder
        self.tmp_dir = tempfile.mkdtemp()
        # In order to get the tiles we'll define the size
        self.resourceView.setIconSize(QSize(size, size))
        # Defining labels
        self.comprLabel.setText('Compression:')
        c = self.getTiles(self.resource, self.h, self.w, self.tileSize)
        self.columns, self.rows = c
        self.refreshdir(self.columns, self.rows, self.tileSize)
        # Radio Buttons in a group
        self.comprGroup = QButtonGroup()
        self.comprGroup.addButton(self.tarRadio)
        self.comprGroup.addButton(self.targzRadio)
        self.comprGroup.addButton(self.tarbz2Radio)
        self.comprGroup.addButton(self.tarxzRadio)
        # We'll define a compression by default
        self.targzRadio.setChecked(True)
        # If we don't define blankTile right now it will return an error
        self.blankTile = str()
        # Signals
        self.blankButton.clicked.connect(self.setBlank)
        self.saveBox.accepted.connect(self.saveTilemap)
        self.saveBox.rejected.connect(self.cancel)

    def getTiles(self, resource, h, w, tileSize):
        # This cuts the resource and put it on the temporary folder.
        r = 0
        for i in range(0, h, tileSize):
            c = 0
            for j in range(0, w, tileSize):
                box = self.resource[i:i + tileSize, j:j + tileSize]
                nm = str(c) + '-' + str(r) + '.png'
                place = os.path.join(self.tmp_dir, nm)
                cv2.imwrite(place, box)
                c += 1
            r += 1
        return (c, r)

    def hashsum(self, path, hex=True, hash_type=hashlib.md5):
        # All this function was for deleting the repeated tiles. I won't use
        # it.
        hashinst = hash_type()
        blocksize = hashinst.block_size * 128
        with open(path, 'rb') as f:
            for chunk in iter(lambda: f.read(blocksize), b''):
                hashinst.update(chunk)
        return (hashinst.hexdigest() if hex else hashinst.digest())

    def refreshdir(self, c, r, size):
        # This loads the tilemap
        self.resourceView.setColumnCount(c)
        self.resourceView.setRowCount(r)
        for column in range(0, c):
            self.resourceView.setColumnWidth(column, size)
            for row in range(0, r):
                self.resourceView.setRowHeight(row, size)
                filename = str(column) + '-' + str(row) + '.png'
                filedir = os.path.join(self.tmp_dir, filename)
                icon = QIcon(filedir)
                item = QTableWidgetItem(icon, None)
                self.resourceView.setItem(row, column, item)

    @pyqtSlot()
    def setBlank(self):
        # Set the blank tile. When you load a new map, the tilemap will give a
        # default tile for the blank map.
        r = str(self.resourceView.currentRow())
        c = str(self.resourceView.currentColumn())
        file = c + '-' + r
        pixmap = QPixmap(os.path.join(self.tmp_dir, file + '.png'))
        pixmapitem = QGraphicsPixmapItem(pixmap)
        scene = QGraphicsScene()
        scene.addItem(pixmapitem)
        self.tileView.setScene(scene)
        self.blankTile = file

    def saveTilemap(self):
        # We have to define c and r from self
        # Because PyQt Signals are shitty
        # So I'm using a singals style that can't pass arguments
        c = self.columns
        r = self.rows
        # We'll write the metadata
        fileplace = os.path.join(self.tmp_dir, 'metafile.ini')
        # You may be thinking:
        # "Why did you write this string on such a shitty way?"
        # And the answer is: "NONE OF YOUR F*****G BUSINESS
        METADATA = ("[META]\n"
                    "COLUMNS = {0}\n"
                    "ROWS = {1}\n"
                    "BLANKTILE = {2}\n"
                    "TILESIZE = {3}\n").format(c, r, self.blankTile,
                                               self.tileSize)
        with open(fileplace, 'w') as metafile:
            metafile.write(METADATA)
        filters = 'TAR (*.tar, *.tar.gz, *.tar.xz, *.tar.bz2)'
        rawSuffix = self.comprGroup.checkedButton().text()
        suffix = rawSuffix.split(' ')[1][1:-1]
        sufParts = suffix.split('.')
        savefile = QFileDialog().getSaveFileName(filter=filters)
        if len(sufParts) > 2:
            openAs = 'w:{0}'.format(sufParts[-1])
        else:
            openAs = 'w'
        with tarfile.open(savefile[0] + suffix, openAs) as tar:
            for i in os.listdir(self.tmp_dir):
                tar.add(os.path.join(self.tmp_dir, i), arcname=i)
                os.remove(os.path.join(self.tmp_dir, i))
        os.removedirs(self.tmp_dir)
        self.close()

    def cancel(self):
        self.close()
コード例 #21
0
class Example(QMainWindow):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        # 布局
        # # 总体布局
        self.setGeometry(300, 300, 1400, 750)
        self.setWindowTitle(u'组卷系统')
        self.setWindowIcon(QIcon('paper.png'))

        # # 菜单栏
        menubar = self.menuBar()
        # # # 题库选择
        choose_database = menubar.addMenu("题库选择")

        self.local_data = QAction('本地题库', self, checkable=True)
        self.local_data.setChecked(True)
        self.local_data.toggled.connect(self.local_data_choosed)
        choose_database.addAction(self.local_data)

        self.online_data = QAction('在线题库', self, checkable=True)
        self.online_data.setChecked(False)
        self.online_data.toggled.connect(self.online_data_choosed)
        choose_database.addAction(self.online_data)
        # # # 帮助
        help_menu = menubar.addMenu("帮助")

        self.tips = QAction('帮助', self)
        self.tips.triggered.connect(self.something_helpful)
        help_menu.addAction(self.tips)

        self.info = QAction('联系作者', self)
        self.info.triggered.connect(self.author)
        help_menu.addAction(self.info)

        # # 单选10*5
        title = QLabel(self)
        title.setText('一、单选题(每题5分,共10题)')
        title.adjustSize()
        title.move(60, 40)
        for i in range(10):
            # 用exec批量生成题目
            content = "self.title{} = QLabel(self)".format(str(i))
            content += "\nself.title{}.setText('default')".format(str(i))
            content += "\nself.title{}.move(60,{})".format(
                str(i), (i + 1) * 60 + 20)
            content += "\nself.title{}.adjustSize()".format(str(i))
            content += "\nself.bg{} = QButtonGroup(self)".format(str(i))
            exec(content)
            for j in range(4):
                content = "self.but{} = QRadioButton('default',self)".format(
                    str(i) + str(j))
                content += "\nself.but{}.move({},{})".format(
                    str(i) + str(j), (j + 1) * 150 - 40, (i + 1) * 60 + 45)
                content += "\nself.bg{}.addButton(self.but{})".format(
                    str(i),
                    str(i) + str(j))
                exec(content)

        # # 填空3*10
        title = QLabel(self)
        title.setText('二、填空题(每题10分,共3题)')
        title.adjustSize()
        title.move(710, 40)

        for i in range(3):
            # 用exec批量生成题目
            content = "self.cloze_title{} = QLabel(self)".format(str(i))
            content += "\nself.cloze_title{}.setText('default')".format(str(i))
            content += "\nself.cloze_title{}.move(710,{})".format(
                str(i), (i + 1) * 60 + 20)

            content += "\nself.cloze_ans{} = QLineEdit(self)".format(str(i))
            content += "\nself.cloze_ans{}.move(710,{})".format(
                str(i), (i + 1) * 60 + 50)
            content += "\nself.cloze_ans{}.resize(70,20)".format(str(i))
            exec(content)

        # # 判断2*10
        title = QLabel(self)
        title.setText('三、判断题(每题10分,共2题)')
        title.adjustSize()
        title.move(710, 400)

        for i in range(2):
            content = "self.binery_choice{} = QLabel(self)".format(str(i))
            content += "\nself.binery_choice{}.setText('default')".format(
                str(i))
            content += "\nself.binery_choice{}.move(710,{})".format(
                str(i), (i + 1) * 60 + 380)
            exec(content)
        self.bc1 = QButtonGroup(self)
        self.bc2 = QButtonGroup(self)
        self.bc1_ansT = QRadioButton('T', self)
        self.bc1_ansF = QRadioButton('F', self)
        self.bc2_ansT = QRadioButton('T', self)
        self.bc2_ansF = QRadioButton('F', self)
        self.bc1.addButton(self.bc1_ansT)
        self.bc1.addButton(self.bc1_ansF)
        self.bc2.addButton(self.bc2_ansT)
        self.bc2.addButton(self.bc2_ansF)
        self.bc1_ansT.move(730, 470)
        self.bc1_ansF.move(790, 470)
        self.bc2_ansT.move(730, 530)
        self.bc2_ansF.move(790, 530)

        # # 组卷交卷评分
        self.make_paper = QPushButton("组卷", self)
        self.make_paper.clicked.connect(self.make)
        self.make_paper.move(420, 680)
        self.btn_submit = QPushButton(u"交卷", self)
        self.btn_submit.clicked.connect(self.submit)
        self.btn_submit.move(550, 680)

        self.flag = False

        # # 显示
        self.show()

    # 实现菜单栏单选
    def local_data_choosed(self):
        if self.local_data.isChecked():
            self.online_data.setChecked(False)
        else:
            self.online_data.setChecked(True)

    def online_data_choosed(self):
        if self.online_data.isChecked():
            self.local_data.setChecked(False)
        else:
            self.local_data.setChecked(True)

    # 实现菜单栏帮助选项
    def something_helpful(self):
        QMessageBox.information(
            self, "帮助信息",
            "点击组卷可以生成试卷\n点击交卷提交并评分\n线上题库将连接作者云服务器,服务在课程完成评分后关闭\n阅读README.md文件获取更多信息"
        )

    def author(self):
        QMessageBox.information(
            self, "作者信息",
            "仇白渊\n2018011217014\nhttps://github.com/bugmaker2\n此作品为Python课程课设")

    # 组成试卷
    def make(self):
        self.flag = True
        if self.local_data.isChecked():
            self.make_from_local()
        elif self.online_data.isChecked():
            self.make_from_online()

    def make_from_local(self):
        self.ans = []  # 用于记录正确答案
        # 单选题组卷
        with open('single choice.csv', 'r') as f:
            reader = csv.reader(f)
            all_question = list(reader)
            ques_id = random.sample(range(len(all_question)), 10)  # 随机选取10题单选
            n = 0
            for i in ques_id:
                content = "self.title{}.setText(str({})+'.'+all_question[i][0])".format(
                    str(n), n + 1)
                content += "\nself.title{}.adjustSize()".format(str(n))
                # 打乱选项次序
                choice_id = random.sample(range(4), 4)
                m = 0
                for abcd in choice_id:
                    content += "\nself.but{}.setText(all_question[i][{}])".format(
                        str(n) + str(m), abcd + 1)
                    content += "\nself.but{}.adjustSize()".format(
                        str(n) + str(m))
                    m += 1
                n += 1
                exec(content)
                # 添加正确答案
                self.ans.append(all_question[i][5])

        # 填空题组卷
        with open('cloze.csv', 'r') as f:
            reader = csv.reader(f)
            all_question = list(reader)
            ques_id = random.sample(range(len(all_question)), 3)
            n = 0

            for i in ques_id:
                content = "self.cloze_title{}.setText(all_question[i][0])".format(
                    str(n))
                content += "\nself.cloze_title{}.adjustSize()".format(str(n))
                content += "\nself.cloze_ans{}.setText('')".format(str(n))
                exec(content)
                self.ans.append(all_question[i][1])
                n += 1

        # 判断题组卷
        with open('binery choice.csv', 'r') as f:
            reader = csv.reader(f)
            all_question = list(reader)
            ques_id = random.sample(range(len(all_question)), 2)
            self.binery_choice0.setText(all_question[ques_id[0]][0])
            self.binery_choice1.setText(all_question[ques_id[1]][0])
            self.binery_choice0.adjustSize()
            self.binery_choice1.adjustSize()

            self.ans.append(all_question[ques_id[0]][1])
            self.ans.append(all_question[ques_id[1]][1])

    def make_from_online(self):
        QMessageBox.information(self, "Warnning",
                                "此功能仅作为展示\nsocket服务端已关闭(忘了续费了)")

    # 交卷并评分
    def submit(self):
        # 算分
        if self.complete() and self.flag:
            reply = QMessageBox.question(self, 'Message', "确定交卷吗?",
                                         QMessageBox.Yes | QMessageBox.No,
                                         QMessageBox.Yes)
            if reply == QMessageBox.Yes:
                self.count()
        elif self.flag:
            QMessageBox.information(self, 'Warning', "还有题目没做完!")
        else:
            QMessageBox.information(self, 'Warnning', "请先组卷")

    def complete(self):
        # 判断是否写完
        flag = True
        if not (self.but00.isChecked() or self.but01.isChecked()
                or self.but02.isChecked() or self.but03.isChecked()):
            return False
        if not (self.but10.isChecked() or self.but11.isChecked()
                or self.but12.isChecked() or self.but13.isChecked()):
            return False
        if not (self.but20.isChecked() or self.but21.isChecked()
                or self.but22.isChecked() or self.but23.isChecked()):
            return False
        if not (self.but30.isChecked() or self.but31.isChecked()
                or self.but32.isChecked() or self.but33.isChecked()):
            return False
        if not (self.but40.isChecked() or self.but41.isChecked()
                or self.but42.isChecked() or self.but43.isChecked()):
            return False
        if not (self.but50.isChecked() or self.but51.isChecked()
                or self.but52.isChecked() or self.but53.isChecked()):
            return False
        if not (self.but60.isChecked() or self.but61.isChecked()
                or self.but62.isChecked() or self.but63.isChecked()):
            return False
        if not (self.but70.isChecked() or self.but71.isChecked()
                or self.but72.isChecked() or self.but73.isChecked()):
            return False
        if not (self.but80.isChecked() or self.but81.isChecked()
                or self.but82.isChecked() or self.but83.isChecked()):
            return False
        if not (self.but90.isChecked() or self.but91.isChecked()
                or self.but92.isChecked() or self.but93.isChecked()):
            return False
        if self.cloze_ans0.text() == "": return False
        if self.cloze_ans1.text() == "": return False
        if self.cloze_ans2.text() == "": return False
        if not (self.bc1_ansT.isChecked() or self.bc1_ansF.isChecked()):
            return False
        if not (self.bc2_ansT.isChecked() or self.bc2_ansF.isChecked()):
            return False

        return flag

    def count(self):
        self.score = 0
        print(self.bg0.checkedButton().text())
        for i in range(10):
            content = "self.bg{}.checkedButton().text()==self.ans[i]".format(i)
            if eval(content):
                self.score += 5
        if self.cloze_ans0.text() == self.ans[10]: self.score += 10
        if self.cloze_ans1.text() == self.ans[11]: self.score += 10
        if self.cloze_ans2.text() == self.ans[12]: self.score += 10
        if self.bc1.checkedButton().text() == self.ans[13]: self.score += 10
        if self.bc2.checkedButton().text() == self.ans[14]: self.score += 10
        if self.score >= 85:
            QMessageBox.information(
                self, 'Score', "最终得分为:" + str(self.score) + "\n太棒啦!继续努力学习嗷")
        else:
            QMessageBox.information(
                self, 'Score', "最终得分为:" + str(self.score) + "\n没有满绩!还要加油嗷")

    def closeEvent(self, event):
        # 关闭提示
        reply = QMessageBox.question(self, 'Message', "确定退出吗?",
                                     QMessageBox.Yes | QMessageBox.No,
                                     QMessageBox.No)
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()
コード例 #22
0
ファイル: dialog.py プロジェクト: bugmoto/XwareDesktop
class SettingsDialog(QDialog, Ui_Dialog):
    def __init__(self, parent):
        super().__init__(parent)
        self.setAttribute(Qt.WA_DeleteOnClose)

        self.setupUi(self)

        self.lineEdit_loginUsername.setText(app.settings.get("account", "username"))
        self.lineEdit_loginPassword.setText(app.settings.get("account", "password"))
        self.checkBox_autoLogin.setChecked(app.settings.getbool("account", "autologin"))
        self.checkBox_autoStartFrontend.setChecked(self.doesAutoStartFileExists())

        self.checkBox_enableDevelopersTools.setChecked(
            app.settings.getbool("frontend", "enabledeveloperstools"))
        self.checkBox_allowFlash.setChecked(app.settings.getbool("frontend", "allowflash"))
        self.checkBox_minimizeToSystray.setChecked(
            app.settings.getbool("frontend", "minimizetosystray"))
        self.checkBox_closeToMinimize.setChecked(
            app.settings.getbool("frontend", "closetominimize"))
        self.checkBox_popNotifications.setChecked(
            app.settings.getbool("frontend", "popnotifications"))
        self.checkBox_notifyBySound.setChecked(
            app.settings.getbool("frontend", "notifybysound"))
        self.checkBox_showMonitorWindow.setChecked(
            app.settings.getbool("frontend", "showmonitorwindow"))
        self.spinBox_monitorFullSpeed.setValue(
            app.settings.getint("frontend", "monitorfullspeed"))
        # clipboard related
        self.checkBox_watchClipboard.stateChanged.connect(self.slotWatchClipboardToggled)
        self.checkBox_watchClipboard.setChecked(app.settings.getbool("frontend", "watchclipboard"))
        self.slotWatchClipboardToggled(self.checkBox_watchClipboard.checkState())
        self.plaintext_watchPattern.setPlainText(app.settings.get("frontend", "watchpattern"))

        self.btngrp_etmStartWhen = QButtonGroup()
        self.btngrp_etmStartWhen.addButton(self.radio_backendStartWhen1, 1)
        self.btngrp_etmStartWhen.addButton(self.radio_backendStartWhen2, 2)
        self.btngrp_etmStartWhen.addButton(self.radio_backendStartWhen3, 3)

        try:
            startEtmWhen = callXwaredInterface("getStartEtmWhen")
            self.btngrp_etmStartWhen.button(startEtmWhen).setChecked(True)
        except SocketDoesntExist:
            self.group_etmStartWhen.setEnabled(False)

        self.btn_addMount.clicked.connect(self.slotAddMount)
        self.btn_removeMount.clicked.connect(self.slotRemoveMount)
        self.btn_refreshMount.clicked.connect(self.setupMounts)

        # Mounts
        self.setupMounts()

        # backend setting is a different thing!
        self.setupETM()

    @staticmethod
    def doesAutoStartFileExists():
        return os.path.lexists(constants.FRONTEND_AUTOSTART_FILE)

    @pyqtSlot(int)
    def slotWatchClipboardToggled(self, state):
        # disable pattern settings, before
        # 1. complete patterns
        # 2. test glib key file compatibility
        self.plaintext_watchPattern.setReadOnly(True)
        self.plaintext_watchPattern.setEnabled(state)

    @pyqtSlot()
    def setupMounts(self):
        self.table_mounts.setRowCount(0)
        self.table_mounts.clearContents()

        permissionCheckResult = app.mountsFaker.permissionCheck()
        permissionCheckFailed = ["无法获得检测权限。运行{}查看原因。".format(constants.PERMISSIONCHECK)]

        mountsMapping = app.mountsFaker.getMountsMapping()
        for i, mount in enumerate(app.mountsFaker.mounts):
            # mounts = ['/path/to/1', 'path/to/2', ...]
            self.table_mounts.insertRow(i)
            self.table_mounts.setItem(i, 0, QTableWidgetItem(mount))
            # drive1: the drive letter it should map to, by alphabetical order
            drive1 = chr(ord('C') + i) + ":"
            self.table_mounts.setItem(i, 1, QTableWidgetItem(drive1))
            # drive2: the drive letter it actually is assigned to
            drive2 = mountsMapping.get(mount, "无")

            # check 1: permission
            errors = permissionCheckResult.get(mount, permissionCheckFailed)

            # check 2: mapping
            if drive1 != drive2:
                errors.append(
                    "警告:盘符映射在'{actual}',而不是'{should}'。需要重启后端修复。".format(
                        actual = drive2,
                        should = drive1))

            brush = QBrush()
            if errors:
                brush.setColor(Qt.red)
                errString = "\n".join(errors)
            else:
                brush.setColor(Qt.darkGreen)
                errString = "正常"
            errWidget = QTableWidgetItem(errString)
            errWidget.setForeground(brush)

            self.table_mounts.setItem(i, 2, errWidget)
            del brush, errWidget

        self.table_mounts.resizeColumnsToContents()

    @pyqtSlot()
    def slotAddMount(self):
        fileDialog = QFileDialog(self, Qt.Dialog)
        fileDialog.setFileMode(QFileDialog.Directory)
        fileDialog.setOption(QFileDialog.ShowDirsOnly, True)
        fileDialog.setViewMode(QFileDialog.List)
        fileDialog.setDirectory(os.environ["HOME"])
        if fileDialog.exec():
            selected = fileDialog.selectedFiles()[0]
            if selected in self.newMounts:
                return
            row = self.table_mounts.rowCount()
            self.table_mounts.insertRow(row)
            self.table_mounts.setItem(row, 0, QTableWidgetItem(selected))
            self.table_mounts.setItem(row, 1, QTableWidgetItem("新近添加"))
            self.table_mounts.setItem(row, 2, QTableWidgetItem("新近添加"))

    @pyqtSlot()
    def slotRemoveMount(self):
        row = self.table_mounts.currentRow()
        self.table_mounts.removeRow(row)

    @pyqtSlot()
    def accept(self):
        app.settings.set("account", "username", self.lineEdit_loginUsername.text())
        app.settings.set("account", "password", self.lineEdit_loginPassword.text())
        app.settings.setbool("account", "autologin", self.checkBox_autoLogin.isChecked())
        doesAutoStartFileExists = self.doesAutoStartFileExists()
        if self.checkBox_autoStartFrontend.isChecked() and not doesAutoStartFileExists:
            # mkdir if autostart dir doesn't exist
            try:
                os.mkdir(os.path.dirname(constants.FRONTEND_AUTOSTART_FILE))
            except OSError:
                pass  # already exists
            os.symlink(constants.DESKTOP_FILE_LOCATION,
                       constants.FRONTEND_AUTOSTART_FILE)
        elif (not self.checkBox_autoStartFrontend.isChecked()) and doesAutoStartFileExists:
            os.remove(constants.FRONTEND_AUTOSTART_FILE)

        app.settings.setbool("frontend", "enabledeveloperstools",
                             self.checkBox_enableDevelopersTools.isChecked())
        app.settings.setbool("frontend", "allowflash",
                             self.checkBox_allowFlash.isChecked())
        app.settings.setbool("frontend", "minimizetosystray",
                             self.checkBox_minimizeToSystray.isChecked())

        # A possible Qt bug
        # https://bugreports.qt-project.org/browse/QTBUG-37695
        app.settings.setbool("frontend", "closetominimize",
                             self.checkBox_closeToMinimize.isChecked())
        app.settings.setbool("frontend", "popnotifications",
                             self.checkBox_popNotifications.isChecked())
        app.settings.setbool("frontend", "notifybysound",
                             self.checkBox_notifyBySound.isChecked())

        app.settings.setbool("frontend", "showmonitorwindow",
                             self.checkBox_showMonitorWindow.isChecked())
        app.settings.setint("frontend", "monitorfullspeed",
                            self.spinBox_monitorFullSpeed.value())
        app.settings.setbool("frontend", "watchclipboard",
                             self.checkBox_watchClipboard.isChecked())
        # app.settings.set("frontend", "watchpattern",
        #                         self.plaintext_watchPattern.toPlainText())

        if self.group_etmStartWhen.isEnabled():
            startEtmWhen = self.btngrp_etmStartWhen.id(self.btngrp_etmStartWhen.checkedButton())
            try:
                callXwaredInterface("setStartEtmWhen", startEtmWhen)
            except SocketDoesntExist:
                QMessageBox.warning(None, "Xware Desktop",
                                    "选项未能成功设置:{}。".format(self.group_etmStartWhen.title()),
                                    QMessageBox.Ok, QMessageBox.Ok)

        app.settings.save()

        app.mountsFaker.mounts = self.newMounts
        app.settings.applySettings.emit()
        super().accept()

    @property
    def newMounts(self):
        return list(map(lambda row: self.table_mounts.item(row, 0).text(),
                        range(self.table_mounts.rowCount())))

    @pyqtSlot()
    def setupETM(self):
        # fill values
        lcPort = app.xwaredpy.lcPort
        self.lineEdit_lcport.setText(str(lcPort) if lcPort else "不可用")

        etmSettings = app.etmpy.getSettings()
        if etmSettings:
            self.spinBox_dSpeedLimit.setValue(etmSettings.dLimit)
            self.spinBox_uSpeedLimit.setValue(etmSettings.uLimit)
            self.spinBox_maxRunningTasksNum.setValue(etmSettings.maxRunningTasksNum)

            # connect signals
            self.accepted.connect(self.saveETM)
        else:
            self.spinBox_dSpeedLimit.setEnabled(False)
            self.spinBox_uSpeedLimit.setEnabled(False)
            self.spinBox_maxRunningTasksNum.setEnabled(False)

    @pyqtSlot()
    def saveETM(self):
        newsettings = EtmSetting(dLimit = self.spinBox_dSpeedLimit.value(),
                                 uLimit = self.spinBox_uSpeedLimit.value(),
                                 maxRunningTasksNum = self.spinBox_maxRunningTasksNum.value())

        app.etmpy.saveSettings(newsettings)
コード例 #23
0
ファイル: settings.py プロジェクト: mimers/XwareDesktop
class SettingsDialog(QDialog, Ui_Dialog):
    def __init__(self, parent):
        super().__init__(parent)
        self.setWindowModality(Qt.WindowModal)
        self.setAttribute(Qt.WA_DeleteOnClose)

        self.mainWin = parent
        self.setupUi(self)

        self.lineEdit_loginUsername.setText(self.settings.get("account", "username"))
        self.lineEdit_loginPassword.setText(self.settings.get("account", "password"))
        self.checkBox_autoLogin.setChecked(self.settings.getbool("account", "autologin"))

        self.checkBox_enableDevelopersTools.setChecked(
            self.settings.getbool("frontend", "enabledeveloperstools"))
        self.checkBox_allowFlash.setChecked(self.settings.getbool("frontend", "allowflash"))
        self.checkBox_minimizeToSystray.setChecked(self.settings.getbool("frontend", "minimizetosystray"))
        self.checkBox_closeToMinimize.setChecked(self.settings.getbool("frontend", "closetominimize"))
        self.checkBox_popNotifications.setChecked(self.settings.getbool("frontend", "popnotifications"))
        self.checkBox_notifyBySound.setChecked(self.settings.getbool("frontend", "notifybysound"))
        self.checkBox_showMonitorWindow.setChecked(self.settings.getbool("frontend", "showmonitorwindow"))
        self.spinBox_monitorFullSpeed.setValue(self.settings.getint("frontend", "monitorfullspeed"))
        # clipboard related
        self.checkBox_watchClipboard.stateChanged.connect(self.slotWatchClipboardToggled)
        self.checkBox_watchClipboard.setChecked(self.settings.getbool("frontend", "watchclipboard"))
        self.slotWatchClipboardToggled(self.checkBox_watchClipboard.checkState())
        self.plaintext_watchPattern.setPlainText(self.settings.get("frontend", "watchpattern"))

        from PyQt5.QtWidgets import QButtonGroup
        self.btngrp_etmStartWhen = QButtonGroup()
        self.btngrp_etmStartWhen.addButton(self.radio_backendStartWhen1, 1)
        self.btngrp_etmStartWhen.addButton(self.radio_backendStartWhen2, 2)
        self.btngrp_etmStartWhen.addButton(self.radio_backendStartWhen3, 3)
        self.btngrp_etmStartWhen.button(self.settings.getint("xwared", "startetmwhen")).setChecked(True)

        self.accepted.connect(self.writeSettings)

        self.btn_addMount.clicked.connect(self.slotAddMount)
        self.btn_removeMount.clicked.connect(self.slotRemoveMount)
        self.btn_refreshMount.clicked.connect(self.setupMounts)

        # Mounts
        self.setupMounts()

        # backend setting is a different thing!
        self.setupETM()

    # shorthand
    @property
    def settings(self):
        return self.mainWin.settings
    # shorthand ends

    @staticmethod
    def permissionCheck():
        import re
        ansiEscape = re.compile(r'\x1b[^m]*m')

        import subprocess
        with subprocess.Popen([constants.PERMISSIONCHECK], stdout = subprocess.PIPE, stderr = subprocess.PIPE) as proc:
            output = proc.stdout.read().decode("utf-8")
            output = ansiEscape.sub('', output)
            lines = output.split("\n")

        prevLine = None
        currMount = None
        result = {}
        for line in lines:
            if len(line.strip()) == 0:
                continue

            if all(map(lambda c: c == '=', line)):
                if currMount:
                    result[currMount] = result[currMount][:-1]

                result[prevLine] = []
                currMount = prevLine
                continue

            if currMount:
                if line != "正常。":
                    result[currMount].append(line)

            prevLine = line

        return result

    @pyqtSlot(int)
    def slotWatchClipboardToggled(self, state):
        # disable pattern settings, before
        # 1. complete patterns
        # 2. test glib key file compatibility
        self.plaintext_watchPattern.setReadOnly(True)
        self.plaintext_watchPattern.setEnabled(state)

    @pyqtSlot()
    def setupMounts(self):
        self.table_mounts.setRowCount(0)
        self.table_mounts.clearContents()

        PermissionError = self.permissionCheck()

        mountsMapping = self.mainWin.mountsFaker.getMountsMapping()
        for i, mount in enumerate(self.mainWin.mountsFaker.mounts):
            # mounts = ['/path/to/1', 'path/to/2', ...]
            self.table_mounts.insertRow(i)
            self.table_mounts.setItem(i, 0, QTableWidgetItem(mount))
            drive1 = chr(ord('C') + i) + ":" # the drive letter it should map to, by alphabetical order
            self.table_mounts.setItem(i, 1, QTableWidgetItem(drive1))
            drive2 = mountsMapping.get(mount, "无") # the drive letter it actually is assigned to

            # check 1: permission
            errors = PermissionError.get(mount, ["无法获得检测权限。运行/opt/xware_desktop/permissioncheck查看原因。"])

            # check 2: mapping
            if drive1 != drive2:
                errors.append("警告:盘符映射在'{actual}',而不是'{should}'。需要重启后端修复。".format(actual = drive2, should = drive1))

            from PyQt5.Qt import Qt
            from PyQt5.QtGui import QBrush

            brush = QBrush()
            if errors:
                brush.setColor(Qt.red)
                errString = "\n".join(errors)
            else:
                brush.setColor(Qt.darkGreen)
                errString = "正常"
            errWidget = QTableWidgetItem(errString)
            errWidget.setForeground(brush)

            self.table_mounts.setItem(i, 2, errWidget)
            del brush, errWidget

        self.table_mounts.resizeColumnsToContents()

    @pyqtSlot()
    def slotAddMount(self):
        import os
        from PyQt5.QtWidgets import QFileDialog
        from PyQt5.Qt import Qt

        fileDialog = QFileDialog(self, Qt.Dialog)
        fileDialog.setFileMode(QFileDialog.Directory)
        fileDialog.setOption(QFileDialog.ShowDirsOnly, True)
        fileDialog.setViewMode(QFileDialog.List)
        fileDialog.setDirectory(os.environ["HOME"])
        if (fileDialog.exec()):
            selected = fileDialog.selectedFiles()[0]
            if selected in self.newMounts:
                return
            row = self.table_mounts.rowCount()
            self.table_mounts.insertRow(row)
            self.table_mounts.setItem(row, 0, QTableWidgetItem(selected))
            self.table_mounts.setItem(row, 1, QTableWidgetItem("新近添加"))
            self.table_mounts.setItem(row, 2, QTableWidgetItem("新近添加"))

    @pyqtSlot()
    def slotRemoveMount(self):
        row = self.table_mounts.currentRow()
        self.table_mounts.removeRow(row)

    @pyqtSlot()
    def writeSettings(self):
        self.settings.set("account", "username", self.lineEdit_loginUsername.text())
        self.settings.set("account", "password", self.lineEdit_loginPassword.text())
        self.settings.setbool("account", "autologin", self.checkBox_autoLogin.isChecked())

        self.settings.setbool("frontend", "enabledeveloperstools",
                                self.checkBox_enableDevelopersTools.isChecked())
        self.settings.setbool("frontend", "allowflash",
                                self.checkBox_allowFlash.isChecked())
        self.settings.setbool("frontend", "minimizetosystray",
                                self.checkBox_minimizeToSystray.isChecked())

        # A possible Qt bug
        # https://bugreports.qt-project.org/browse/QTBUG-37695
        self.settings.setbool("frontend", "closetominimize",
                                self.checkBox_closeToMinimize.isChecked())
        self.settings.setbool("frontend", "popnotifications",
                                self.checkBox_popNotifications.isChecked())
        self.settings.setbool("frontend", "notifybysound",
                                self.checkBox_notifyBySound.isChecked())

        self.settings.setbool("frontend", "showmonitorwindow",
                                self.checkBox_showMonitorWindow.isChecked())
        self.settings.setint("frontend", "monitorfullspeed",
                                self.spinBox_monitorFullSpeed.value())
        self.settings.setbool("frontend", "watchclipboard",
                                self.checkBox_watchClipboard.isChecked())
        # self.settings.set("frontend", "watchpattern",
        #                         self.plaintext_watchPattern.toPlainText())
        self.settings.setint("xwared", "startetmwhen",
                          self.btngrp_etmStartWhen.id(self.btngrp_etmStartWhen.checkedButton()))

        startETMWhen = self.settings.getint("xwared", "startetmwhen")
        if startETMWhen == 1:
            self.settings.setbool("xwared", "startetm", True)

        self.settings.save()

        self.mainWin.mountsFaker.setMounts(self.newMounts)
        self.settings.applySettings.emit()

    @property
    def newMounts(self):
        return list(map(lambda row: self.table_mounts.item(row, 0).text(),
                        range(self.table_mounts.rowCount())))

    @pyqtSlot()
    def setupETM(self):
        etmpy = self.mainWin.etmpy

        # fill values
        self.lineEdit_lcport.setText(etmpy.cfg.get("local_control.listen_port", "不可用"))

        etmSettings = etmpy.getSettings()
        if etmSettings:
            self.spinBox_dSpeedLimit.setValue(etmSettings.dLimit)
            self.spinBox_uSpeedLimit.setValue(etmSettings.uLimit)
            self.spinBox_maxRunningTasksNum.setValue(etmSettings.maxRunningTasksNum)

            # connect signals
            self.accepted.connect(self.saveETM)
        else:
            self.spinBox_dSpeedLimit.setEnabled(False)
            self.spinBox_uSpeedLimit.setEnabled(False)
            self.spinBox_maxRunningTasksNum.setEnabled(False)

    @pyqtSlot()
    def saveETM(self):
        import etmpy

        newsettings = etmpy.EtmSetting(dLimit = self.spinBox_dSpeedLimit.value(),
                                       uLimit = self.spinBox_uSpeedLimit.value(),
                                       maxRunningTasksNum = self.spinBox_maxRunningTasksNum.value())

        self.mainWin.etmpy.saveSettings(newsettings)
コード例 #24
0
class Equal_NotEqual(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent=parent)
        self.parent = parent
        #self.setStyleSheet("background-color:#BD0000;")
        self.build_ui()
        self.isEffectiveOdds = self.parent.config.get('iseffectiveodds', True)

    def build_ui(self):
        #roll equal/notequal
        self.roll_choice = 0
        self.main_grid = QGridLayout()
        self.buttonGroup = QButtonGroup()

        btnsize = QSize(85, 70)
        for i in range(2, 13):
            button = QPushButton(str(i))
            button.setCheckable(True)
            button.setStyleSheet("background-color: white; color:red;")
            font = button.font()
            font.setPointSize(22)
            font.setBold(True)
            button.setFont(font)
            button.setFixedSize(btnsize)
            self.buttonGroup.addButton(button)
            self.main_grid.addWidget(button, 0, i)

        self.buttonGroup.buttonClicked[int].connect(self.roll_selected)

        self.btn_equal_to = QPushButton("Equal to")

        self.edit_roll_amount = BTCAmountEdit(self.parent.get_decimal_point)
        self.edit_roll_amount.setPlaceholderText("Roll Amount (Min 25)")
        self.edit_roll_amount.setValidator(
            QDoubleValidator(self.edit_roll_amount))
        self.edit_roll_amount.textChanged.connect(self.amountChanged)

        self.fiat_c = AmountEdit(
            self.parent.fx.get_currency if self.parent.fx else '')
        if not self.parent.fx or not self.parent.fx.is_enabled():
            self.fiat_c.setVisible(False)

        self.edit_roll_amount.frozen.connect(
            lambda: self.fiat_c.setFrozen(self.edit_roll_amount.isReadOnly()))

        self.btn_not_equal_to = QPushButton("Not Equal to")

        self.btn_equal_to.setDisabled(True)
        self.btn_not_equal_to.setDisabled(True)

        self.btn_equal_to.clicked.connect(lambda: self.do_roll("EQUAL"))
        self.btn_not_equal_to.clicked.connect(lambda: self.do_roll("NOTEQUAL"))

        self.roll_control_widget = QWidget()
        self.roll_control_vbox = QVBoxLayout(self.roll_control_widget)

        self.roll_control_grid = QGridLayout()
        self.roll_control_grid.addWidget(self.btn_equal_to, 0, 1)
        self.roll_control_grid.addWidget(self.edit_roll_amount, 0, 2)
        self.roll_control_grid.addWidget(self.btn_not_equal_to, 0, 3)
        self.roll_control_grid.setSpacing(20)

        self.lbl_pr_equal = QLabel("")
        self.lbl_pr_equal.setAlignment(Qt.AlignCenter)
        self.lbl_pr_equal.setStyleSheet("color:black;font-weight:bold;")

        self.lbl_pr_label = QLabel("")
        self.lbl_pr_label.setAlignment(Qt.AlignCenter)
        self.lbl_pr_label.setStyleSheet("color:black;font-weight:bold;")

        self.lbl_pr_notequal = QLabel("")
        self.lbl_pr_notequal.setAlignment(Qt.AlignCenter)
        self.lbl_pr_notequal.setStyleSheet("color:black;font-weight:bold;")

        self.roll_control_grid.addWidget(self.lbl_pr_equal, 1, 1)
        self.roll_control_grid.addWidget(self.lbl_pr_label, 1, 2)
        self.roll_control_grid.addWidget(self.lbl_pr_notequal, 1, 3)

        self.roll_control_vbox.addLayout(self.roll_control_grid)

        self.main_grid.addWidget(self.roll_control_widget, 2, 5, 1, 5)
        self.main_grid.setSpacing(10)

        self.setLayout(self.main_grid)

    def reset_button_group(self):
        checked = self.buttonGroup.checkedButton()
        if checked:
            self.buttonGroup.setExclusive(False)
            checked.setChecked(False)
            self.buttonGroup.setExclusive(True)

    def roll_selected(self, id):
        self.roll_choice = abs(id)
        self.amountChanged()  ##recalculate PR.

    def do_roll(self, side):
        self.side = side
        self.outcome = int(self.roll_choice)
        self.amount = int(self.edit_roll_amount.get_amount())
        self.parent.do_roll(self, "dice")

    def amountChanged(self):
        rollAmtInWgr = (self.edit_roll_amount.get_amount() or 0) / COIN
        if rollAmtInWgr >= MIN_ROLL_AMT and rollAmtInWgr <= MAX_ROLL_AMT and self.roll_choice != 0:
            self.btn_equal_to.setDisabled(False)
            self.btn_not_equal_to.setDisabled(False)
        else:
            self.btn_equal_to.setDisabled(True)
            self.btn_not_equal_to.setDisabled(True)
            return

        bb = float(0)
        if not self.edit_roll_amount.text() == "":
            bb = float(self.edit_roll_amount.text())

        pr_equal = calculate_potential_return(bb, self.roll_choice, "equal")
        pr_not_equal = calculate_potential_return(bb, self.roll_choice,
                                                  "notequal")

        if not self.isEffectiveOdds:  #calculate onchain odds
            pr_equal = (pr_equal - 1) / 0.99 + 1
            pr_not_equal = (pr_not_equal - 1) / 0.99 + 1

        pr_equal_str = format_amount(pr_equal)
        pr_not_equal_str = format_amount(pr_not_equal)

        self.lbl_pr_equal.setText(pr_equal_str)
        self.lbl_pr_label.setText("<-- Potential Return -->")
        self.lbl_pr_notequal.setText(pr_not_equal_str)
コード例 #25
0
ファイル: pydialog.py プロジェクト: thevladsoft/playground
class MainWindow(QDialog, window1.Ui_PyDialog):
    def __init__(self, parent=None):
        global arguments, return_keyword
        self.event_entered = False
        self.event2_entered = False
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        
        self.label.setSizePolicy(QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.MinimumExpanding))
        self.word_wrap()

        self.button_ids = ["details_button", "ok_button", "yes_button", "no_button", "continue_button", "save_button", "cancel_button"]
        self.button_names = {
            "details_button":_("Details"), 
            "ok_button":_("Ok"), 
            "yes_button":_("Yes"), 
            "no_button":_("No"), 
            "continue_button":_("Continue"),
            "save_button":_("Save"),
            "cancel_button":_("Cancel")
        }
        
        self.button_values = {}
        self.create_elements()

    def word_wrap(self):
        if self.label.sizeHint().width() > 600:
            self.label.setWordWrap(True)
            self.label.setMinimumWidth(600)

    def create_elements(self):
        self.active_buttons = dict((e, False) for e in self.button_names)
        self.progressbar_cancelled = False

        self.hide_unused_elements()
        self.init_conf()
        self.create_buttons()
        self.set_button_labels()

        noab = len(list(filter(lambda x: self.active_buttons[x], self.active_buttons)))
        self.reject_value = noab - 1

        
    def hide_unused_elements(self):
        """ Hide the unused elements """
        global arguments
        if not arguments.forkedprogressbar:
            self.progressBar.hide()
        if not arguments.slider:
            self.horizontalSlider.hide()
        if not arguments.combobox:
            self.comboBox.hide()
        if not arguments.inputbox and not arguments.password:
            self.lineEdit.hide()
        if not arguments.combobox and not arguments.password:
            self.label_2.hide()


    def init_conf(self):
        """ Initial configurations (buttons and labels) """
        global arguments
        if arguments.title:
            self.setWindowTitle(arguments.title)
        if arguments.icon:
            from PyQt5.QtGui import QIcon
            icon = QIcon(arguments.icon)
            self.setWindowIcon(icon)

        if arguments.yesno or arguments.warningyesno:
            self.enable_buttons(["yes_button", "no_button"])
            if arguments.yesno:
                self.label.setText(arguments.yesno)
            else:
                self.label.setText(arguments.warningyesno)

        elif arguments.yesnocancel or arguments.warningyesnocancel:
            self.enable_buttons(["yes_button", "no_button", "cancel_button"])
            if arguments.yesnocancel:
                self.label.setText(arguments.yesnocancel)
            else:
                self.label.setText(arguments.warningyesnocancel)

        elif arguments.sorry or arguments.error or arguments.msgbox:
            self.enable_buttons(["ok_button"])
            if arguments.sorry:
                self.label.setText(arguments.sorry)
            elif arguments.error:
                self.label.setText(arguments.error)
            else:
                self.label.setText(arguments.msgbox)

        elif arguments.detailedsorry or arguments.detailederror:
            self.enable_buttons(["details_button", "ok_button"])
            if arguments.detailedsorry:
                self.label.setText(arguments.detailedsorry[0])
                self.details = arguments.detailedsorry[1]
            else:
                self.label.setText(arguments.detailederror[0])
                self.details = arguments.detailederror[1]

        elif arguments.warningcontinuecancel:
            self.enable_buttons(["continue_button", "cancel_button"])
            self.label.setText(arguments.warningcontinuecancel)
        
        elif arguments.forkedprogressbar:
            self.label.setText(arguments.forkedprogressbar[0])
            if len(arguments.forkedprogressbar) > 1:
                self.progressBar.setMaximum(int(arguments.forkedprogressbar[1]))
                
        elif arguments.slider:
            self.enable_buttons(["ok_button", "cancel_button"])
            self.label.setText(arguments.slider[0])
            if len(arguments.slider) > 1:
                self.horizontalSlider.setMinimum(int(arguments.slider[1]))
            if len(arguments.slider) > 2:
                self.horizontalSlider.setMaximum(int(arguments.slider[2]))
            if len(arguments.slider) > 3:
                self.horizontalSlider.setSingleStep(int(arguments.slider[3]))
                self.horizontalSlider.setPageStep(int(arguments.slider[3]))
        
        elif arguments.inputbox:
            self.enable_buttons(["ok_button", "cancel_button"])
            self.label.setText(arguments.inputbox[0])
            if len(arguments.inputbox) > 1:
                self.lineEdit.setText(arguments.inputbox[1])

        elif arguments.password:
            self.enable_buttons(["ok_button", "cancel_button"])
            self.lineEdit.setEchoMode(2)
            self.label.setText(arguments.password[0])
            self.label_2.setText(_("Password:"******"ok_button", "cancel_button"])


    def add_checkboxes(self):
        from PyQt5.QtWidgets import QCheckBox
        self.checkboxes = []
        i = 1
        while i < len(arguments.checklist):
            checkbox = QCheckBox(arguments.checklist[i+1])
            if arguments.checklist[i+2].lower() == "true":
                checkbox.setCheckState(2)
            self.checkboxes.append({"box":checkbox, "result":arguments.checklist[i]})
            self.scrollLayout.addWidget(checkbox)
            i += 3
            
    def add_radiobuttons(self):
        from PyQt5.QtWidgets import QRadioButton, QButtonGroup
        self.buttonGroup = QButtonGroup()
        self.buttongroup_results = {}
        i = 1
        while i < len(arguments.radiolist):
            radiobutton = QRadioButton(arguments.radiolist[i+1])
            self.buttongroup_results[radiobutton] = arguments.radiolist[i]
            if arguments.radiolist[i+2].lower() == "true":
                radiobutton.setChecked(True)
            self.scrollLayout.addWidget(radiobutton)
            self.buttonGroup.addButton(radiobutton)
            i += 3


    def set_button_labels(self):
        """Set the button labels"""
        global arguments
        if arguments.yeslabel and self.active_buttons["yes_button"]:
            self.buttons["yes_button"].setText(arguments.yeslabel)
        if arguments.nolabel and self.active_buttons["no_button"]:
            self.buttons["no_button"].setText(arguments.nolabel)
        if arguments.cancellabel and self.active_buttons["cancel_button"]:
            self.buttons["cancel_button"].setText(arguments.cancellabel)
        if arguments.continuelabel and self.active_buttons["continue_button"]:
            self.buttons["continue_button"].setText(arguments.continuelabel)


    def create_buttons(self):
        global arguments
        self.buttons = {}
        
        i = 0
        for button_id in self.button_ids:
            if self.active_buttons[button_id]:
                self.buttons[button_id] = QPushButton(self.button_names[button_id])
                self.horizontalLayout.addWidget(self.buttons[button_id])
                if button_id == "details_button":
                    self.buttons["details_button"].clicked.connect(self.details_button_clicked)
                elif button_id == "cancel_button":
                    self.buttons[button_id].clicked.connect(self.reject)
                else:
                    self.button_values[button_id] = i
                    exec("self.buttons[button_id].clicked.connect(self."+button_id+"_clicked)")
                    i += 1
    
    
    def print_checkboxes(self):
        for e in self.checkboxes:
            if e["box"].isChecked():
                print("%r " % e["result"], end="")
                
    def get_checked_radiobutton(self):
        radiobutton_name = self.buttonGroup.checkedButton()
        print("%r" % self.buttongroup_results[radiobutton_name])
    

    def ok_button_clicked(self):
        if arguments.slider:
            print(self.horizontalSlider.value())
        elif arguments.inputbox or arguments.password:
            print(self.lineEdit.text())
        elif arguments.checklist:
            self.print_checkboxes()
        elif arguments.radiolist:
            self.get_checked_radiobutton()
        print(return_keyword+str(self.button_values["ok_button"])+">")
        self.done(0)
    
    def yes_button_clicked(self):
        print(return_keyword+str(self.button_values["yes_button"])+">")
        self.done(0)
    
    def no_button_clicked(self):
        print(return_keyword+str(self.button_values["no_button"])+">")
        self.done(0)
    
    def continue_button_clicked(self):
        print(return_keyword+str(self.button_values["continue_button"])+">")
        self.done(0)

    def save_button_clicked(self):
        print(return_keyword+str(self.button_values["save_button"])+">")
        self.done(0)
    
    def reject(self):
        print(return_keyword+str(self.reject_value)+">")
        self.done(0)

    def enable_buttons (self, button_list):
        for button in button_list:
            self.active_buttons[button] = True
            
    def details_button_clicked (self):
        self.label.setText(self.label.text() + '\n\n' + self.details)
        self.buttons["details_button"].setDisabled(True)

    def progressbar_cancel_clicked(self):
        self.progressbar_cancelled = True

    def showCancelButton(self):
        if not "cancel_button" in self.buttons:
            self.buttons["cancel_button"] = QPushButton(self.button_names["cancel_button"])
            self.buttons["cancel_button"].clicked.connect(self.progressbar_cancel_clicked)
            self.horizontalLayout.addWidget(self.buttons["cancel_button"])
            self.progressbar_cancelled = False
        self.buttons["cancel_button"].show()
コード例 #26
0
class App(QWidget):
    def __init__(self, bk, prefs):
        super().__init__()

        self.bk = bk
        self.prefs = prefs
        self.update = False
        self._ok_to_close = False

        self.FTYPE_MAP = {
            'smap': {
                'title': _translate('App', 'Select custom style-map file'),
                'defaultextension': '.txt',
                'filetypes': 'Text Files (*.txt);;All files (*.*)',
            },
            'css': {
                'title': _translate('App', 'Select custom CSS file'),
                'defaultextension': '.css',
                'filetypes': 'CSS Files (*.css)',
            },
            'docx': {
                'title': _translate('App', 'Select DOCX file'),
                'defaultextension': '.docx',
                'filetypes': 'DOCX Files (*.docx)',
            },
        }

        # Check online github files for newer version
        if self.prefs['check_for_updates']:
            self.update, self.newversion = self.check_for_update()
        self.initUI()

    def initUI(self):
        main_layout = QVBoxLayout(self)

        self.upd_layout = QVBoxLayout()
        self.update_label = QLabel()
        self.update_label.setAlignment(Qt.AlignCenter)
        self.upd_layout.addWidget(self.update_label)
        self.get_update_button = QPushButton()
        self.get_update_button.clicked.connect(self.get_update)
        self.upd_layout.addWidget(self.get_update_button)
        main_layout.addLayout(self.upd_layout)
        if not self.update:
            self.update_label.hide()
            self.get_update_button.hide()

        self.details_grid = QGridLayout()
        self.epub2_select = QRadioButton()
        self.epub2_select.setText('EPUB2')
        self.epubType = QButtonGroup()
        self.epubType.addButton(self.epub2_select)
        self.details_grid.addWidget(self.epub2_select, 0, 0, 1, 1)
        self.checkbox_get_updates = QCheckBox()
        self.details_grid.addWidget(self.checkbox_get_updates, 0, 1, 1, 1)
        self.epub3_select = QRadioButton()
        self.epub3_select.setText('EPUB3')
        self.epubType.addButton(self.epub3_select)
        self.details_grid.addWidget(self.epub3_select, 1, 0, 1, 1)
        main_layout.addLayout(self.details_grid)
        self.checkbox_get_updates.setChecked(self.prefs['check_for_updates'])
        if self.prefs['epub_version'] == '2.0':
            self.epub2_select.setChecked(True)
        elif self.prefs['epub_version'] == '3.0':
            self.epub3_select.setChecked(True)
        else:
            self.epub2_select.setChecked(True)

        self.groupBox = QGroupBox()
        self.groupBox.setTitle('')
        self.verticalLayout_2 = QVBoxLayout(self.groupBox)
        self.docx_grid = QGridLayout()
        self.docx_label = QLabel()
        self.docx_grid.addWidget(self.docx_label, 0, 0, 1, 1)
        self.docx_path = QLineEdit()
        self.docx_grid.addWidget(self.docx_path, 1, 0, 1, 1)
        self.choose_docx_button = QPushButton()
        self.choose_docx_button.setText('...')
        self.docx_grid.addWidget(self.choose_docx_button, 1, 1, 1, 1)
        self.verticalLayout_2.addLayout(self.docx_grid)
        self.choose_docx_button.clicked.connect(
            lambda: self.fileChooser('docx', self.docx_path))
        if len(self.prefs['lastDocxPath']):
            self.docx_path.setText(self.prefs['lastDocxPath'])
        self.docx_path.setEnabled(False)

        self.smap_grid = QGridLayout()
        self.checkbox_smap = QCheckBox(self.groupBox)
        self.smap_grid.addWidget(self.checkbox_smap, 0, 0, 1, 1)
        self.cust_smap_path = QLineEdit(self.groupBox)
        self.smap_grid.addWidget(self.cust_smap_path, 1, 0, 1, 1)
        self.choose_smap_button = QPushButton(self.groupBox)
        self.choose_smap_button.setText('...')
        self.smap_grid.addWidget(self.choose_smap_button, 1, 1, 1, 1)
        self.verticalLayout_2.addLayout(self.smap_grid)
        self.checkbox_smap.setChecked(self.prefs['useSmap'])
        self.checkbox_smap.stateChanged.connect(lambda: self.chkBoxActions(
            self.checkbox_smap, self.choose_smap_button))
        self.choose_smap_button.clicked.connect(
            lambda: self.fileChooser('smap', self.cust_smap_path, self.
                                     checkbox_smap, self.choose_smap_button))
        if len(self.prefs['useSmapPath']):
            self.cust_smap_path.setText(self.prefs['useSmapPath'])
        self.cust_smap_path.setEnabled(False)
        self.chkBoxActions(self.checkbox_smap, self.choose_smap_button)

        self.css_grid = QGridLayout()
        self.checkbox_css = QCheckBox(self.groupBox)
        self.css_grid.addWidget(self.checkbox_css, 0, 0, 1, 1)
        self.cust_css_path = QLineEdit(self.groupBox)
        self.css_grid.addWidget(self.cust_css_path, 1, 0, 1, 1)
        self.choose_css_button = QPushButton(self.groupBox)
        self.choose_css_button.setText('...')
        self.css_grid.addWidget(self.choose_css_button, 1, 1, 1, 1)
        self.verticalLayout_2.addLayout(self.css_grid)
        self.checkbox_css.setChecked(self.prefs['useCss'])
        self.checkbox_css.stateChanged.connect(lambda: self.chkBoxActions(
            self.checkbox_css, self.choose_css_button))
        self.choose_css_button.clicked.connect(
            lambda: self.fileChooser('css', self.cust_css_path, self.
                                     checkbox_css, self.choose_css_button))
        if len(self.prefs['useCssPath']):
            self.cust_css_path.setText(self.prefs['useCssPath'])
        self.cust_css_path.setEnabled(False)
        self.chkBoxActions(self.checkbox_css, self.choose_css_button)

        main_layout.addWidget(self.groupBox)
        self.checkbox_debug = QCheckBox()
        main_layout.addWidget(self.checkbox_debug)
        self.checkbox_debug.setChecked(self.prefs['debug'])

        spacerItem = QSpacerItem(20, 15, QSizePolicy.Minimum,
                                 QSizePolicy.Expanding)
        main_layout.addItem(spacerItem)

        button_box = QDialogButtonBox(QDialogButtonBox.Ok
                                      | QDialogButtonBox.Cancel)
        button_box.accepted.connect(self._ok_clicked)
        button_box.rejected.connect(self._cancel_clicked)
        main_layout.addWidget(button_box)
        self.retranslateUi(self)
        if self.prefs['qt_geometry'] is not None:
            self.restoreGeometry(
                binascii.a2b_base64(self.prefs['qt_geometry'].encode('ascii')))
        self.show()

    def retranslateUi(self, App):
        # No translation currently taking place, but it doesn't hurt to get a head start.
        self.setWindowTitle(_translate('App', 'DOCXImport'))
        self.update_label.setText(_translate('App', 'Plugin Update Available'))
        self.get_update_button.setText(_translate('App',
                                                  'Go to download page'))
        self.checkbox_get_updates.setText(
            _translate('App', 'Check for plugin updates'))
        self.docx_label.setText(_translate('App', 'DOCX File to import'))
        self.checkbox_smap.setText(_translate('App', 'Use Custom Style Map'))
        self.checkbox_css.setText(_translate('App', 'Use Custom CSS'))
        self.checkbox_debug.setText(
            _translate('App',
                       'Debug Mode (change takes effect next plugin run)'))

    def fileChooser(self, ftype, qlineedit, qcheck=None, qbutton=None):
        _translate = QCoreApplication.translate
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        title = self.FTYPE_MAP[ftype]['title']
        startfolder = self.prefs['lastDir'][ftype]
        ffilter = self.FTYPE_MAP[ftype]['filetypes']
        inpath, _ = QFileDialog.getOpenFileName(self,
                                                _translate('APP', title),
                                                startfolder,
                                                ffilter,
                                                options=options)
        if len(inpath):
            qlineedit.setEnabled(True)
            qlineedit.setText(os.path.normpath(inpath))
            self.prefs['lastDir'][ftype] = os.path.dirname(inpath)
            qlineedit.setEnabled(False)
        else:
            if qcheck is not None:
                qcheck.setChecked(False)
            if qbutton is not None:
                qbutton.setEnabled(False)

    def chkBoxActions(self, chk, btn):
        btn.setEnabled(chk.isChecked())

    def cmdDo(self):
        global _DETAILS
        self.prefs['qt_geometry'] = binascii.b2a_base64(
            self.saveGeometry()).decode('ascii')
        self.prefs['check_for_updates'] = self.checkbox_get_updates.isChecked()
        self.prefs['epub_version'] = self.epubType.checkedButton().text(
        )[-1] + '.0'
        self.prefs['debug'] = self.checkbox_debug.isChecked()
        _DETAILS['vers'] = self.epubType.checkedButton().text()[-1] + '.0'
        self.prefs['useSmap'] = self.checkbox_smap.isChecked()
        if self.checkbox_smap.isChecked():
            if len(self.cust_smap_path.text()):
                self.prefs['useSmapPath'] = self.cust_smap_path.text()
                _DETAILS['smap'] = (self.checkbox_smap.isChecked(),
                                    self.cust_smap_path.text())
            else:
                # Message box that no file is selected
                return
        self.prefs['useCss'] = self.checkbox_css.isChecked()
        if self.checkbox_css.isChecked():
            if len(self.cust_css_path.text()):
                self.prefs['useCssPath'] = self.cust_css_path.text()
                _DETAILS['css'] = (self.checkbox_css.isChecked(),
                                   self.cust_css_path.text())
            else:
                # Message box that no file is selected
                return
        if len(self.docx_path.text()):
            self.prefs['lastDocxPath'] = self.docx_path.text()
            _DETAILS['docx'] = self.docx_path.text()
        else:
            # Message box that no file is selected
            return

    def check_for_update(self):
        '''Use updatecheck.py to check for newer versions of the plugin'''
        chk = UpdateChecker(self.prefs['last_time_checked'], self.bk._w)
        update_available, online_version, time = chk.update_info()
        # update preferences with latest date/time/version
        self.prefs['last_time_checked'] = time
        if online_version is not None:
            self.prefs['last_online_version'] = online_version
        if update_available:
            return (True, online_version)
        return (False, online_version)

    def get_update(self):
        url = DOWNLOAD_PAGE
        if self.update:
            latest = '/tag/v{}'.format(self.newversion)
            url = url + latest
        webbrowser.open_new_tab(url)

    @pyqtSlot()
    def _ok_clicked(self):
        self._ok_to_close = True
        self.cmdDo()
        self.bk.savePrefs(self.prefs)
        QCoreApplication.instance().quit()

    @pyqtSlot()
    def _cancel_clicked(self):
        self._ok_to_close = True
        '''Close aborting any changes'''
        self.prefs['qt_geometry'] = binascii.b2a_base64(
            self.saveGeometry()).decode('ascii')
        self.prefs['check_for_updates'] = self.checkbox_get_updates.isChecked()
        self.prefs['debug'] = self.checkbox_debug.isChecked()
        self.bk.savePrefs(self.prefs)
        QCoreApplication.instance().quit()

    def closeEvent(self, event):
        if self._ok_to_close:
            event.accept()  # let the window close
        else:
            self._cancel_clicked()
コード例 #27
0
class App(QWidget):
    def __init__(self, bk, prefs):
        super().__init__()

        self.bk = bk
        self.prefs = prefs
        self.update = False
        self._ok_to_close = False

        self.FTYPE_MAP = {
            'smap': {
                'title'            : _translate('App', 'Select custom style-map file'),
                'defaultextension' : '.txt',
                'filetypes'        : 'Text Files (*.txt);;All files (*.*)',
                },
            'css' : {
                'title'            : _translate('App', 'Select custom CSS file'),
                'defaultextension' : '.css',
                'filetypes'        : 'CSS Files (*.css)',
                },
            'docx' : {
                'title'            : _translate('App', 'Select DOCX file'),
                'defaultextension' : '.docx',
                'filetypes'        : 'DOCX Files (*.docx)',
                },
        }

        # Check online github files for newer version
        if self.prefs['check_for_updates']:
            self.update, self.newversion = self.check_for_update()
        self.initUI()

    def initUI(self):
        main_layout = QVBoxLayout(self)

        self.upd_layout = QVBoxLayout()
        self.update_label = QLabel()
        self.update_label.setAlignment(Qt.AlignCenter)
        self.upd_layout.addWidget(self.update_label)
        self.get_update_button = QPushButton()
        self.get_update_button.clicked.connect(self.get_update)
        self.upd_layout.addWidget(self.get_update_button)
        main_layout.addLayout(self.upd_layout)
        if not self.update:
            self.update_label.hide()
            self.get_update_button.hide()

        self.details_grid = QGridLayout()
        self.epub2_select = QRadioButton()
        self.epub2_select.setText('EPUB2')
        self.epubType = QButtonGroup()
        self.epubType.addButton(self.epub2_select)
        self.details_grid.addWidget(self.epub2_select, 0, 0, 1, 1)
        self.checkbox_get_updates = QCheckBox()
        self.details_grid.addWidget(self.checkbox_get_updates, 0, 1, 1, 1)
        self.epub3_select = QRadioButton()
        self.epub3_select.setText('EPUB3')
        self.epubType.addButton(self.epub3_select)
        self.details_grid.addWidget(self.epub3_select, 1, 0, 1, 1)
        main_layout.addLayout(self.details_grid)
        self.checkbox_get_updates.setChecked(self.prefs['check_for_updates'])
        if self.prefs['epub_version'] == '2.0':
            self.epub2_select.setChecked(True)
        elif self.prefs['epub_version'] == '3.0':
            self.epub3_select.setChecked(True)
        else:
            self.epub2_select.setChecked(True)

        self.groupBox = QGroupBox()
        self.groupBox.setTitle('')
        self.verticalLayout_2 = QVBoxLayout(self.groupBox)
        self.docx_grid = QGridLayout()
        self.docx_label = QLabel()
        self.docx_grid.addWidget(self.docx_label, 0, 0, 1, 1)
        self.docx_path = QLineEdit()
        self.docx_grid.addWidget(self.docx_path, 1, 0, 1, 1)
        self.choose_docx_button = QPushButton()
        self.choose_docx_button.setText('...')
        self.docx_grid.addWidget(self.choose_docx_button, 1, 1, 1, 1)
        self.verticalLayout_2.addLayout(self.docx_grid)
        self.choose_docx_button.clicked.connect(lambda: self.fileChooser('docx', self.docx_path))
        if len(self.prefs['lastDocxPath']):
            self.docx_path.setText(self.prefs['lastDocxPath'])
        self.docx_path.setEnabled(False)

        self.smap_grid = QGridLayout()
        self.checkbox_smap = QCheckBox(self.groupBox)
        self.smap_grid.addWidget(self.checkbox_smap, 0, 0, 1, 1)
        self.cust_smap_path = QLineEdit(self.groupBox)
        self.smap_grid.addWidget(self.cust_smap_path, 1, 0, 1, 1)
        self.choose_smap_button = QPushButton(self.groupBox)
        self.choose_smap_button.setText('...')
        self.smap_grid.addWidget(self.choose_smap_button, 1, 1, 1, 1)
        self.verticalLayout_2.addLayout(self.smap_grid)
        self.checkbox_smap.setChecked(self.prefs['useSmap'])
        self.checkbox_smap.stateChanged.connect(lambda: self.chkBoxActions(self.checkbox_smap, self.choose_smap_button))
        self.choose_smap_button.clicked.connect(lambda: self.fileChooser('smap', self.cust_smap_path, self.checkbox_smap, self.choose_smap_button))
        if len(self.prefs['useSmapPath']):
            self.cust_smap_path.setText(self.prefs['useSmapPath'])
        self.cust_smap_path.setEnabled(False)
        self.chkBoxActions(self.checkbox_smap, self.choose_smap_button)

        self.css_grid = QGridLayout()
        self.checkbox_css = QCheckBox(self.groupBox)
        self.css_grid.addWidget(self.checkbox_css, 0, 0, 1, 1)
        self.cust_css_path = QLineEdit(self.groupBox)
        self.css_grid.addWidget(self.cust_css_path, 1, 0, 1, 1)
        self.choose_css_button = QPushButton(self.groupBox)
        self.choose_css_button.setText('...')
        self.css_grid.addWidget(self.choose_css_button, 1, 1, 1, 1)
        self.verticalLayout_2.addLayout(self.css_grid)
        self.checkbox_css.setChecked(self.prefs['useCss'])
        self.checkbox_css.stateChanged.connect(lambda: self.chkBoxActions(self.checkbox_css, self.choose_css_button))
        self.choose_css_button.clicked.connect(lambda: self.fileChooser('css', self.cust_css_path, self.checkbox_css, self.choose_css_button))
        if len(self.prefs['useCssPath']):
            self.cust_css_path.setText(self.prefs['useCssPath'])
        self.cust_css_path.setEnabled(False)
        self.chkBoxActions(self.checkbox_css, self.choose_css_button)

        main_layout.addWidget(self.groupBox)
        self.checkbox_debug = QCheckBox()
        main_layout.addWidget(self.checkbox_debug)
        self.checkbox_debug.setChecked(self.prefs['debug'])

        spacerItem = QSpacerItem(20, 15, QSizePolicy.Minimum, QSizePolicy.Expanding)
        main_layout.addItem(spacerItem)

        button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        button_box.accepted.connect(self._ok_clicked)
        button_box.rejected.connect(self._cancel_clicked)
        main_layout.addWidget(button_box)
        self.retranslateUi(self)
        if self.prefs['qt_geometry'] is not None:
            self.restoreGeometry(binascii.a2b_base64(self.prefs['qt_geometry'].encode('ascii')))
        self.show()

    def retranslateUi(self, App):
        # No translation currently taking place, but it doesn't hurt to get a head start.
        self.setWindowTitle(_translate('App', 'DOCXImport'))
        self.update_label.setText(_translate('App', 'Plugin Update Available'))
        self.get_update_button.setText(_translate('App', 'Go to download page'))
        self.checkbox_get_updates.setText(_translate('App', 'Check for plugin updates'))
        self.docx_label.setText(_translate('App', 'DOCX File to import'))
        self.checkbox_smap.setText(_translate('App', 'Use Custom Style Map'))
        self.checkbox_css.setText(_translate('App', 'Use Custom CSS'))
        self.checkbox_debug.setText(_translate('App', 'Debug Mode (change takes effect next plugin run)'))

    def fileChooser(self, ftype, qlineedit, qcheck=None, qbutton=None):
        _translate = QCoreApplication.translate
        options =  QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        title = self.FTYPE_MAP[ftype]['title']
        startfolder = self.prefs['lastDir'][ftype]
        ffilter = self.FTYPE_MAP[ftype]['filetypes']
        inpath, _ = QFileDialog.getOpenFileName(self, _translate('APP', title), startfolder, ffilter, options=options)
        if len(inpath):
            qlineedit.setEnabled(True)
            qlineedit.setText(os.path.normpath(inpath))
            self.prefs['lastDir'][ftype] = os.path.dirname(inpath)
            qlineedit.setEnabled(False)
        else:
            if qcheck is not None:
                qcheck.setChecked(False)
            if qbutton is not None:
                qbutton.setEnabled(False)

    def chkBoxActions(self, chk, btn):
        btn.setEnabled(chk.isChecked())

    def cmdDo(self):
        global _DETAILS
        self.prefs['qt_geometry'] = binascii.b2a_base64(self.saveGeometry()).decode('ascii')
        self.prefs['check_for_updates'] = self.checkbox_get_updates.isChecked()
        self.prefs['epub_version'] = self.epubType.checkedButton().text()[-1] + '.0'
        self.prefs['debug'] = self.checkbox_debug.isChecked()
        _DETAILS['vers'] = self.epubType.checkedButton().text()[-1] + '.0'
        self.prefs['useSmap'] = self.checkbox_smap.isChecked()
        if self.checkbox_smap.isChecked():
            if len(self.cust_smap_path.text()):
                self.prefs['useSmapPath'] = self.cust_smap_path.text()
                _DETAILS['smap'] = (self.checkbox_smap.isChecked(), self.cust_smap_path.text())
            else:
                # Message box that no file is selected
                return
        self.prefs['useCss'] = self.checkbox_css.isChecked()
        if self.checkbox_css.isChecked():
            if len(self.cust_css_path.text()):
                self.prefs['useCssPath'] = self.cust_css_path.text()
                _DETAILS['css'] = (self.checkbox_css.isChecked(), self.cust_css_path.text())
            else:
                # Message box that no file is selected
                return
        if len(self.docx_path.text()):
            self.prefs['lastDocxPath'] = self.docx_path.text()
            _DETAILS['docx'] = self.docx_path.text()
        else:
            # Message box that no file is selected
            return

    def check_for_update(self):
        '''Use updatecheck.py to check for newer versions of the plugin'''
        chk = UpdateChecker(self.prefs['last_time_checked'], self.bk._w)
        update_available, online_version, time = chk.update_info()
        # update preferences with latest date/time/version
        self.prefs['last_time_checked'] = time
        if online_version is not None:
            self.prefs['last_online_version'] = online_version
        if update_available:
            return (True, online_version)
        return (False, online_version)

    def get_update(self):
        url = DOWNLOAD_PAGE
        if self.update:
            latest = '/tag/v{}'.format(self.newversion)
            url = url + latest
        webbrowser.open_new_tab(url)

    @pyqtSlot()
    def _ok_clicked(self):
        self._ok_to_close = True
        self.cmdDo()
        self.bk.savePrefs(self.prefs)
        QCoreApplication.instance().quit()

    @pyqtSlot()
    def _cancel_clicked(self):
        self._ok_to_close = True
        '''Close aborting any changes'''
        self.prefs['qt_geometry'] = binascii.b2a_base64(self.saveGeometry()).decode('ascii')
        self.prefs['check_for_updates'] = self.checkbox_get_updates.isChecked()
        self.prefs['debug'] = self.checkbox_debug.isChecked()
        self.bk.savePrefs(self.prefs)
        QCoreApplication.instance().quit()

    def closeEvent(self, event):
        if self._ok_to_close:
            event.accept()  # let the window close
        else:
            self._cancel_clicked()
コード例 #28
0
class FileDialogWizardDialog(QDialog, Ui_FileDialogWizardDialog):
    """
    Class implementing the color dialog wizard dialog.
    
    It displays a dialog for entering the parameters
    for the QFileDialog code generator.
    """
    def __init__(self, pyqtVariant, parent=None):
        """
        Constructor
        
        @param pyqtVariant variant of PyQt (integer; 0, 4 or 5)
        @param parent parent widget (QWidget)
        """
        super(FileDialogWizardDialog, self).__init__(parent)
        self.setupUi(self)

        self.eStartWithCompleter = E5FileCompleter(self.eStartWith)
        self.eWorkDirCompleter = E5DirCompleter(self.eWorkDir)

        self.__pyqtVariant = pyqtVariant

        self.__typeButtonsGroup = QButtonGroup(self)
        self.__typeButtonsGroup.setExclusive(True)
        self.__typeButtonsGroup.addButton(self.rOpenFile, 1)
        self.__typeButtonsGroup.addButton(self.rOpenFiles, 2)
        self.__typeButtonsGroup.addButton(self.rSaveFile, 3)
        self.__typeButtonsGroup.addButton(self.rfOpenFile, 11)
        self.__typeButtonsGroup.addButton(self.rfOpenFiles, 12)
        self.__typeButtonsGroup.addButton(self.rfSaveFile, 13)
        self.__typeButtonsGroup.addButton(self.rDirectory, 20)
        self.__typeButtonsGroup.buttonClicked[int].connect(
            self.__toggleInitialFilterAndResult)
        self.__toggleInitialFilterAndResult(1)

        self.pyqtComboBox.addItems(["PyQt4", "PyQt5"])
        if self.__pyqtVariant == 5:
            self.pyqtComboBox.setCurrentIndex(1)
        else:
            self.pyqtComboBox.setCurrentIndex(0)

        self.rSaveFile.toggled[bool].connect(self.__toggleConfirmCheckBox)
        self.rfSaveFile.toggled[bool].connect(self.__toggleConfirmCheckBox)
        self.rDirectory.toggled[bool].connect(self.__toggleGroupsAndTest)
        self.cStartWith.toggled[bool].connect(self.__toggleGroupsAndTest)
        self.cWorkDir.toggled[bool].connect(self.__toggleGroupsAndTest)
        self.cFilters.toggled[bool].connect(self.__toggleGroupsAndTest)

        self.bTest = self.buttonBox.addButton(self.tr("Test"),
                                              QDialogButtonBox.ActionRole)

        msh = self.minimumSizeHint()
        self.resize(max(self.width(), msh.width()), msh.height())

    def __adjustOptions(self, options):
        """
        Private method to adjust the file dialog options.
        
        @param options file dialog options (QFileDialog.Options)
        @return modified options (QFileDialog.Options)
        """
        if Globals.isLinuxPlatform():
            options |= QFileDialog.DontUseNativeDialog
        return options

    @pyqtSlot(str)
    def on_pyqtComboBox_currentIndexChanged(self, txt):
        """
        Private slot to setup the dialog for the selected PyQt variant.
        
        @param txt text of the selected combo box entry (string)
        """
        self.rfOpenFile.setEnabled(txt == "PyQt5")
        self.rfOpenFiles.setEnabled(txt == "PyQt5")
        self.rfSaveFile.setEnabled(txt == "PyQt5")

        if txt == "PyQt5":
            if self.rfOpenFile.isChecked():
                self.rOpenFile.setChecked(True)
            elif self.rfOpenFiles.isChecked():
                self.rOpenFiles.setChecked(True)
            elif self.rfSaveFile.isChecked():
                self.rSaveFile.setChecked(True)

        self.__pyqtVariant = 5 if txt == "PyQt5" else 4

        self.__toggleInitialFilterAndResult(
            self.__typeButtonsGroup.checkedId())

    def on_buttonBox_clicked(self, button):
        """
        Private slot called by a button of the button box clicked.
        
        @param button button that was clicked (QAbstractButton)
        """
        if button == self.bTest:
            self.on_bTest_clicked()

    @pyqtSlot()
    def on_bTest_clicked(self):
        """
        Private method to test the selected options.
        """
        if self.rOpenFile.isChecked() or self.rfOpenFile.isChecked():
            if not self.cSymlinks.isChecked():
                options = QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            else:
                options = QFileDialog.Options()
            options = self.__adjustOptions(options)
            if self.rOpenFile.isChecked() and self.__pyqtVariant == 4:
                QFileDialog.getOpenFileName(None, self.eCaption.text(),
                                            self.eStartWith.text(),
                                            self.eFilters.text(), options)
            else:
                QFileDialog.getOpenFileNameAndFilter(
                    None, self.eCaption.text(), self.eStartWith.text(),
                    self.eFilters.text(), self.eInitialFilter.text(), options)
        elif self.rOpenFiles.isChecked() or self.rfOpenFiles.isChecked():
            if not self.cSymlinks.isChecked():
                options = QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            else:
                options = QFileDialog.Options()
            options = self.__adjustOptions(options)
            if self.rOpenFiles.isChecked() and self.__pyqtVariant == 4:
                QFileDialog.getOpenFileNames(None, self.eCaption.text(),
                                             self.eStartWith.text(),
                                             self.eFilters.text(), options)
            else:
                QFileDialog.getOpenFileNamesAndFilter(
                    None, self.eCaption.text(), self.eStartWith.text(),
                    self.eFilters.text(), self.eInitialFilter.text(), options)
        elif self.rSaveFile.isChecked() or self.rfSaveFile.isChecked():
            if not self.cSymlinks.isChecked():
                options = QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            else:
                options = QFileDialog.Options()
            options = self.__adjustOptions(options)
            if self.rSaveFile.isChecked() and self.__pyqtVariant == 4:
                QFileDialog.getSaveFileName(None, self.eCaption.text(),
                                            self.eStartWith.text(),
                                            self.eFilters.text(), options)
            else:
                QFileDialog.getSaveFileNameAndFilter(
                    None, self.eCaption.text(), self.eStartWith.text(),
                    self.eFilters.text(), self.eInitialFilter.text(), options)
        elif self.rDirectory.isChecked():
            options = QFileDialog.Options()
            if not self.cSymlinks.isChecked():
                options |= QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            if self.cDirOnly.isChecked():
                options |= QFileDialog.Options(QFileDialog.ShowDirsOnly)
            else:
                options |= QFileDialog.Options(QFileDialog.Option(0))
            options = self.__adjustOptions(options)
            QFileDialog.getExistingDirectory(None, self.eCaption.text(),
                                             self.eWorkDir.text(), options)

    def __toggleConfirmCheckBox(self):
        """
        Private slot to enable/disable the confirmation check box.
        """
        self.cConfirmOverwrite.setEnabled(self.rSaveFile.isChecked()
                                          or self.rfSaveFile.isChecked())

    def __toggleGroupsAndTest(self):
        """
        Private slot to enable/disable certain groups and the test button.
        """
        if self.rDirectory.isChecked():
            self.filePropertiesGroup.setEnabled(False)
            self.dirPropertiesGroup.setEnabled(True)
            self.bTest.setDisabled(self.cWorkDir.isChecked())
        else:
            self.filePropertiesGroup.setEnabled(True)
            self.dirPropertiesGroup.setEnabled(False)
            self.bTest.setDisabled(self.cStartWith.isChecked()
                                   or self.cFilters.isChecked())

    def __toggleInitialFilterAndResult(self, id):
        """
        Private slot to enable/disable the initial filter elements and the
        results entries.
        
        @param id id of the clicked button (integer)
        """
        if (self.__pyqtVariant == 4 and id in [11, 12, 13]) or \
                (self.__pyqtVariant == 5 and id in [1, 2, 3]):
            enable = True
        else:
            enable = False
        self.lInitialFilter.setEnabled(enable)
        self.eInitialFilter.setEnabled(enable)
        self.cInitialFilter.setEnabled(enable)

        self.lFilterVariable.setEnabled(enable)
        self.eFilterVariable.setEnabled(enable)

    def getCode(self, indLevel, indString):
        """
        Public method to get the source code for Qt4 and Qt5.
        
        @param indLevel indentation level (int)
        @param indString string used for indentation (space or tab) (string)
        @return generated code (string)
        """
        # calculate our indentation level and the indentation string
        il = indLevel + 1
        istring = il * indString
        estring = os.linesep + indLevel * indString

        # now generate the code
        if self.parentSelf.isChecked():
            parent = "self"
        elif self.parentNone.isChecked():
            parent = "None"
        elif self.parentOther.isChecked():
            parent = self.parentEdit.text()
            if parent == "":
                parent = "None"

        # prepare the result variables
        nameVariable = self.eNameVariable.text()
        if not nameVariable:
            if self.__typeButtonsGroup.checkedButton() in [
                    self.rOpenFile, self.rfOpenFile, self.rSaveFile,
                    self.rfSaveFile
            ]:
                nameVariable = "fileName"
            elif self.__typeButtonsGroup.checkedButton() in [
                    self.rOpenFiles, self.rfOpenFiles
            ]:
                nameVariable = "fileNames"
            elif self.__typeButtonsGroup.checkedButton() == self.rDirectory:
                nameVariable = "dirName"
            else:
                nameVariable = "res"
        filterVariable = self.eFilterVariable.text()
        if not filterVariable:
            if (self.__pyqtVariant == 4 and
                self.__typeButtonsGroup.checkedButton() in [
                    self.rfOpenFile, self.rfOpenFiles, self.rfSaveFile]) or \
                    (self.__pyqtVariant == 5 and
                        self.__typeButtonsGroup.checkedButton() in [
                            self.rOpenFile, self.rOpenFiles, self.rSaveFile]):
                filterVariable = ", selectedFilter"
            else:
                filterVariable = ""

        code = '{0}{1} = QFileDialog.'.format(nameVariable, filterVariable)
        if self.rOpenFile.isChecked() or self.rfOpenFile.isChecked():
            if self.rOpenFile.isChecked():
                code += 'getOpenFileName({0}{1}'.format(os.linesep, istring)
            else:
                code += 'getOpenFileNameAndFilter({0}{1}'.format(
                    os.linesep, istring)
            code += '{0},{1}{2}'.format(parent, os.linesep, istring)
            if not self.eCaption.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                code += 'self.tr("{0}"),{1}{2}'.format(self.eCaption.text(),
                                                       os.linesep, istring)
            if not self.eStartWith.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                if self.cStartWith.isChecked():
                    fmt = '{0},{1}{2}'
                else:
                    fmt = 'self.tr("{0}"),{1}{2}'
                code += fmt.format(self.eStartWith.text(), os.linesep, istring)
            if self.eFilters.text() == "":
                code += '""'
            else:
                if self.cFilters.isChecked():
                    fmt = '{0}'
                else:
                    fmt = 'self.tr("{0}")'
                code += fmt.format(self.eFilters.text())
            if self.rfOpenFile.isChecked() or self.__pyqtVariant == 5:
                if self.eInitialFilter.text() == "":
                    filter = "None"
                else:
                    if self.cInitialFilter.isChecked():
                        fmt = '{0}'
                    else:
                        fmt = 'self.tr("{0}")'
                    filter = fmt.format(self.eInitialFilter.text())
                code += ',{0}{1}{2}'.format(os.linesep, istring, filter)
            if not self.cSymlinks.isChecked():
                code += \
                    ',{0}{1}QFileDialog.Options(' \
                    'QFileDialog.DontResolveSymlinks)' \
                    .format(os.linesep, istring)
            code += '){0}'.format(estring)
        elif self.rOpenFiles.isChecked() or self.rfOpenFiles.isChecked():
            if self.rOpenFiles.isChecked():
                code += 'getOpenFileNames({0}{1}'.format(os.linesep, istring)
            else:
                code += 'getOpenFileNamesAndFilter({0}{1}'.format(
                    os.linesep, istring)
            code += '{0},{1}{2}'.format(parent, os.linesep, istring)
            if not self.eCaption.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                code += 'self.tr("{0}"),{1}{2}'.format(self.eCaption.text(),
                                                       os.linesep, istring)
            if not self.eStartWith.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                if self.cStartWith.isChecked():
                    fmt = '{0},{1}{2}'
                else:
                    fmt = 'self.tr("{0}"),{1}{2}'
                code += fmt.format(self.eStartWith.text(), os.linesep, istring)
            if not self.eFilters.text():
                code += '""'
            else:
                if self.cFilters.isChecked():
                    fmt = '{0}'
                else:
                    fmt = 'self.tr("{0}")'
                code += fmt.format(self.eFilters.text())
            if self.rfOpenFiles.isChecked() or self.__pyqtVariant == 5:
                if self.eInitialFilter.text() == "":
                    filter = "None"
                else:
                    if self.cInitialFilter.isChecked():
                        fmt = '{0}'
                    else:
                        fmt = 'self.tr("{0}")'
                    filter = fmt.format(self.eInitialFilter.text())
                code += ',{0}{1}{2}'.format(os.linesep, istring, filter)
            if not self.cSymlinks.isChecked():
                code += \
                    ',{0}{1}QFileDialog.Options(' \
                    'QFileDialog.DontResolveSymlinks)' \
                    .format(os.linesep, istring)
            code += '){0}'.format(estring)
        elif self.rSaveFile.isChecked() or self.rfSaveFile.isChecked():
            if self.rSaveFile.isChecked():
                code += 'getSaveFileName({0}{1}'.format(os.linesep, istring)
            else:
                code += 'getSaveFileNameAndFilter({0}{1}'.format(
                    os.linesep, istring)
            code += '{0},{1}{2}'.format(parent, os.linesep, istring)
            if not self.eCaption.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                code += 'self.tr("{0}"),{1}{2}'.format(self.eCaption.text(),
                                                       os.linesep, istring)
            if not self.eStartWith.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                if self.cStartWith.isChecked():
                    fmt = '{0},{1}{2}'
                else:
                    fmt = 'self.tr("{0}"),{1}{2}'
                code += fmt.format(self.eStartWith.text(), os.linesep, istring)
            if not self.eFilters.text():
                code += '""'
            else:
                if self.cFilters.isChecked():
                    fmt = '{0}'
                else:
                    fmt = 'self.tr("{0}")'
                code += fmt.format(self.eFilters.text())
            if self.rfSaveFile.isChecked() or self.__pyqtVariant == 5:
                if self.eInitialFilter.text() == "":
                    filter = "None"
                else:
                    if self.cInitialFilter.isChecked():
                        fmt = '{0}'
                    else:
                        fmt = 'self.tr("{0}")'
                    filter = fmt.format(self.eInitialFilter.text())
                code += ',{0}{1}{2}'.format(os.linesep, istring, filter)
            if (not self.cSymlinks.isChecked()) or \
               (not self.cConfirmOverwrite.isChecked()):
                code += ',{0}{1}QFileDialog.Options('.format(
                    os.linesep, istring)
                if not self.cSymlinks.isChecked():
                    code += 'QFileDialog.DontResolveSymlinks'
                if (not self.cSymlinks.isChecked()) and \
                   (not self.cConfirmOverwrite.isChecked()):
                    code += ' | '
                if not self.cConfirmOverwrite.isChecked():
                    code += 'QFileDialog.DontConfirmOverwrite'
                code += ')'
            code += '){0}'.format(estring)
        elif self.rDirectory.isChecked():
            code += 'getExistingDirectory({0}{1}'.format(os.linesep, istring)
            code += '{0},{1}{2}'.format(parent, os.linesep, istring)
            if not self.eCaption.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                code += 'self.tr("{0}"),{1}{2}'.format(self.eCaption.text(),
                                                       os.linesep, istring)
            if not self.eWorkDir.text():
                code += '""'
            else:
                if self.cWorkDir.isChecked():
                    fmt = '{0}'
                else:
                    fmt = 'self.tr("{0}")'
                code += fmt.format(self.eWorkDir.text())
            code += ',{0}{1}QFileDialog.Options('.format(os.linesep, istring)
            if not self.cSymlinks.isChecked():
                code += 'QFileDialog.DontResolveSymlinks | '
            if self.cDirOnly.isChecked():
                code += 'QFileDialog.ShowDirsOnly'
            else:
                code += 'QFileDialog.Option(0)'
            code += ')){0}'.format(estring)

        return code
コード例 #29
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(717, 541)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 0, 701, 491))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setSizeConstraint(
            QtWidgets.QLayout.SetNoConstraint)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.excerciseTitle = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.excerciseTitle.setMinimumSize(QtCore.QSize(0, 50))
        self.excerciseTitle.setMaximumSize(QtCore.QSize(16777215, 50))
        font = QtGui.QFont()
        font.setPointSize(20)
        self.excerciseTitle.setFont(font)
        self.excerciseTitle.setAlignment(QtCore.Qt.AlignCenter)
        self.excerciseTitle.setObjectName("excerciseTitle")
        self.verticalLayout.addWidget(self.excerciseTitle)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setSizeConstraint(
            QtWidgets.QLayout.SetMinimumSize)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.testFilesListWidget = QtWidgets.QListWidget(
            self.verticalLayoutWidget)
        self.testFilesListWidget.setMaximumSize(QtCore.QSize(150, 16777215))
        self.testFilesListWidget.setObjectName("testFilesListWidget")
        files = listdir("./")
        mytxt = list(filter(lambda x: x.endswith('.txt'), files))
        for i in mytxt:
            item = QtWidgets.QListWidgetItem(i)
            self.testFilesListWidget.addItem(item)

        self.verticalLayout_2.addWidget(self.testFilesListWidget)
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.selectButton = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.selectButton.setMaximumSize(QtCore.QSize(80, 16777215))
        self.selectButton.setObjectName("selectButton")
        self.selectButton.clicked.connect(self.selectExercise)

        self.horizontalLayout_3.addWidget(self.selectButton)
        self.exitButton = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.exitButton.setMaximumSize(QtCore.QSize(70, 16777215))
        self.exitButton.setObjectName("exitButton")
        self.exitButton.clicked.connect(QCoreApplication.instance().quit)
        self.horizontalLayout_3.addWidget(self.exitButton)
        self.verticalLayout_2.addLayout(self.horizontalLayout_3)
        self.horizontalLayout_2.addLayout(self.verticalLayout_2)
        self.groupBox = QtWidgets.QGroupBox(self.verticalLayoutWidget)
        self.groupBox.setMinimumSize(QtCore.QSize(500, 0))
        self.groupBox.setTitle("")
        self.groupBox.setObjectName("groupBox")
        self.verticalLayoutWidget_3 = QtWidgets.QWidget(self.groupBox)
        self.verticalLayoutWidget_3.setGeometry(QtCore.QRect(10, 10, 481, 411))
        self.verticalLayoutWidget_3.setObjectName("verticalLayoutWidget_3")
        self.verticalLayout_4 = QtWidgets.QVBoxLayout(
            self.verticalLayoutWidget_3)
        self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_4.setSpacing(8)
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.excerciseQuestionLabel = QtWidgets.QLabel(
            self.verticalLayoutWidget_3)
        font = QtGui.QFont()
        font.setPointSize(18)
        self.excerciseQuestionLabel.setFont(font)
        self.excerciseQuestionLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.excerciseQuestionLabel.setObjectName("excerciseQuestionLabel")
        self.verticalLayout_4.addWidget(self.excerciseQuestionLabel)
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.answerButtonOne = QtWidgets.QPushButton(
            self.verticalLayoutWidget_3)
        self.answerButtonOne.setObjectName("answerButtonOne")
        self.horizontalLayout_4.addWidget(self.answerButtonOne)
        self.answerButtonTwo = QtWidgets.QPushButton(
            self.verticalLayoutWidget_3)
        self.answerButtonTwo.setObjectName("answerButtonTwo")
        self.horizontalLayout_4.addWidget(self.answerButtonTwo)
        self.answerButtonGroup = QButtonGroup()
        self.answerButtonGroup.addButton(self.answerButtonOne)
        self.answerButtonGroup.addButton(self.answerButtonTwo)
        self.answerButtonGroup.buttonClicked.connect(self.selectAnswer)
        self.verticalLayout_4.addLayout(self.horizontalLayout_4)
        self.horizontalLayout_2.addWidget(self.groupBox)
        self.verticalLayout.addLayout(self.horizontalLayout_2)
        self.verticalLayoutWidget.raise_()
        self.excerciseQuestionLabel.raise_()
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 717, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.excerciseTitle.setText(
            _translate("MainWindow", "Безударные Гласные 1"))
        self.selectButton.setText(_translate("MainWindow", "Выбрать"))
        self.exitButton.setText(_translate("MainWindow", "Выход"))
        self.excerciseQuestionLabel.setText(
            _translate("MainWindow", "Зав_вать локоны"))
        self.answerButtonOne.setText(_translate("MainWindow", "И"))
        self.answerButtonTwo.setText(_translate("MainWindow", "Е"))

    def selectExercise(self):
        global name
        global exerciseLines
        global rightAnswer

        exerciseHeader = ""
        name = self.testFilesListWidget.selectedIndexes()[0].data()
        with open(name, 'r', encoding='utf-8') as exerciseFile:
            exerciseHeader = exerciseFile.readline()
            exerciseLines = exerciseFile.readlines()
        print(exerciseHeader)
        exercise = exerciseLines[0]
        exerciseQuestion = exercise.split(";")[0].strip()
        exerciseAnswerOne = exercise.split(";")[1].strip()
        exerciseAnswerTwo = exercise.split(";")[2].strip()
        rightAnswer = exercise.split(";")[3].strip()

        self.excerciseTitle.setText(exerciseHeader)
        self.excerciseQuestionLabel.setText(exerciseQuestion)

        self.answerButtonOne.setText(exerciseAnswerOne)
        self.answerButtonTwo.setText(exerciseAnswerTwo)

    def selectAnswer(self, answerButtonGroup):
        global lineNumber
        global rightAnswer
        global exerciseLines
        global rightAnswerCount
        global wrongAnswerCount

        button_clicked = self.answerButtonGroup.checkedButton()
        print("Right answer: " + rightAnswer,
              "Your answer: " + button_clicked.text())
        if button_clicked.text() == rightAnswer:
            print("Right!")
            rightAnswerCount = rightAnswerCount + 1
        else:
            print("Wrong(")
            wrongAnswerCount = wrongAnswerCount + 1

        questionShuffle = [1, 2]
        exercise = exerciseLines[lineNumber]
        exerciseQuestion = exercise.split(";")[0].strip()
        x = random.choice(questionShuffle)
        exerciseAnswerOne = exercise.split(";")[x].strip()
        questionShuffle.remove(x)
        exerciseAnswerTwo = exercise.split(";")[random.choice(
            questionShuffle)].strip()
        rightAnswer = exercise.split(";")[3].strip()
        self.excerciseQuestionLabel.setText(exerciseQuestion)
        self.answerButtonOne.setText(exerciseAnswerOne)
        self.answerButtonTwo.setText(exerciseAnswerTwo)

        lineNumber = lineNumber + 1
        print(lineNumber, len(exerciseLines))

        if lineNumber == len(exerciseLines):
            print("Test")
            app.infoBox(
                "Результаты", "Правильных: {} \n Неправильных: {}".format(
                    rightAnswerCount, wrongAnswerCount))
コード例 #30
0
ファイル: type_of_task.py プロジェクト: canard0328/malss
class TypeOfTask(Content):

    def __init__(self, parent=None, button_func=None, params=None):
        super().__init__(parent, 'Task', params)

        self.button_func = button_func

        path = os.path.abspath(os.path.dirname(__file__)) + '/static/'

        # Text for machine learning tasks
        path1 = path + 'task'
        text = self.get_text(path1)
        if self.params.lang == 'en':
            self.set_paragraph('Type of task', text=text, img=path1)
        else:
            self.set_paragraph('分析タスク', text=text, img=path1)

        # Text for supervised learning
        path2 = path + 'supervised_learning'
        text = self.get_text(path2)
        if self.params.lang == 'en':
            self.set_paragraph('Supervised learning', text=text, img=path2)
        else:
            self.set_paragraph('教師あり学習', text=text, img=path2)

        if params.lang == 'jp':
            self.set_paragraph(
                'タスクの選択',
                text='あなたの機械学習のタスクを選択してください。')
        else:
            self.set_paragraph(
                'Task selection',
                text='Choose your machine learning task.')

        vbox1 = QVBoxLayout()
        vbox1.setContentsMargins(10, 10, 10, 10)
        vbox1.setSpacing(10)

        rbtn_cls = QRadioButton('Classification', self.inner)
        rbtn_cls.setStyleSheet('QRadioButton{font: 15pt;};')
        rbtn_cls.clicked.connect(self.rbtn_clicked)
        rbtn_reg = QRadioButton('Regression', self.inner)
        rbtn_reg.setStyleSheet('QRadioButton{font: 15pt;};')
        rbtn_reg.clicked.connect(self.rbtn_clicked)
        if params.task == 'Classification':
            rbtn_cls.setChecked(True)
        elif params.task == 'Regression':
            rbtn_reg.setChecked(True)

        self.btn_group = QButtonGroup()
        self.btn_group.addButton(rbtn_cls, 1)
        self.btn_group.addButton(rbtn_reg, 1)

        vbox1.addWidget(rbtn_cls)
        vbox1.addWidget(rbtn_reg)
        vbox1.addStretch(1)

        self.vbox.addLayout(vbox1)

        self.vbox.addStretch(1)

        self.btn = QPushButton('Next', self.inner)
        self.btn.setStyleSheet('QPushButton{font: bold; font-size: 15pt; background-color: white;};')
        if self.params.lang == 'en':
            self.btn.clicked.connect(lambda: self.button_func('Input data'))
        else:
            self.btn.clicked.connect(lambda: self.button_func('入力データ'))
        if params.task is None:
            self.btn.setEnabled(False)

        self.vbox.addWidget(self.btn)

    def rbtn_clicked(self):
        self.params.task = self.btn_group.checkedButton().text()
        self.btn.setEnabled(True)
コード例 #31
0
class MainWindow(QDialog):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.createCategorySelectionGroupBox()
        self.createTextEditLayout()
        self.createButtonLayout()

        mainLayout = QGridLayout()
        mainLayout.addLayout(self.categorySelectionLayout, 0, 0)
        mainLayout.addLayout(self.textEditLayout, 1, 0)
        mainLayout.addLayout(self.buttonLayout, 2, 0)
        self.setLayout(mainLayout)

        QApplication.setStyle(QStyleFactory.create("cleanlooks"))
        self.setWindowTitle("FK-tiedotin")
        self.setWindowIcon(QtGui.QIcon('templates/fi.png'))

        # Always-on-top mode. Currently does not work on Windows.
        #alwaysOnTopShortcut = QShortcut(QtGui.QKeySequence("Ctrl+O"), self)
        #alwaysOnTopShortcut.activated.connect(lambda:
        #    super(MainWindow, self).__init__(parent, QtCore.Qt.WindowStaysOnTopHint))

    def createCategorySelectionGroupBox(self):
        self.languageCheckBox = QCheckBox("Text in English", self)
        self.languageCheckBox.stateChanged.connect(
            self.languageCheckBoxClicked)

        self.toBothBulletinsCheckBox = QCheckBox("Add to both versions", self)

        categorySelectionGroupBox = QGroupBox("Category")
        self.categorySelectionButtonGroup = QButtonGroup()

        self.radioButton1 = QRadioButton("Killan tapahtumat")
        self.radioButton2 = QRadioButton("Muut tapahtumat")
        self.radioButton3 = QRadioButton("Yleistä")
        self.radioButton4 = QRadioButton("Opinnot")
        self.radioButton1.setChecked(True)

        self.categorySelectionButtonGroup.addButton(self.radioButton1)
        self.categorySelectionButtonGroup.addButton(self.radioButton2)
        self.categorySelectionButtonGroup.addButton(self.radioButton3)
        self.categorySelectionButtonGroup.addButton(self.radioButton4)

        buttonLayout = QVBoxLayout()
        buttonLayout.addWidget(self.radioButton1)
        buttonLayout.addWidget(self.radioButton2)
        buttonLayout.addWidget(self.radioButton3)
        buttonLayout.addWidget(self.radioButton4)
        categorySelectionGroupBox.setLayout(buttonLayout)

        self.dateEdit = QDateEdit()
        self.dateEdit.setDateTime(QDateTime.currentDateTime())
        self.dateEdit.setCalendarPopup(True)

        dateLabel = QLabel("Date")
        dateLabel.setBuddy(self.dateEdit)

        self.categorySelectionLayout = QVBoxLayout()
        self.categorySelectionLayout.addWidget(self.languageCheckBox)
        self.categorySelectionLayout.addWidget(self.toBothBulletinsCheckBox)
        self.categorySelectionLayout.addWidget(categorySelectionGroupBox)
        self.categorySelectionLayout.addWidget(dateLabel)
        self.categorySelectionLayout.addWidget(self.dateEdit)

    def otherLanguageText(self, text):  # convert to dictionary

        if (text == "Guild's events"):
            return "Killan tapahtumat"
        elif (text == "Killan tapahtumat"):
            return "Guild's events"
        elif (text == "Other events"):
            return "Muut tapahtumat"
        elif (text == "Muut tapahtumat"):
            return "Other events"
        elif (text == "General"):
            return "Yleistä"
        elif (text == "Yleistä"):
            return "General"
        elif (text == "Studies"):
            return "Opinnot"
        elif (text == "Opinnot"):
            return "Studies"
        else:
            raise Exception("Wrong value for otherLanguageText")
        """
        categoriesDict_en = {
            "Guild's events":"Killan tapahtumat",
            "Other events":"Muut tapahtumat",
            "General":"Yleistä",
            "Studies":"Opinnot"
        }

        categoriesDict_fi = dict(reversed(item) for item in categoriesDict_en.items())
        categoriesDict = dict(categoriesDict_en, categoriesDict_fi)

        try:
            return categoriesDict(text)
        except ValueError:
            raise Exception("Wrong value for otherLanguageText")
        """

    def languageCheckBoxClicked(self, state):
        if state == QtCore.Qt.Checked:
            self.radioButton1.setText("Guild's events")
            self.radioButton2.setText("Other events")
            self.radioButton3.setText("General")
            self.radioButton4.setText("Studies")
        else:
            self.radioButton1.setText("Killan tapahtumat")
            self.radioButton2.setText("Muut tapahtumat")
            self.radioButton3.setText("Yleistä")
            self.radioButton4.setText("Opinnot")

    #def hide(self):
    #    self.headerLineEdit.hide()
    #    self.textBrowser = QTextBrowser()
    #    self.textBrowser.setGeometry(QtCore.QRect(390, 10, 531, 681))
    #    self.textBrowser.setObjectName("textBrowser")
    #    self.textBrowser.show()

    def createTextEditLayout(self):
        self.textEditLayout = QVBoxLayout()

        self.additionalWeeksEdit = QLineEdit()
        self.additionalWeeksEdit.setText("0")  # default
        self.headerLineEdit = QLineEdit()
        self.imageUrl = QLineEdit()
        self.contentTextEdit = QTextEdit()

        addWeeksLabel = QLabel("Additional weeks")
        addWeeksLabel.setBuddy(self.additionalWeeksEdit)
        headerLabel = QLabel("Header")
        headerLabel.setBuddy(self.headerLineEdit)
        imageUrlLabel = QLabel("Image URL")
        imageUrlLabel.setBuddy(self.imageUrl)
        contentLabel = QLabel("Content")
        contentLabel.setBuddy(self.contentTextEdit)

        self.textEditLayout.addWidget(addWeeksLabel)
        self.textEditLayout.addWidget(self.additionalWeeksEdit)
        self.textEditLayout.addWidget(headerLabel)
        self.textEditLayout.addWidget(self.headerLineEdit)
        self.textEditLayout.addWidget(imageUrlLabel)
        self.textEditLayout.addWidget(self.imageUrl)
        self.textEditLayout.addWidget(contentLabel)
        self.textEditLayout.addWidget(self.contentTextEdit)

    def createButtonLayout(self):
        self.buttonLayout = QHBoxLayout()

        savePushButton = QPushButton("Save")
        savePushButton.clicked.connect(self.save)

        clearPushButton = QPushButton("Clear")
        clearPushButton.clicked.connect(self.clear)

        self.buttonLayout.addWidget(clearPushButton)
        self.buttonLayout.addStretch(1)
        self.buttonLayout.addWidget(savePushButton)

    def save(self):
        category = self.categorySelectionButtonGroup.checkedButton().text()
        date = [
            self.dateEdit.date().day(),
            self.dateEdit.date().month(),
            self.dateEdit.date().year()
        ]
        weeks = int(self.additionalWeeksEdit.text())
        header = self.headerLineEdit.text().strip()
        image = self.imageUrl.text()
        content = self.contentTextEdit.toPlainText()

        save_entry(
            {
                'category': category,
                'date': date,
                'header': header,
                'image': image,
                'content': content
            }, self.languageCheckBox.isChecked(), weeks)

        if self.toBothBulletinsCheckBox.isChecked():
            save_entry(
                {
                    'category': self.otherLanguageText(
                        category),  # both languages fix here
                    'date': date,
                    'header': header,
                    'image': image,
                    'content': content
                },
                not self.languageCheckBox.isChecked(),
                weeks)

        self.clear()

    def clear(self):
        self.headerLineEdit.clear()
        self.imageUrl.clear()
        self.contentTextEdit.clear()
        self.languageCheckBox.setCheckState(0)
        self.toBothBulletinsCheckBox.setCheckState(0)
        self.dateEdit.setDateTime(QDateTime.currentDateTime())
コード例 #32
0
class ciphering_app(QWidget):
    def __init__(self):

        super().__init__()
        self.initUI()

    def initUI(self):

        QToolTip.setFont(QFont('SansSerif', 10))

        encipher_btn = QPushButton('Encipher', self)
        encipher_btn.setToolTip('Enciphers the message.')

        decipher_btn = QPushButton('Decipher', self)
        decipher_btn.setToolTip('Deciphers the message.')

        encipher_btn.clicked.connect(self.encipher)
        decipher_btn.clicked.connect(self.decipher)

        hbox = QHBoxLayout()
        hbox.addStretch(1)
        hbox.addWidget(encipher_btn)
        hbox.addWidget(decipher_btn)

        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(hbox)

        self.setLayout(vbox)

        ceasar = QRadioButton('Ceasar Cipher', self)
        ceasar.move(20, 100)
        self.combo_box = QComboBox(self)
        self.combo_box.addItem('Key')
        for i in range(1, 26):
            self.combo_box.addItem(str(i))
        self.combo_box.resize(45, 20)
        self.combo_box.move(40, 125)
        ceasar.setChecked(True)

        vigenere = QRadioButton('Vigenere Cipher', self)
        vigenere.move(130, 100)
        self.vigenere_key = QLineEdit(self)
        self.vigenere_key.resize(100, 20)
        self.vigenere_key.move(150, 125)
        self.vigenere_key.setPlaceholderText('Key')

        playfair = QRadioButton('Playfair Cipher', self)
        playfair.move(290, 100)
        self.playfair_key = QLineEdit(self)
        self.playfair_key.resize(100, 20)
        self.playfair_key.move(310, 125)
        self.playfair_key.setPlaceholderText('Key')

        railfence = QRadioButton('Railfence Cipher', self)
        railfence.move(450, 100)
        self.railfence_rows = QLineEdit(self)
        self.railfence_rows.setValidator(QIntValidator())
        self.railfence_rows.resize(100, 20)
        self.railfence_rows.move(470, 125)
        self.railfence_rows.setPlaceholderText('Rows')

        self.radio_group = QButtonGroup()
        self.radio_group.addButton(ceasar)
        self.radio_group.addButton(vigenere)
        self.radio_group.addButton(playfair)
        self.radio_group.addButton(railfence)

        self.message_edit = QTextEdit(self)
        self.message_edit.setPlaceholderText('Message here')
        self.message_edit.zoomIn(3)
        self.message_edit.resize(580, 80)
        self.message_edit.move(10, 10)

        self.log = QTextEdit(self)
        self.log.setToolTip('Ctrl + scroll to zoom in and out')
        self.log.setFontFamily('Consolas')
        self.log.setPlainText('Console')
        self.log.setStyleSheet(
            'background-color: rgb(12, 12, 12); color: rgb(204, 204, 204);')
        self.log.zoomIn(3)
        self.log.setReadOnly(True)
        self.log.resize(580, 400)
        self.log.move(10, 160)

        self.setGeometry(600, 600, 600, 600)
        self.setFixedSize(self.size())
        self.setWindowTitle(app_name)
        self.setWindowIcon(QIcon(icon))
        self.center()

        self.show()

    def center(self):
        fg = self.frameGeometry()
        ce = QDesktopWidget().availableGeometry().center()
        fg.moveCenter(ce)
        self.move(fg.topLeft())

    def ceasar_function(self, m, msg):
        new_msg = ''
        key = self.combo_box.currentIndex()

        if key == 0:
            QMessageBox.about(self, 'Error', 'No key chosen.')
            return

        if m == 0:
            method = 'Encipher'
        else:
            method = 'Decipher'
        c_log = 'Method: Ceasar Cipher - ' + method + '\nKey: ' + str(
            key) + '\n\n'

        for i in msg:
            num_value = ord(i)

            if num_value == 32:
                new_msg += ' '
                c_log += '\n'
                continue

            if m == 0:
                num_value += key
            elif m == 1:
                num_value -= key

            if i.istitle():
                if num_value < 65:
                    num_value += 26
                if num_value > 90:
                    num_value -= 26
            else:
                if num_value < 97:
                    num_value += 26
                if num_value > 122:
                    num_value -= 26

            new_msg += chr(num_value)
            c_log += str(i) + '   =>   ' + chr(num_value) + '\n'

        self.log.setPlainText(c_log)
        self.message_edit.setPlainText(new_msg)

    def vigenere_function(self, m, msg):
        new_msg = ''
        key = self.vigenere_key.text().replace(' ', '').lower()

        if len(key) == 0:
            QMessageBox.about(self, 'Oops',
                              'It seems you forgot to set the key!')
            return

        if not all(i.isalpha() or i.isspace() for i in key):
            QMessageBox.about(
                self, 'Oops',
                'Vigenere Cipher key cannot contain special characters or numbers!'
            )
            return

        if m == 0:
            method = 'Encipher'
        else:
            method = 'Decipher'
        c_log = 'Method: Vigenere Cipher - ' + method + '\nKey: ' + key + '\n\n'

        # ik_subtract is for shifting index when white space is found on message
        ik_subtract = 0

        for i in range(0, len(msg)):
            if msg[i] == ' ':
                new_msg += ' '
                ik_subtract += 1
                c_log += '\n'
                continue

            if i >= len(key):
                ik = (i % len(key)) - ik_subtract
            else:
                ik = i - ik_subtract

            num_value_key = ord(key[ik]) - 96
            num_value_char = ord(msg[i])

            if m == 0:
                new_value = num_value_char + num_value_key
            elif m == 1:
                new_value = num_value_char - num_value_key

            if msg[i].istitle():
                if new_value < 65:
                    new_value += 26
                if new_value > 90:
                    new_value -= 26
            else:
                if new_value < 97:
                    new_value += 26
                if new_value > 122:
                    new_value -= 26

            new_msg += chr(new_value)
            c_log += msg[i] + '  +  key:' + key[ik] + '   =>   ' + chr(
                new_value) + '\n'

        self.log.setPlainText(c_log)
        self.message_edit.setPlainText(new_msg)

    def playfair_function(self, m, msg):
        new_msg = ''
        key = self.playfair_key.text().replace(' ', '').lower()

        if len(key) == 0:
            QMessageBox.about(self, 'Oops',
                              'It seems you forgot to set the key!')
            return

        if not all(i.isalpha() or i.isspace() for i in key):
            QMessageBox.about(
                self, 'Oops',
                'Playfair Cipher key cannot contain special characters or numbers!'
            )
            return

        if m == 0:
            method = 'Encipher'
        else:
            method = 'Decipher'
        c_log = 'Method: Playfair Cipher - ' + method + '\nKey: ' + key + '\n'
        c_log += '<!> Spaces will be removed when using Playfair Cipher\n\n'

        key = list(dict.fromkeys(key))

        if 'j' in key and 'i' not in key:
            c_log += '<!> "j" found in key, please note that "i" is also "j" in the table.\n\n'
            remove_i = True
        elif 'j' in key and 'i' in key:
            key.remove('j')
            c_log += '<!> "j" found in key, please note that "i" is also "j" in the table.\n\n'
            remove_i = False
        else:
            remove_i = False

        for char in string.ascii_lowercase:
            if remove_i:
                if char == 'i':
                    continue
            else:
                if char == 'j':
                    continue
            if char not in key:
                key.append(char)

        grid = [[x for x in key[5 * y:(5 * y) + 5]] for y in range(5)]

        for i in grid:
            for x in i:
                c_log += x + '  '
            c_log += '\n'

        no_space_msg = msg.replace(' ', '')

        split_msg = [
            no_space_msg[i:i + 2] for i in range(0, len(no_space_msg), 2)
        ]
        if len(split_msg[-1]) == 1:
            split_msg[-1] += 'x'

        c_log += '\n'

        # index_1, index_2 = None, None
        # grid_index_1, grid_index_2 = None, None

        for i in split_msg:
            letter_1 = i[0]
            letter_2 = i[1]

            in_li = False

            for li in grid:

                if remove_i:
                    if letter_1 == 'i':
                        letter_1 = 'j'
                    if letter_2 == 'i':
                        letter_2 = 'j'
                else:
                    if letter_1 == 'j':
                        letter_1 = 'i'
                    if letter_2 == 'j':
                        letter_2 = 'i'

                if letter_1 in li and letter_2 in li and not letter_1 == letter_2:

                    if m == 0:
                        index_1 = li.index(letter_1) + 1
                        index_2 = li.index(letter_2) + 1

                        if index_1 > 4:
                            index_1 = 0
                        if index_2 > 4:
                            index_2 = 0

                    else:
                        index_1 = li.index(letter_1) - 1
                        index_2 = li.index(letter_2) - 1

                        if index_1 < 0:
                            index_1 = 4
                        if index_2 < 0:
                            index_2 = 4

                    letter_1 = li[index_1]
                    letter_2 = li[index_2]

                    new_msg += letter_1 + letter_2
                    in_li = True
                    continue

                else:
                    if letter_1 in li:
                        index_1 = li.index(letter_1)
                        grid_index_1 = grid.index(li)

                    if letter_2 in li:
                        index_2 = li.index(letter_2)
                        grid_index_2 = grid.index(li)

            # Unknown bug occurs sometimes...
            try:

                if index_1 == index_2:
                    if m == 0:
                        grid_index_1 += 1
                        grid_index_2 += 1

                        if grid_index_1 > 4:
                            grid_index_1 = 0
                        if grid_index_2 > 4:
                            grid_index_2 = 0

                        if grid_index_1 == grid_index_2:
                            index_1 += 1
                            index_2 += 1

                            if index_1 > 4:
                                index_1 = 0
                            if index_2 > 4:
                                index_2 = 0

                    else:
                        grid_index_1 -= 1
                        grid_index_2 -= 1

                        if grid_index_1 < 0:
                            grid_index_1 = 4
                        if grid_index_2 < 0:
                            grid_index_2 = 4

                        if grid_index_1 == grid_index_2:
                            index_1 -= 1
                            index_2 -= 1

                            if index_1 < 0:
                                index_1 = 4
                            if index_2 < 0:
                                index_2 = 4

                    letter_1 = grid[grid_index_1][index_1]
                    letter_2 = grid[grid_index_2][index_2]
                    new_msg += letter_1 + letter_2

                else:
                    if not in_li:
                        letter_1 = grid[grid_index_1][index_2]
                        letter_2 = grid[grid_index_2][index_1]
                        new_msg += letter_1 + letter_2

            except:
                QMessageBox.about(
                    self, 'Oh no',
                    'A bug just flew by, causing an error D: Please try again!'
                )
                return

            c_log += i + '  =>  ' + letter_1 + letter_2 + '\n'

        self.log.setPlainText(c_log)
        self.message_edit.setPlainText(new_msg)

    def railfence_function(self, m, msg):
        new_msg = ''

        try:
            rows = int(self.railfence_rows.text())
            if rows < 2:
                QMessageBox.about(self, 'Oops',
                                  'Number of rows should be more than one!')
                return
        except:
            QMessageBox.about(self, 'Oops',
                              'It seems you forgot to set the key!')
            return

        if m == 0:
            method = 'Encipher'
        else:
            method = 'Decipher'
        c_log = 'Method: Railfence Cipher - ' + method + '\nRows: ' + str(
            rows) + '\n\n'

        grid = [[] for i in range(0, rows)]

        grid_index = 0
        down = True

        for i in msg:
            if m == 0:
                grid[grid_index].append(i)
                c_log += ('  ' * grid_index) + i + '\n'
            else:
                grid[grid_index].append(' ')

            if grid_index == rows - 1:
                down = False
            elif grid_index == 0:
                down = True

            if down:
                grid_index += 1
            else:
                grid_index -= 1

        if m == 0:
            for row in grid:
                for i in row:
                    new_msg += i

            for i in range(rows):
                c_log += '\nRow ' + str(i + 1) + ': ' + re.sub(
                    '\[|\]', '', str(grid[i]))

        else:
            index = 0
            for row in grid:
                for i in range(0, len(row)):
                    row[i] = msg[index]
                    index += 1

            for i in range(rows):
                c_log += '\nRow ' + str(i + 1) + ': ' + re.sub(
                    '\[|\]', '', str(grid[i]))

            down = True
            row_ind, col_ind = 0, 0

            for l in range(len(msg)):
                char = '*'
                col_ind = 0

                for i in grid[row_ind]:
                    if not i == '*':
                        new_msg += i
                        grid[row_ind][grid[row_ind].index(i)] = '*'
                        break

                if row_ind == rows - 1:
                    down = False
                elif row_ind == 0:
                    down = True

                if down:
                    row_ind += 1
                else:
                    row_ind -= 1

        self.log.setPlainText(c_log)
        self.message_edit.setPlainText(new_msg)

    def encipher(self):
        msg = self.message_edit.toPlainText()

        if not self.valid_input(msg):
            return

        rbtn_name = self.radio_group.checkedButton().text()

        if rbtn_name == 'Ceasar Cipher':
            self.ceasar_function(0, msg)
        elif rbtn_name == 'Vigenere Cipher':
            self.vigenere_function(0, msg)
        elif rbtn_name == 'Playfair Cipher':
            self.playfair_function(0, msg)
        elif rbtn_name == 'Railfence Cipher':
            self.railfence_function(0, msg)

    def decipher(self):
        msg = self.message_edit.toPlainText()

        if not self.valid_input(msg):
            return

        rbtn_name = self.radio_group.checkedButton().text()

        if rbtn_name == 'Ceasar Cipher':
            self.ceasar_function(1, msg)
        elif rbtn_name == 'Vigenere Cipher':
            self.vigenere_function(1, msg)
        elif rbtn_name == 'Playfair Cipher':
            self.playfair_function(1, msg)
        elif rbtn_name == 'Railfence Cipher':
            self.railfence_function(1, msg)

    def valid_input(self, msg):
        if len(msg.strip()) == 0:
            QMessageBox.about(self, 'Oops', 'Empty message!')
            self.message_edit.setPlainText('')
            return False

        if self.radio_group.checkedButton().text() == "Railfence Cipher":
            return True

        if not all(i.isalpha() or i.isspace() for i in msg):
            QMessageBox.about(
                self, 'Oops',
                'Message cannot contain special characters or numbers!')
            return False

        return True
コード例 #33
0
class DyStockSelectIndexMaKChartStatsDlg(QDialog):

    def __init__(self, data, parent=None):
        super().__init__(parent)

        self._data = data

        self._initUi()

    def _initUi(self):
        self.setWindowTitle('指数均线K线图统计')
 
        # 控件
        startDateLable = QLabel('开始日期')
        self._startDateLineEdit = QLineEdit(datetime.now().strftime("%Y-%m-%d"))

        endDateLable = QLabel('结束日期')
        self._endDateLineEdit = QLineEdit(datetime.now().strftime("%Y-%m-%d"))

        # 指数和股票代码
        shIndexRadioButton = QRadioButton('上证指数'); shIndexRadioButton.setChecked(True)
        szIndexRadioButton = QRadioButton('深证成指')
        cybIndexRadioButton = QRadioButton('创业板指')
        zxbIndexRadioButton = QRadioButton('中小板指')

        hs300IndexRadioButton = QRadioButton('沪深300')
        zz500IndexRadioButton = QRadioButton('中证500')

        # 添加到QButtonGroup
        self._stocksButtonGroup = QButtonGroup()
        self._stocksButtonGroup.addButton(shIndexRadioButton, 1); 
        self._stocksButtonGroup.addButton(szIndexRadioButton, 2)
        self._stocksButtonGroup.addButton(cybIndexRadioButton, 3)
        self._stocksButtonGroup.addButton(zxbIndexRadioButton, 4)

        self._stocksButtonGroup.addButton(hs300IndexRadioButton, 4)
        self._stocksButtonGroup.addButton(zz500IndexRadioButton, 4)

        cancelPushButton = QPushButton('Cancel')
        okPushButton = QPushButton('OK')
        cancelPushButton.clicked.connect(self._cancel)
        okPushButton.clicked.connect(self._ok)

        # 布局
        grid = QGridLayout()
        grid.setSpacing(10)
 
        grid.addWidget(startDateLable, 0, 0)
        grid.addWidget(self._startDateLineEdit, 1, 0)

        grid.addWidget(endDateLable, 0, 1)
        grid.addWidget(self._endDateLineEdit, 1, 1)

        grid.addWidget(shIndexRadioButton, 2, 0)
        grid.addWidget(szIndexRadioButton, 2, 1)
        grid.addWidget(cybIndexRadioButton, 3, 0)
        grid.addWidget(zxbIndexRadioButton, 3, 1)

        grid.addWidget(hs300IndexRadioButton, 4, 0)
        grid.addWidget(zz500IndexRadioButton, 4, 1)

        grid.addWidget(okPushButton, 5, 1)
        grid.addWidget(cancelPushButton, 5, 0)
 
        self.setLayout(grid)

    def _getStockCode(self):
        checkedButton = self._stocksButtonGroup.checkedButton()
        text = checkedButton.text()

        return DyStockCommon.getIndexSectorByName(text)

    def _ok(self):
        self._data['startDate'] = self._startDateLineEdit.text()
        self._data['endDate'] = self._endDateLineEdit.text()
        self._data['index'] = self._getStockCode()

        self.accept()

    def _cancel(self):
        self.reject()
コード例 #34
0
ファイル: data_check.py プロジェクト: canard0328/malss
class DataCheck(Content):

    def __init__(self, parent=None, button_func=None, params=None):
        super().__init__(parent, 'Data check', params)

        self.button_func = button_func

        path = os.path.abspath(os.path.dirname(__file__)) + '/static/'

        # nr = min(5, data.shape[0])
        nr = len(self.params.data5)

        if params.lang == 'jp':
            text = ('データの読み込み結果(先頭{n}行)を以下に示します.\n'
                    'データを正しく読み込めていることを確認してください.'.format(n=nr))
            self.set_paragraph(
                'データ読み込み結果の確認', text=text)
        else:
            text = ('First {n} rows of your data are shown below.\n'
                    'Confirm that the data was read correctly.'.format(n=nr))
            self.set_paragraph(
                'Check data', text=text)

        table = NonScrollTable(self.inner)

        table.setRowCount(nr)
        table.setColumnCount(len(self.params.columns))
        table.setHorizontalHeaderLabels(self.params.columns)

        for r in range(nr):
            for c in range(len(self.params.columns)):
                item = QTableWidgetItem(str(self.params.data5.iat[r, c]))
                item.setFlags(Qt.ItemIsEnabled)
                table.setItem(r, c, item)

        table.setNonScroll()

        self.vbox.addWidget(table)

        # Text for type checking and objective variable setting
        path1 = path + 'categorical'
        text = self.get_text(path1)
        if self.params.lang == 'en':
            self.set_paragraph(
                'Check type of variables and set objective variable',
                text=text)
        else:
            self.set_paragraph('変数タイプの確認と目的変数の設定', text=text)

        # htable = QTableWidget(self.inner)
        htable = NonScrollTable(self.inner)

        htable.setRowCount(len(self.params.columns))
        htable.setColumnCount(4)
        htable.setHorizontalHeaderLabels(
            ['columns', 'categorical', 'numerical', 'target'])

        self.lst_cat = []
        self.lst_num = []
        self.lst_obj = []
        self.obj_group = QButtonGroup(self.inner)
        for c in range(len(self.params.columns)):
            # col 1
            item = QTableWidgetItem(self.params.columns[c])
            item.setFlags(Qt.ItemIsEnabled)
            htable.setItem(c, 0, item)

            group = QButtonGroup(self.inner)

            # col 2
            htable.setCellWidget(
                c, 1,
                self.__make_cell(c, 'cat', self.params.col_types[c],
                                 self.params.col_types_def[c]))
            group.addButton(self.lst_cat[-1])

            # col 3
            htable.setCellWidget(
                c, 2,
                self.__make_cell(c, 'num', self.params.col_types[c],
                                 self.params.col_types_def[c]))
            group.addButton(self.lst_num[-1])

            # col 4
            htable.setCellWidget(
                c, 3,
                self.__make_cell(c, 'obj', self.params.col_types[c],
                                 self.params.col_types_def[c]))
            self.obj_group.addButton(self.lst_obj[-1])
            self.obj_group.setId(self.lst_obj[-1], c)

        htable.setNonScroll()

        self.vbox.addWidget(htable)

        if self.params.lang == 'jp':
            self.txt_cnf = ('<font color="red">目的変数を1つ選択し,'
                    'targetの列にチェックをいれてください。')
            if self.params.task.lower() == 'classification':
                self.txt_cnf += '<br>目的変数はカテゴリ変数である必要があります。</font>'
            else:
                self.txt_cnf += '<br>目的変数は量的変数である必要があります。</font>'
        else:
            self.txt_cnf = ('<font color="red">Select one variable as target variable,'
                            'then set the column of "target" of the variable checked.')
            if self.params.task.lower() == 'classification':
                self.txt_cnf += '<br>Target variable must be a categorical variable.</font>'
            else:
                self.txt_cnf += '<br>Target variable must be a numerical variable.</font>'
        self.lbl_cnf = QLabel(self.txt_cnf, self.inner)

        self.vbox.addWidget(self.lbl_cnf)

        self.vbox.addStretch(1)

        self.btn = QPushButton('Next', self.inner)
        self.btn.setStyleSheet('QPushButton{font: bold; font-size: 15pt; background-color: white;};')
        if self.params.lang == 'en':
            self.btn.clicked.connect(lambda: self.button_func('Overfitting'))
        else:
            self.btn.clicked.connect(lambda: self.button_func('過学習'))
        if self.obj_group.checkedButton() is None:
            self.btn.setEnabled(False)
        else:
            self.lbl_cnf.setText('<br>')
            self.btn.setEnabled(True)

        self.vbox.addWidget(self.btn)

    def __make_cell(self, c, name, col_type, col_type_def):
        cell = QWidget(self.inner)
        rbtn = QRadioButton('', cell)
        rbtn.toggled.connect(lambda: self.rbtn_clicked(name + '_' + str(c)))
        hbl = QHBoxLayout(cell)
        hbl.addWidget(rbtn)
        hbl.setContentsMargins(0, 0, 0, 0)
        hbl.setAlignment(Qt.AlignCenter)
        cell.setLayout(hbl)
        if name == 'cat':
            if col_type == 'object':
                rbtn.setChecked(True)
            self.lst_cat.append(rbtn)
        elif name == 'num':
            if col_type != 'object':
                rbtn.setChecked(True)
            if col_type_def == 'object':
                rbtn.setEnabled(False)
            self.lst_num.append(rbtn)
        elif name == 'obj':
            if col_type == 'object' and self.params.task == 'Regression':
                rbtn.setEnabled(False)
            elif col_type != 'object' and self.params.task == 'Classification':
                rbtn.setEnabled(False)
            if self.params.columns[c] == self.params.objective:
                rbtn.setChecked(True)
            self.lst_obj.append(rbtn)

        return cell

    def rbtn_clicked(self, text):
        name, idx = text.split('_')
        idx = int(idx)
        if len(self.lst_obj) <= idx:
            return

        if self.lst_num[idx].isChecked():
            if self.params.task == 'Classification':
                self.obj_group.setExclusive(False)
                self.lst_obj[idx].setChecked(False)
                self.obj_group.setExclusive(True)
                self.lst_obj[idx].setEnabled(False)
            elif self.params.task == 'Regression':
                self.lst_obj[idx].setEnabled(True)

            self.params.col_types[idx] = self.params.col_types_def[idx]
        elif self.lst_cat[idx].isChecked():
            if self.params.task == 'Classification':
                self.lst_obj[idx].setEnabled(True)
            elif self.params.task == 'Regression':
                self.obj_group.setExclusive(False)
                self.lst_obj[idx].setChecked(False)
                self.obj_group.setExclusive(True)
                self.lst_obj[idx].setEnabled(False)

            self.params.col_types[idx] = 'object'

        if self.obj_group.checkedButton() is None:
            self.params.objective = None
            self.lbl_cnf.setText(self.txt_cnf)
            self.btn.setEnabled(False)
        else:
            self.params.objective =\
                self.params.columns[self.obj_group.checkedId()]
            self.lbl_cnf.setText('<br>')
            self.btn.setEnabled(True)

        self.params.col_types_changed = True
コード例 #35
0
class Windows(QWidget):
    def __init__(self):
        super().__init__()

        self.urlEdit = QLineEdit()
        self.bodyEdit = QTextEdit()
        self.nameEdit = QLineEdit()
        self.secretEdit = QLineEdit()
        self.methodGroup = QButtonGroup()
        self.getButton = QRadioButton("GET")
        self.postButton = QRadioButton("POST")
        self.postButton.setChecked(True)
        self.methodGroup.addButton(self.getButton)
        self.methodGroup.addButton(self.postButton)
        self.responseEdit = QTextEdit()

        self.initUi()

        # Custom output stream.
        wallet_rpc.logger.handlers[1].stream = Stream(
            newText=self.onUpdateText)
        sys.stderr = Stream(newText=self.onUpdateText)

    def __del__(self):
        # Restore sys.stdout
        sys.stdout = sys.__stdout__
        sys.stderr = sys.__stderr__

    def onUpdateText(self, text):
        """Write console output to text widget."""
        cursor = self.responseEdit.textCursor()
        cursor.movePosition(QTextCursor.End)
        cursor.insertText(text)
        self.responseEdit.setTextCursor(cursor)
        self.responseEdit.ensureCursorVisible()

    def initUi(self):
        urlLabel = QLabel('Url')
        bodyLabel = QLabel('Body')
        nameLabel = QLabel('UserName')
        secretLabel = QLabel('Secret')
        methodLable = QLabel('Method')
        responseLabel = QLabel('Response')

        callButton = QPushButton("CALL")
        callButton.clicked.connect(self.buttonClick)

        grid = QGridLayout()
        grid.setSpacing(10)

        grid.addWidget(urlLabel, 1, 0)
        grid.addWidget(self.urlEdit, 1, 1)

        grid.addWidget(bodyLabel, 2, 0)
        grid.addWidget(self.bodyEdit, 2, 1)

        grid.addWidget(nameLabel, 3, 0)
        grid.addWidget(self.nameEdit, 3, 1)

        grid.addWidget(secretLabel, 4, 0)
        grid.addWidget(self.secretEdit, 4, 1)

        grid.addWidget(methodLable, 5, 0)
        box = QHBoxLayout()
        box.addWidget(self.getButton)
        box.addWidget(self.postButton)
        grid.addLayout(box, 5, 1)

        hBox = QHBoxLayout()
        hBox.addStretch(1)
        hBox.addWidget(callButton)
        grid.addLayout(hBox, 6, 1)

        grid.addWidget(responseLabel, 7, 0)
        grid.addWidget(self.responseEdit, 7, 1)

        self.setLayout(grid)

        self.setGeometry(500, 600, 1000, 800)
        self.center()
        self.setWindowTitle('Call Kong Service')
        self.show()

    def center(self):
        # 获得窗口
        qr = self.frameGeometry()
        # 获得屏幕中心点
        cp = QDesktopWidget().availableGeometry().center()
        # 显示到屏幕中心
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def buttonClick(self):
        wallet_rpc.call(self.urlEdit.text(), self.nameEdit.text(),
                        self.secretEdit.text(), self.bodyEdit.toPlainText(),
                        self.methodGroup.checkedButton().text())
コード例 #36
0
class PreferencesWidget(QDialog):

    def __init__(self):
        super(PreferencesWidget, self).__init__()

        # 个性化
        self.personalise_stack = QScrollArea()
        self.personalise_stack.setWidgetResizable(True)
        # 播放器
        self.player_stack = QScrollArea()
        self.player_stack.setWidgetResizable(True)
        # 快捷键
        self.hot_key_stack = QScrollArea()
        self.hot_key_stack.setWidgetResizable(True)

        self.h_line_1 = QFrame()
        self.h_line_1.setFrameShape(QFrame.HLine)
        self.h_line_1.setFrameShadow(QFrame.Sunken)
        self.h_line_2 = QFrame()
        self.h_line_2.setFrameShape(QFrame.HLine)
        self.h_line_2.setFrameShadow(QFrame.Sunken)
        self.h_line_3 = QFrame()
        self.h_line_3.setFrameShape(QFrame.HLine)
        self.h_line_3.setFrameShadow(QFrame.Sunken)
        self.h_line_4 = QFrame()
        self.h_line_4.setFrameShape(QFrame.HLine)
        self.h_line_4.setFrameShadow(QFrame.Sunken)

        self.language_label = QLabel("界面语言")
        self.language_btn_group = QButtonGroup()
        self.simplified_chinese_btn = PreferencesQRadioButton("简体中文")
        self.traditional_chinese_btn = PreferencesQRadioButton("繁体中文")
        self.english_btn = PreferencesQRadioButton("English")
        self.language_btn_group.addButton(self.simplified_chinese_btn)
        self.language_btn_group.addButton(self.traditional_chinese_btn)
        self.language_btn_group.addButton(self.english_btn)
        self.skin_label = QLabel("界面皮肤(!弃用 被界面主题代替)")
        self.skin_btn_group = QButtonGroup()
        self.dark_skin_btn = PreferencesQRadioButton("暗黑模式")
        self.dark_skin_btn.setDisabled(True)
        self.white_skin_btn = PreferencesQRadioButton("纯白模式")
        self.white_skin_btn.setDisabled(True)
        self.blue_skin_btn = PreferencesQRadioButton("浅蓝模式")
        self.blue_skin_btn.setDisabled(True)
        self.skin_btn_group.addButton(self.dark_skin_btn)
        self.skin_btn_group.addButton(self.white_skin_btn)
        self.skin_btn_group.addButton(self.blue_skin_btn)
        self.theme_label = QLabel("界面主题")
        self.current_theme_label = QLabel(f"当前主题:{get_value(transform_dict, get_theme())}")
        self.light_theme_label = QLabel("选择主题:")
        self.theme_combobox = QComboBox()
        self.theme_combobox.addItems(sorted(list(transform_dict.values())))
        self.theme_combobox.setCurrentText(get_value(transform_dict, get_theme()))
        self.font_label = QLabel("界面字体")
        self.font_btn = QPushButton("点击设置")
        self.font_btn.clicked.connect(self.answer_font_btn_clicked)
        self.tool_bar_label = QLabel("工具栏")
        self.tool_bar_group = QButtonGroup()
        self.tool_bar_hide = PreferencesQRadioButton("默认隐藏")
        self.tool_bar_show = PreferencesQRadioButton("默认显示")
        self.tool_bar_group.addButton(self.tool_bar_hide)
        self.tool_bar_group.addButton(self.tool_bar_show)
        self.tool_bar_pos_group = QButtonGroup()
        self.tool_bar_pos_left = PreferencesQRadioButton("显示在左边")
        self.tool_bar_pos_right = PreferencesQRadioButton("显示在右边")
        self.tool_bar_pos_top = PreferencesQRadioButton("显示在上边")
        self.tool_bar_pos_bottom = PreferencesQRadioButton("显示在下边")
        self.tool_bar_pos_group.addButton(self.tool_bar_pos_left)
        self.tool_bar_pos_group.addButton(self.tool_bar_pos_right)
        self.tool_bar_pos_group.addButton(self.tool_bar_pos_top)
        self.tool_bar_pos_group.addButton(self.tool_bar_pos_bottom)
        self.personalise_stack_ui()
        self.player_stack_ui()
        self.hot_key_stack_ui()

        self._stack = QStackedWidget()
        self._stack.addWidget(self.personalise_stack)
        self._stack.addWidget(self.player_stack)
        self._stack.addWidget(self.hot_key_stack)
        self._btn_left_list = QListWidget()
        _personalise_item = QListWidgetItem('个性化')
        _personalise_item.setTextAlignment(Qt.AlignCenter)
        _personalise_item.setSizeHint(QSize(100, 50))
        self._btn_left_list.insertItem(0, _personalise_item)
        _player_item = QListWidgetItem('播放器')
        _player_item.setTextAlignment(Qt.AlignCenter)
        _player_item.setSizeHint(QSize(100, 50))
        self._btn_left_list.insertItem(1, _player_item)
        _hot_key_item = QListWidgetItem('快捷键')
        _hot_key_item.setTextAlignment(Qt.AlignCenter)
        _hot_key_item.setSizeHint(QSize(100, 50))
        self._btn_left_list.insertItem(2, _hot_key_item)
        self._btn_left_list.setCurrentRow(0)
        self._btn_left_list.setMinimumWidth(102)
        self._btn_left_list.setMaximumWidth(120)
        self._btn_left_list.currentRowChanged.connect(self.widget_display)

        self.preferences_cancel_btn = QPushButton("取消")
        self.preferences_cancel_btn.clicked.connect(self.on_preferences_cancel_btn_clicked)
        self.preferences_ok_btn = QPushButton("应用")
        self.preferences_ok_btn.clicked.connect(self.on_preferences_ok_btn_clicked)

        cancel_ok_btn_layout = QHBoxLayout()
        cancel_ok_btn_layout.setContentsMargins(0, 5, 5, 5)
        cancel_ok_btn_layout.setSpacing(5)
        cancel_ok_btn_layout.addStretch()
        cancel_ok_btn_layout.addWidget(self.preferences_cancel_btn)
        cancel_ok_btn_layout.addWidget(self.preferences_ok_btn)

        self._main_layout = QVBoxLayout()
        self._main_layout.setContentsMargins(0, 0, 0, 0)
        self._main_layout.setSpacing(0)
        self._h_layout = QHBoxLayout()
        self._h_layout.setContentsMargins(0, 0, 0, 0)
        self._h_layout.setSpacing(0)
        self._h_layout.addWidget(self._btn_left_list)
        self._h_layout.addWidget(self._stack)
        self._main_layout.addLayout(self._h_layout)
        self._main_layout.addWidget(self.h_line_4)
        self._main_layout.addLayout(cancel_ok_btn_layout)
        self.setLayout(self._main_layout)

        self.setWindowTitle("偏好设置")
        self.setMinimumSize(550, 600)
        self.setWindowIcon(QIcon(PathHelper.get_img_path("*****@*****.**")))
        self.setWindowFlags(Qt.WindowCloseButtonHint)

        self.update_all_stack_ui()

    def personalise_stack_ui(self):
        """

        :return:
        """
        language_btn_layout = QHBoxLayout()
        language_btn_layout.setContentsMargins(0, 5, 5, 5)
        language_btn_layout.setSpacing(5)
        language_btn_layout.addWidget(self.simplified_chinese_btn)
        language_btn_layout.addWidget(self.traditional_chinese_btn)
        language_btn_layout.addWidget(self.english_btn)

        skin_btn_layout = QHBoxLayout()
        skin_btn_layout.setContentsMargins(0, 5, 5, 5)
        skin_btn_layout.setSpacing(5)
        skin_btn_layout.addWidget(self.dark_skin_btn)
        skin_btn_layout.addWidget(self.white_skin_btn)
        skin_btn_layout.addWidget(self.blue_skin_btn)

        theme_btn_layout = QHBoxLayout()
        theme_btn_layout.setContentsMargins(0, 5, 5, 5)
        theme_btn_layout.setSpacing(5)
        theme_btn_layout.addWidget(self.current_theme_label)
        theme_btn_layout.addStretch()
        theme_btn_layout.addWidget(self.light_theme_label)
        theme_btn_layout.addWidget(self.theme_combobox)
        theme_btn_layout.addStretch()

        font_btn_layout = QHBoxLayout()
        font_btn_layout.setContentsMargins(0, 5, 5, 5)
        font_btn_layout.setSpacing(5)
        font_btn_layout.addWidget(self.font_btn)

        tool_bar_visibility_btn_layout = QHBoxLayout()
        tool_bar_visibility_btn_layout.setContentsMargins(0, 5, 5, 5)
        tool_bar_visibility_btn_layout.setSpacing(5)
        tool_bar_visibility_btn_layout.addWidget(self.tool_bar_hide)
        tool_bar_visibility_btn_layout.addWidget(self.tool_bar_show)

        tool_bar_pos_btn_layout = QHBoxLayout()
        tool_bar_pos_btn_layout.setContentsMargins(0, 5, 5, 5)
        tool_bar_pos_btn_layout.setSpacing(5)
        tool_bar_pos_btn_layout.addWidget(self.tool_bar_pos_left)
        tool_bar_pos_btn_layout.addWidget(self.tool_bar_pos_right)
        tool_bar_pos_btn_layout.addWidget(self.tool_bar_pos_top)
        tool_bar_pos_btn_layout.addWidget(self.tool_bar_pos_bottom)

        widget = QWidget()
        main_layout = QVBoxLayout(widget)
        main_layout.setContentsMargins(5, 5, 5, 5)
        main_layout.setSpacing(5)
        main_layout.addWidget(self.language_label)
        main_layout.addLayout(language_btn_layout)
        main_layout.addWidget(self.h_line_1)
        main_layout.addWidget(self.skin_label)
        main_layout.addLayout(skin_btn_layout)
        main_layout.addWidget(self.theme_label)
        main_layout.addLayout(theme_btn_layout)
        main_layout.addWidget(self.h_line_2)
        main_layout.addWidget(self.font_label)
        main_layout.addLayout(font_btn_layout)
        main_layout.addWidget(self.h_line_3)
        main_layout.addWidget(self.tool_bar_label)
        main_layout.addLayout(tool_bar_visibility_btn_layout)
        main_layout.addLayout(tool_bar_pos_btn_layout)
        self.personalise_stack.setWidget(widget)

    def player_stack_ui(self):
        """

        :return:
        """
        pass

    def hot_key_stack_ui(self):
        """

        :return:
        """
        pass

    def update_all_stack_ui(self):
        """

        :return:
        """
        _language = get_language()
        if _language == CommonEnum.LanguageZN:
            self.simplified_chinese_btn.setChecked(True)
        elif _language == CommonEnum.LanguageTN:
            self.traditional_chinese_btn.setChecked(True)
        elif _language == CommonEnum.LanguageEN:
            self.english_btn.setChecked(True)
        else:
            self.simplified_chinese_btn.setChecked(True)

        _skin = get_skin()
        if _skin == CommonEnum.SKinDark:
            self.dark_skin_btn.setChecked(True)
        elif _skin == CommonEnum.SkinWhite:
            self.white_skin_btn.setChecked(True)
        elif _skin == CommonEnum.SkinBlue:
            self.blue_skin_btn.setChecked(True)
        else:
            self.blue_skin_btn.setChecked(True)

        _tool_bar_visible = get_tool_bar_visible()
        if _tool_bar_visible:
            self.tool_bar_show.setChecked(True)
        else:
            self.tool_bar_hide.setChecked(True)

        _tool_bar_pos = get_tool_bar_pos()
        if _tool_bar_pos == CommonEnum.ToolBarPosLeft:
            self.tool_bar_pos_left.setChecked(True)
        elif _tool_bar_pos == CommonEnum.ToolBarPosRight:
            self.tool_bar_pos_right.setChecked(True)
        elif _tool_bar_pos == CommonEnum.ToolBarPosTop:
            self.tool_bar_pos_top.setChecked(True)
        elif _tool_bar_pos == CommonEnum.ToolBarPosBottom:
            self.tool_bar_pos_bottom.setChecked(True)
        else:
            self.tool_bar_pos_top.setChecked(True)

    def widget_display(self, i):
        """ 控制显示的页面

        :param i:
        :return:
        """
        self._stack.setCurrentIndex(i)

    def answer_font_btn_clicked(self, checked):
        """

        :param checked:
        :return:
        """
        set_font(self, False)

    def on_preferences_ok_btn_clicked(self):
        """ 点击应用按钮,更新设置(需要重启应用)

        :return:
        """
        _box = PromptBox(1, "设置成功,重启软件后生效!\n确定立即重启吗?", 2)
        width, height = get_window_center_point(_box)
        _box.move(width, height)
        _flag = _box.exec_()
        _app_info = get_app_info()
        _app_type = _app_info["app_type"]
        # 确认重启且处于 release 状态,则自动重启
        if _flag:

            _language_checkedButton = self.language_btn_group.checkedButton()
            if _language_checkedButton == self.simplified_chinese_btn:
                set_language(CommonEnum.LanguageZN, False)
            elif _language_checkedButton == self.traditional_chinese_btn:
                set_language(CommonEnum.LanguageTN, False)
            elif _language_checkedButton == self.english_btn:
                set_language(CommonEnum.LanguageEN, False)
            else:
                set_language(CommonEnum.LanguageZN, False)

            _skin_checkedButton = self.skin_btn_group.checkedButton()
            if _skin_checkedButton == self.dark_skin_btn:
                set_skin(CommonEnum.SKinDark, False)
            elif _skin_checkedButton == self.white_skin_btn:
                set_skin(CommonEnum.SkinWhite, False)
            elif _skin_checkedButton == self.blue_skin_btn:
                set_skin(CommonEnum.SkinBlue, False)
            else:
                set_skin(CommonEnum.SKinDark, False)

            _theme_checkedText = self.theme_combobox.currentText()
            set_theme(_theme_checkedText, False)

            _tool_bar_checkedButton = self.tool_bar_group.checkedButton()
            if _tool_bar_checkedButton == self.tool_bar_hide:
                set_tool_bar_visible(0)
            elif _tool_bar_checkedButton == self.tool_bar_show:
                set_tool_bar_visible(1)
            else:
                set_tool_bar_visible(1)

            _ool_bar_pos_checkedButton = self.tool_bar_pos_group.checkedButton()
            if _ool_bar_pos_checkedButton == self.tool_bar_pos_left:
                set_tool_bar_pos(CommonEnum.ToolBarPosLeft)
            elif _ool_bar_pos_checkedButton == self.tool_bar_pos_right:
                set_tool_bar_pos(CommonEnum.ToolBarPosRight)
            elif _ool_bar_pos_checkedButton == self.tool_bar_pos_top:
                set_tool_bar_pos(CommonEnum.ToolBarPosTop)
            elif _ool_bar_pos_checkedButton == self.tool_bar_pos_bottom:
                set_tool_bar_pos(CommonEnum.ToolBarPosBottom)
            else:
                set_tool_bar_pos(CommonEnum.ToolBarPosTop)

            if _app_type == CommonEnum.AppType.value[1]:
                restart_real_live()
            else:
                _box = PromptBox(0, "debug 状态请手动重启!", 1)
                width, height = get_window_center_point(_box)
                _box.move(width, height)
                _box.exec_()
        self.close()

    def on_preferences_cancel_btn_clicked(self):
        """ 点击取消按钮

        :return:
        """
        self.close()
コード例 #37
0
ファイル: options.py プロジェクト: vishweshs4/TreeLine
class ChoiceOptionItem(StringOptionItem):
    """Class to store and control a radio button choice config option entry.

    Stores the name, value, category and description, provides validation,
    config file output and dialog controls.
    """
    def __init__(self,
                 optionDict,
                 name,
                 value,
                 choices,
                 category='',
                 columnNum=0):
        """Set the parameters and initial value and add to optionDict.

        Raises a ValueError if initial validation fails.
        Arguments:
            optionDict -- a dictionary to add this option item to
            name -- the string key for the option
            value -- the string value
            choices -- a list of acceptable entries
            category -- a string for the option group this belongs to
            columnNum -- the column position for this control in the dialog
        """
        self.choices = choices
        super().__init__(optionDict, name, value, False, False, category, '',
                         columnNum)

    def setValue(self, value):
        """Sets the value and validates, returns True if OK.

        Returns False if validation fails but the old value is OK,
        or if the value is unchanged.
        Raises a ValueError if validation fails without an old value.
        Arguments:
            value -- the string value to set
        """
        value = str(value)
        if value in self.choices and value != self.value:
            self.value = value
            return True
        if self.value == None:
            raise ValueError
        return False

    def addDialogControl(self, groupBox):
        """Add the labels and controls to a dialog box for this option item.

        Arguments:
            groupBox -- the current group box
        """
        rowLayout.addWidget(groupBox)
        QGridLayout(groupBox)
        gridLayout = groupBox.layout()
        self.dialogControl = QButtonGroup(groupBox)
        row = 0
        for choice in self.choices:
            button = QRadioButton(choice, groupBox)
            self.dialogControl.addButton(button)
            gridLayout.addWidget(button, row, 0, 1, 2)
            row += 1

    def updateFromDialog(self):
        """Set the value of this item from the dialog contents.

        Return True if successfully set.
        """
        return self.setValue(self.dialogControl.checkedButton().text())
コード例 #38
0
ファイル: settings.py プロジェクト: CludeX/XwareDesktop
class SettingsDialog(QDialog, Ui_Dialog):
    def __init__(self, parent):
        super().__init__(parent)
        self.setAttribute(Qt.WA_DeleteOnClose)

        self.setupUi(self)

        self.lineEdit_loginUsername.setText(app.settings.get("adapter-legacy", "username"))
        self.lineEdit_loginPassword.setText(app.settings.get("adapter-legacy", "password"))
        self.checkBox_autoLogin.setChecked(app.settings.getbool("legacy", "autologin"))
        self.checkBox_autoStartFrontend.setChecked(app.autoStart)
        if sys.platform == "linux":
            self.checkBox_autoStartFrontend.setEnabled(True)

        adapter = app.adapterManager[0]

        # Xwared Management
        managedBySystemd = adapter.daemonManagedBySystemd
        managedByUpstart = adapter.daemonManagedByUpstart
        managedByAutostart = adapter.daemonManagedByAutostart

        self.radio_managedBySystemd.setChecked(managedBySystemd)
        self.radio_managedByUpstart.setChecked(managedByUpstart)
        self.radio_managedByAutostart.setChecked(managedByAutostart)
        self.radio_managedByNothing.setChecked(
            not (managedBySystemd or managedByUpstart or managedByAutostart))

        initType = getInitType()
        self.radio_managedBySystemd.setEnabled(initType == InitType.SYSTEMD)
        self.radio_managedByUpstart.setEnabled(initType == InitType.UPSTART)

        if not adapter.useXwared:
            self.group_etmStartWhen.setEnabled(False)
            self.group_initManaged.setEnabled(False)

        self.btngrp_etmStartWhen = QButtonGroup()
        self.btngrp_etmStartWhen.addButton(self.radio_backendStartWhen1, 1)
        self.btngrp_etmStartWhen.addButton(self.radio_backendStartWhen2, 2)
        self.btngrp_etmStartWhen.addButton(self.radio_backendStartWhen3, 3)

        if adapter.useXwared:
            startEtmWhen = adapter.startEtmWhen
            self.btngrp_etmStartWhen.button(startEtmWhen).setChecked(True)

        # frontend
        self.checkBox_enableDevelopersTools.setChecked(
            app.settings.getbool("legacy", "enabledeveloperstools"))
        self.checkBox_allowFlash.setChecked(app.settings.getbool("legacy", "allowflash"))
        self.checkBox_minimizeToSystray.setChecked(
            app.settings.getbool("frontend", "minimizetosystray"))
        self.checkBox_closeToMinimize.setChecked(
            app.settings.getbool("frontend", "closetominimize"))
        self.checkBox_popNotifications.setChecked(
            app.settings.getbool("frontend", "popnotifications"))
        self.checkBox_notifyBySound.setChecked(
            app.settings.getbool("frontend", "notifybysound"))
        self.checkBox_showMonitorWindow.setChecked(
            app.settings.getbool("frontend", "showmonitorwindow"))
        self.spinBox_monitorFullSpeed.setValue(
            app.settings.getint("frontend", "monitorfullspeed"))

        # clipboard related
        self.checkBox_watchClipboard.stateChanged.connect(self.slotWatchClipboardToggled)
        self.checkBox_watchClipboard.setChecked(app.settings.getbool("frontend", "watchclipboard"))
        self.slotWatchClipboardToggled(self.checkBox_watchClipboard.checkState())
        self.plaintext_watchPattern.setPlainText(app.settings.get("frontend", "watchpattern"))

        self.btn_addMount.clicked.connect(self.slotAddMount)
        self.btn_removeMount.clicked.connect(self.slotRemoveMount)

        # Mounts
        self.setupMounts()

        # backend setting is a different thing!
        self.setupETM()

    @pyqtSlot(int)
    def slotWatchClipboardToggled(self, state):
        self.plaintext_watchPattern.setEnabled(state)

    @pyqtSlot()
    def setupMounts(self):
        adapter = app.adapterManager[0]
        if not adapter.useXwared:
            self.tab_mount.setEnabled(False)
            return
        self.table_mounts.setRowCount(0)
        self.table_mounts.clearContents()

        mountsMapping = app.adapterManager[0].mountsFaker.getMountsMapping()
        for i, mount in enumerate(app.adapterManager[0].mountsFaker.mounts):
            self.table_mounts.insertRow(i)
            # drive1: the drive letter it should map to, by alphabetical order
            drive1 = app.adapterManager[0].mountsFaker.driveIndexToLetter(i)
            self.table_mounts.setItem(i, 0, QTableWidgetItem(drive1 + "\\TDDOWNLOAD"))

            # mounts = ['/path/to/1', 'path/to/2', ...]
            self.table_mounts.setItem(i, 1, QTableWidgetItem(mount))

            # drive2: the drive letter it actually is assigned to
            drive2 = mountsMapping.get(mount, "无")

            errors = []

            # check: mapping
            if drive1 != drive2:
                errors.append(
                    "错误:盘符映射在'{actual}',而不是'{should}'。\n"
                    "如果这是个新挂载的文件夹,请尝试稍等,或重启后端,可能会修复此问题。"
                    .format(actual = drive2, should = drive1))

            brush = QBrush()
            if errors:
                brush.setColor(Qt.red)
                errString = "\n".join(errors)
            else:
                brush.setColor(Qt.darkGreen)
                errString = "正常"
            errWidget = QTableWidgetItem(errString)
            errWidget.setForeground(brush)

            self.table_mounts.setItem(i, 2, errWidget)
            del brush, errWidget

        self.table_mounts.resizeColumnsToContents()

    @pyqtSlot()
    def slotAddMount(self):
        fileDialog = QFileDialog(self, Qt.Dialog)
        fileDialog.setFileMode(QFileDialog.Directory)
        fileDialog.setOption(QFileDialog.ShowDirsOnly, True)
        fileDialog.setViewMode(QFileDialog.List)
        fileDialog.setDirectory(os.environ["HOME"])
        if fileDialog.exec():
            selected = fileDialog.selectedFiles()[0]
            if selected in self.newMounts:
                return
            row = self.table_mounts.rowCount()
            self.table_mounts.insertRow(row)
            self.table_mounts.setItem(
                row, 0,
                QTableWidgetItem(app.adapterManager[0].mountsFaker.driveIndexToLetter(row) +
                                 "\\TDDOWNLOAD"))
            self.table_mounts.setItem(row, 1, QTableWidgetItem(selected))
            self.table_mounts.setItem(row, 2, QTableWidgetItem("新近添加"))

    @pyqtSlot()
    def slotRemoveMount(self):
        row = self.table_mounts.currentRow()
        self.table_mounts.removeRow(row)

    @pyqtSlot()
    def accept(self):
        app.settings.set("adapter-legacy", "username", self.lineEdit_loginUsername.text())
        app.settings.set("adapter-legacy", "password", self.lineEdit_loginPassword.text())
        app.settings.setbool("legacy", "autologin", self.checkBox_autoLogin.isChecked())

        app.autoStart = self.checkBox_autoStartFrontend.isChecked()

        app.adapterManager[0].daemonManagedBySystemd = self.radio_managedBySystemd.isChecked()
        app.adapterManager[0].daemonManagedByUpstart = self.radio_managedByUpstart.isChecked()
        app.adapterManager[0].daemonManagedByAutostart = self.radio_managedByAutostart.isChecked()

        app.settings.setbool("legacy", "enabledeveloperstools",
                             self.checkBox_enableDevelopersTools.isChecked())
        app.settings.setbool("legacy", "allowflash",
                             self.checkBox_allowFlash.isChecked())
        app.settings.setbool("frontend", "minimizetosystray",
                             self.checkBox_minimizeToSystray.isChecked())

        # A possible Qt bug
        # https://bugreports.qt-project.org/browse/QTBUG-37695
        app.settings.setbool("frontend", "closetominimize",
                             self.checkBox_closeToMinimize.isChecked())
        app.settings.setbool("frontend", "popnotifications",
                             self.checkBox_popNotifications.isChecked())
        app.settings.setbool("frontend", "notifybysound",
                             self.checkBox_notifyBySound.isChecked())

        app.settings.setbool("frontend", "showmonitorwindow",
                             self.checkBox_showMonitorWindow.isChecked())
        app.settings.setint("frontend", "monitorfullspeed",
                            self.spinBox_monitorFullSpeed.value())
        app.settings.setbool("frontend", "watchclipboard",
                             self.checkBox_watchClipboard.isChecked())
        app.settings.set("frontend", "watchpattern",
                         self.plaintext_watchPattern.toPlainText())

        if self.group_etmStartWhen.isEnabled():
            startEtmWhen = self.btngrp_etmStartWhen.id(self.btngrp_etmStartWhen.checkedButton())
            app.adapterManager[0].startEtmWhen = startEtmWhen

        app.settings.save()

        if self.tab_mount.isEnabled():
            app.adapterManager[0].mountsFaker.mounts = self.newMounts
        app.applySettings.emit()
        super().accept()

    @property
    def newMounts(self):
        return list(map(lambda row: self.table_mounts.item(row, 1).text(),
                        range(self.table_mounts.rowCount())))

    @pyqtSlot()
    def setupETM(self):
        # fill values
        adapter = app.adapterManager[0]
        settings = adapter.backendSettings
        etmRunning = adapter.etmPid != 0
        if etmRunning and settings.initialized:
            self.spinBox_dSpeedLimit.setValue(settings.downloadSpeedLimit)
            self.spinBox_uSpeedLimit.setValue(settings.uploadSpeedLimit)
            self.spinBox_maxRunningTasksNum.setValue(settings.maxRunTaskNumber)

            # connect signals
            self.accepted.connect(self.saveETM)
        else:
            self.spinBox_dSpeedLimit.setEnabled(False)
            self.spinBox_uSpeedLimit.setEnabled(False)
            self.spinBox_maxRunningTasksNum.setEnabled(False)

    @pyqtSlot()
    def saveETM(self):
        adapter = app.adapterManager[0]
        adapter.do_applySettings({
            "downloadSpeedLimit": self.spinBox_dSpeedLimit.value(),
            "uploadSpeedLimit": self.spinBox_uSpeedLimit.value(),
            "maxRunTaskNumber": self.spinBox_maxRunningTasksNum.value(),
        })
コード例 #39
0
ファイル: data_check.py プロジェクト: canard0328/malss
class DataCheck(Content):

    def __init__(self, parent=None, button_func=None, params=None):
        super().__init__(parent, 'Data check', params)

        self.button_func = button_func

        path = os.path.abspath(os.path.dirname(__file__)) + '/static/'

        # nr = min(5, data.shape[0])
        nr = len(self.params.data5)

        if params.lang == 'jp':
            text = ('データの読み込み結果(先頭{n}行)を以下に示します.\n'
                    'データを正しく読み込めていることを確認してください.'.format(n=nr))
            self.set_paragraph(
                'データ読み込み結果の確認', text=text)
        else:
            text = ('First {n} rows of your data are shown below.\n'
                    'Confirm that the data was read correctly.'.format(n=nr))
            self.set_paragraph(
                'Check data', text=text)

        table = NonScrollTable(self.inner)

        table.setRowCount(nr)
        table.setColumnCount(len(self.params.columns))
        table.setHorizontalHeaderLabels(self.params.columns)

        for r in range(nr):
            for c in range(len(self.params.columns)):
                item = QTableWidgetItem(str(self.params.data5.iat[r, c]))
                item.setFlags(Qt.ItemIsEnabled)
                table.setItem(r, c, item)

        table.setNonScroll()

        self.vbox.addWidget(table)

        # Text for type checking and objective variable setting
        path1 = path + 'categorical'
        text = self.get_text(path1)
        if self.params.lang == 'en':
            self.set_paragraph(
                'Check type of variables and set objective variable',
                text=text)
        else:
            self.set_paragraph('変数タイプの確認と目的変数の設定', text=text)

        # htable = QTableWidget(self.inner)
        htable = NonScrollTable(self.inner)

        htable.setRowCount(len(self.params.columns))
        htable.setColumnCount(4)
        htable.setHorizontalHeaderLabels(
            ['columns', 'categorical', 'numerical', 'target'])

        self.lst_cat = []
        self.lst_num = []
        self.lst_obj = []
        self.obj_group = QButtonGroup(self.inner)
        for c in range(len(self.params.columns)):
            # col 1
            item = QTableWidgetItem(self.params.columns[c])
            item.setFlags(Qt.ItemIsEnabled)
            htable.setItem(c, 0, item)

            group = QButtonGroup(self.inner)

            # col 2
            htable.setCellWidget(
                c, 1,
                self.__make_cell(c, 'cat', self.params.col_types[c],
                                 self.params.col_types_def[c]))
            group.addButton(self.lst_cat[-1])

            # col 3
            htable.setCellWidget(
                c, 2,
                self.__make_cell(c, 'num', self.params.col_types[c],
                                 self.params.col_types_def[c]))
            group.addButton(self.lst_num[-1])

            # col 4
            htable.setCellWidget(
                c, 3,
                self.__make_cell(c, 'obj', self.params.col_types[c],
                                 self.params.col_types_def[c]))
            self.obj_group.addButton(self.lst_obj[-1])
            self.obj_group.setId(self.lst_obj[-1], c)

        htable.setNonScroll()

        self.vbox.addWidget(htable)

        if self.params.lang == 'jp':
            self.txt_cnf = ('<font color="red">目的変数を1つ選択し,'
                    'targetの列にチェックをいれてください。')
            if self.params.task.lower() == 'classification':
                self.txt_cnf += '<br>目的変数はカテゴリ変数である必要があります。</font>'
            else:
                self.txt_cnf += '<br>目的変数は量的変数である必要があります。</font>'
        else:
            self.txt_cnf = ('<font color="red">Select one variable as target variable,'
                            'then set the column of "target" of the variable checked.')
            if self.params.task.lower() == 'classification':
                self.txt_cnf += '<br>Target variable must be a categorical variable.</font>'
            else:
                self.txt_cnf += '<br>Target variable must be a numerical variable.</font>'
        self.lbl_cnf = QLabel(self.txt_cnf, self.inner)

        self.vbox.addWidget(self.lbl_cnf)

        self.vbox.addStretch(1)

        self.btn = QPushButton('Next', self.inner)
        self.btn.setStyleSheet('QPushButton{font: bold; font-size: 15pt; background-color: white;};')
        if self.params.lang == 'en':
            self.btn.clicked.connect(lambda: self.button_func('Overfitting'))
        else:
            self.btn.clicked.connect(lambda: self.button_func('過学習'))
        if self.obj_group.checkedButton() is None:
            self.btn.setEnabled(False)
        else:
            self.btn.setEnabled(True)

        self.vbox.addWidget(self.btn)

    def __make_cell(self, c, name, col_type, col_type_def):
        cell = QWidget(self.inner)
        rbtn = QRadioButton('', cell)
        rbtn.toggled.connect(lambda: self.rbtn_clicked(name + '_' + str(c)))
        hbl = QHBoxLayout(cell)
        hbl.addWidget(rbtn)
        hbl.setContentsMargins(0, 0, 0, 0)
        hbl.setAlignment(Qt.AlignCenter)
        cell.setLayout(hbl)
        if name == 'cat':
            if col_type == 'object':
                rbtn.setChecked(True)
            self.lst_cat.append(rbtn)
        elif name == 'num':
            if col_type != 'object':
                rbtn.setChecked(True)
            if col_type_def == 'object':
                rbtn.setEnabled(False)
            self.lst_num.append(rbtn)
        elif name == 'obj':
            if col_type == 'object' and self.params.task == 'Regression':
                rbtn.setEnabled(False)
            elif col_type != 'object' and self.params.task == 'Classification':
                rbtn.setEnabled(False)
            if self.params.columns[c] == self.params.objective:
                rbtn.setChecked(True)
            self.lst_obj.append(rbtn)

        return cell

    def rbtn_clicked(self, text):
        name, idx = text.split('_')
        idx = int(idx)
        if len(self.lst_obj) <= idx:
            return

        if self.lst_num[idx].isChecked():
            if self.params.task == 'Classification':
                self.obj_group.setExclusive(False)
                self.lst_obj[idx].setChecked(False)
                self.obj_group.setExclusive(True)
                self.lst_obj[idx].setEnabled(False)
            elif self.params.task == 'Regression':
                self.lst_obj[idx].setEnabled(True)

            self.params.col_types[idx] = self.params.col_types_def[idx]
        elif self.lst_cat[idx].isChecked():
            if self.params.task == 'Classification':
                self.lst_obj[idx].setEnabled(True)
            elif self.params.task == 'Regression':
                self.obj_group.setExclusive(False)
                self.lst_obj[idx].setChecked(False)
                self.obj_group.setExclusive(True)
                self.lst_obj[idx].setEnabled(False)

            self.params.col_types[idx] = 'object'

        if self.obj_group.checkedButton() is None:
            self.params.objective = None
            self.lbl_cnf.setText(self.txt_cnf)
            self.btn.setEnabled(False)
        else:
            self.params.objective =\
                self.params.columns[self.obj_group.checkedId()]
            self.lbl_cnf.setText('<br>')
            self.btn.setEnabled(True)

        self.params.col_types_changed = True
コード例 #40
0
class SettingsDialog(QDialog, Ui_Dialog):
    def __init__(self, parent):
        super().__init__(parent)
        self.setAttribute(Qt.WA_DeleteOnClose)

        self.setupUi(self)

        self.lineEdit_loginUsername.setText(
            app.settings.get("account", "username"))
        self.lineEdit_loginPassword.setText(
            app.settings.get("account", "password"))
        self.checkBox_autoLogin.setChecked(
            app.settings.getbool("account", "autologin"))
        self.checkBox_autoStartFrontend.setChecked(app.autoStart)

        # Xwared Management
        managedBySystemd = app.xwaredpy.managedBySystemd
        managedByUpstart = app.xwaredpy.managedByUpstart
        managedByAutostart = app.xwaredpy.managedByAutostart

        self.radio_managedBySystemd.setChecked(managedBySystemd)
        self.radio_managedByUpstart.setChecked(managedByUpstart)
        self.radio_managedByAutostart.setChecked(managedByAutostart)
        self.radio_managedByNothing.setChecked(not (
            managedBySystemd or managedByUpstart or managedByAutostart))

        initType = getInitType()
        self.radio_managedBySystemd.setEnabled(initType == InitType.SYSTEMD)
        self.radio_managedByUpstart.setEnabled(initType == InitType.UPSTART)

        # frontend
        self.checkBox_enableDevelopersTools.setChecked(
            app.settings.getbool("frontend", "enabledeveloperstools"))
        self.checkBox_allowFlash.setChecked(
            app.settings.getbool("frontend", "allowflash"))
        self.checkBox_minimizeToSystray.setChecked(
            app.settings.getbool("frontend", "minimizetosystray"))
        self.checkBox_closeToMinimize.setChecked(
            app.settings.getbool("frontend", "closetominimize"))
        self.checkBox_popNotifications.setChecked(
            app.settings.getbool("frontend", "popnotifications"))
        self.checkBox_notifyBySound.setChecked(
            app.settings.getbool("frontend", "notifybysound"))
        self.checkBox_showMonitorWindow.setChecked(
            app.settings.getbool("frontend", "showmonitorwindow"))
        self.spinBox_monitorFullSpeed.setValue(
            app.settings.getint("frontend", "monitorfullspeed"))

        # clipboard related
        self.checkBox_watchClipboard.stateChanged.connect(
            self.slotWatchClipboardToggled)
        self.checkBox_watchClipboard.setChecked(
            app.settings.getbool("frontend", "watchclipboard"))
        self.slotWatchClipboardToggled(
            self.checkBox_watchClipboard.checkState())
        self.plaintext_watchPattern.setPlainText(
            app.settings.get("frontend", "watchpattern"))

        self.btngrp_etmStartWhen = QButtonGroup()
        self.btngrp_etmStartWhen.addButton(self.radio_backendStartWhen1, 1)
        self.btngrp_etmStartWhen.addButton(self.radio_backendStartWhen2, 2)
        self.btngrp_etmStartWhen.addButton(self.radio_backendStartWhen3, 3)

        startEtmWhen = app.xwaredpy.startEtmWhen
        if startEtmWhen:
            self.btngrp_etmStartWhen.button(startEtmWhen).setChecked(True)
        else:
            self.group_etmStartWhen.setEnabled(False)

        self.btn_addMount.clicked.connect(self.slotAddMount)
        self.btn_removeMount.clicked.connect(self.slotRemoveMount)

        # Mounts
        self.setupMounts()

        # backend setting is a different thing!
        self.setupETM()

    @pyqtSlot(int)
    def slotWatchClipboardToggled(self, state):
        self.plaintext_watchPattern.setEnabled(state)

    @pyqtSlot()
    def setupMounts(self):
        self.table_mounts.setRowCount(0)
        self.table_mounts.clearContents()

        mountsMapping = app.mountsFaker.getMountsMapping()
        for i, mount in enumerate(app.mountsFaker.mounts):
            self.table_mounts.insertRow(i)
            # drive1: the drive letter it should map to, by alphabetical order
            drive1 = app.mountsFaker.driveIndexToLetter(i)
            self.table_mounts.setItem(
                i, 0, QTableWidgetItem(drive1 + "\\TDDOWNLOAD"))

            # mounts = ['/path/to/1', 'path/to/2', ...]
            self.table_mounts.setItem(i, 1, QTableWidgetItem(mount))

            # drive2: the drive letter it actually is assigned to
            drive2 = mountsMapping.get(mount, "无")

            errors = []

            # check: mapping
            if drive1 != drive2:
                errors.append("错误:盘符映射在'{actual}',而不是'{should}'。\n"
                              "如果这是个新挂载的文件夹,请尝试稍等,或重启后端,可能会修复此问题。".format(
                                  actual=drive2, should=drive1))

            brush = QBrush()
            if errors:
                brush.setColor(Qt.red)
                errString = "\n".join(errors)
            else:
                brush.setColor(Qt.darkGreen)
                errString = "正常"
            errWidget = QTableWidgetItem(errString)
            errWidget.setForeground(brush)

            self.table_mounts.setItem(i, 2, errWidget)
            del brush, errWidget

        self.table_mounts.resizeColumnsToContents()

    @pyqtSlot()
    def slotAddMount(self):
        fileDialog = QFileDialog(self, Qt.Dialog)
        fileDialog.setFileMode(QFileDialog.Directory)
        fileDialog.setOption(QFileDialog.ShowDirsOnly, True)
        fileDialog.setViewMode(QFileDialog.List)
        fileDialog.setDirectory(os.environ["HOME"])
        if fileDialog.exec():
            selected = fileDialog.selectedFiles()[0]
            if selected in self.newMounts:
                return
            row = self.table_mounts.rowCount()
            self.table_mounts.insertRow(row)
            self.table_mounts.setItem(
                row, 0,
                QTableWidgetItem(
                    app.mountsFaker.driveIndexToLetter(row) + "\\TDDOWNLOAD"))
            self.table_mounts.setItem(row, 1, QTableWidgetItem(selected))
            self.table_mounts.setItem(row, 2, QTableWidgetItem("新近添加"))

    @pyqtSlot()
    def slotRemoveMount(self):
        row = self.table_mounts.currentRow()
        self.table_mounts.removeRow(row)

    @pyqtSlot()
    def accept(self):
        app.settings.set("account", "username",
                         self.lineEdit_loginUsername.text())
        app.settings.set("account", "password",
                         self.lineEdit_loginPassword.text())
        app.settings.setbool("account", "autologin",
                             self.checkBox_autoLogin.isChecked())

        app.autoStart = self.checkBox_autoStartFrontend.isChecked()

        app.xwaredpy.managedBySystemd = self.radio_managedBySystemd.isChecked()
        app.xwaredpy.managedByUpstart = self.radio_managedByUpstart.isChecked()
        app.xwaredpy.managedByAutostart = self.radio_managedByAutostart.isChecked(
        )

        app.settings.setbool("frontend", "enabledeveloperstools",
                             self.checkBox_enableDevelopersTools.isChecked())
        app.settings.setbool("frontend", "allowflash",
                             self.checkBox_allowFlash.isChecked())
        app.settings.setbool("frontend", "minimizetosystray",
                             self.checkBox_minimizeToSystray.isChecked())

        # A possible Qt bug
        # https://bugreports.qt-project.org/browse/QTBUG-37695
        app.settings.setbool("frontend", "closetominimize",
                             self.checkBox_closeToMinimize.isChecked())
        app.settings.setbool("frontend", "popnotifications",
                             self.checkBox_popNotifications.isChecked())
        app.settings.setbool("frontend", "notifybysound",
                             self.checkBox_notifyBySound.isChecked())

        app.settings.setbool("frontend", "showmonitorwindow",
                             self.checkBox_showMonitorWindow.isChecked())
        app.settings.setint("frontend", "monitorfullspeed",
                            self.spinBox_monitorFullSpeed.value())
        app.settings.setbool("frontend", "watchclipboard",
                             self.checkBox_watchClipboard.isChecked())
        app.settings.set("frontend", "watchpattern",
                         self.plaintext_watchPattern.toPlainText())

        if self.group_etmStartWhen.isEnabled():
            startEtmWhen = self.btngrp_etmStartWhen.id(
                self.btngrp_etmStartWhen.checkedButton())
            try:
                app.xwaredpy.startEtmWhen = startEtmWhen
            except InvalidSocket:
                QMessageBox.warning(
                    None, "Xware Desktop",
                    "选项未能成功设置:{}。".format(self.group_etmStartWhen.title()),
                    QMessageBox.Ok, QMessageBox.Ok)

        app.settings.save()

        app.mountsFaker.mounts = self.newMounts
        app.settings.applySettings.emit()
        super().accept()

    @property
    def newMounts(self):
        return list(
            map(lambda row: self.table_mounts.item(row, 1).text(),
                range(self.table_mounts.rowCount())))

    @pyqtSlot()
    def setupETM(self):
        # fill values
        lcPort = app.xwaredpy.lcPort
        self.lineEdit_lcport.setText(str(lcPort) if lcPort else "不可用")

        etmSettings = app.etmpy.getSettings()
        if etmSettings:
            self.spinBox_dSpeedLimit.setValue(etmSettings.dLimit)
            self.spinBox_uSpeedLimit.setValue(etmSettings.uLimit)
            self.spinBox_maxRunningTasksNum.setValue(
                etmSettings.maxRunningTasksNum)

            # connect signals
            self.accepted.connect(self.saveETM)
        else:
            self.spinBox_dSpeedLimit.setEnabled(False)
            self.spinBox_uSpeedLimit.setEnabled(False)
            self.spinBox_maxRunningTasksNum.setEnabled(False)

    @pyqtSlot()
    def saveETM(self):
        newsettings = EtmSetting(
            dLimit=self.spinBox_dSpeedLimit.value(),
            uLimit=self.spinBox_uSpeedLimit.value(),
            maxRunningTasksNum=self.spinBox_maxRunningTasksNum.value())

        app.etmpy.saveSettings(newsettings)
コード例 #41
0
class FileDialogWizardDialog(QDialog, Ui_FileDialogWizardDialog):
    """
    Class implementing the color dialog wizard dialog.
    
    It displays a dialog for entering the parameters for the
    E5FileDialog or QFileDialog code generator.
    """
    def __init__(self, dialogVariant, parent=None):
        """
        Constructor
        
        @param dialogVariant variant of the file dialog to be generated
            (-1 = E5FileDialog, 0 = unknown, 4 = PyQt4, 5 = PyQt5)
        @type int
        @param parent parent widget
        @type QWidget
        """
        super(FileDialogWizardDialog, self).__init__(parent)
        self.setupUi(self)

        self.eStartWithCompleter = E5FileCompleter(self.eStartWith)
        self.eWorkDirCompleter = E5DirCompleter(self.eWorkDir)

        self.__dialogVariant = dialogVariant

        self.__typeButtonsGroup = QButtonGroup(self)
        self.__typeButtonsGroup.setExclusive(True)
        self.__typeButtonsGroup.addButton(self.rOpenFile, 1)
        self.__typeButtonsGroup.addButton(self.rOpenFiles, 2)
        self.__typeButtonsGroup.addButton(self.rSaveFile, 3)
        self.__typeButtonsGroup.addButton(self.rfOpenFile, 11)
        self.__typeButtonsGroup.addButton(self.rfOpenFiles, 12)
        self.__typeButtonsGroup.addButton(self.rfSaveFile, 13)
        self.__typeButtonsGroup.addButton(self.rOpenFileUrl, 21)
        self.__typeButtonsGroup.addButton(self.rOpenFileUrls, 22)
        self.__typeButtonsGroup.addButton(self.rSaveFileUrl, 23)
        self.__typeButtonsGroup.addButton(self.rDirectory, 30)
        self.__typeButtonsGroup.addButton(self.rDirectoryUrl, 31)
        self.__typeButtonsGroup.buttonClicked[int].connect(
            self.__toggleInitialFilterAndResult)
        self.__toggleInitialFilterAndResult(1)

        self.__dialogVariant = dialogVariant
        if self.__dialogVariant == -1:
            self.pyqtComboBox.addItems(["eric"])
            self.setWindowTitle(self.tr("E5FileDialog Wizard"))
            self.pyqtComboBox.setCurrentIndex(0)
            self.pyqtComboBox.setEnabled(False)
        else:
            self.pyqtComboBox.addItems(["PyQt5", "PyQt4"])
            self.setWindowTitle(self.tr("QFileDialog Wizard"))
            if self.__dialogVariant == 5:
                self.pyqtComboBox.setCurrentIndex(0)
            elif self.__dialogVariant == 4:
                self.pyqtComboBox.setCurrentIndex(1)
            else:
                self.pyqtComboBox.setCurrentIndex(0)

        self.rSaveFile.toggled[bool].connect(self.__toggleConfirmCheckBox)
        self.rfSaveFile.toggled[bool].connect(self.__toggleConfirmCheckBox)
        self.rSaveFileUrl.toggled[bool].connect(self.__toggleConfirmCheckBox)
        self.rDirectory.toggled[bool].connect(self.__toggleGroupsAndTest)
        self.rDirectoryUrl.toggled[bool].connect(self.__toggleGroupsAndTest)
        self.cStartWith.toggled[bool].connect(self.__toggleGroupsAndTest)
        self.cWorkDir.toggled[bool].connect(self.__toggleGroupsAndTest)
        self.cFilters.toggled[bool].connect(self.__toggleGroupsAndTest)

        self.bTest = self.buttonBox.addButton(self.tr("Test"),
                                              QDialogButtonBox.ActionRole)

        msh = self.minimumSizeHint()
        self.resize(max(self.width(), msh.width()), msh.height())

    def __adjustOptions(self, options):
        """
        Private method to adjust the file dialog options.
        
        @param options file dialog options (QFileDialog.Options)
        @return modified options (QFileDialog.Options)
        """
        if Globals.isLinuxPlatform():
            options |= QFileDialog.DontUseNativeDialog
        return options

    @pyqtSlot(str)
    def on_pyqtComboBox_currentIndexChanged(self, txt):
        """
        Private slot to setup the dialog for the selected PyQt variant.
        
        @param txt text of the selected combo box entry (string)
        """
        self.rfOpenFile.setEnabled(txt in ("eric", "PyQt4"))
        self.rfOpenFiles.setEnabled(txt in ("eric", "PyQt4"))
        self.rfSaveFile.setEnabled(txt in ("eric", "PyQt4"))

        self.rOpenFileUrl.setEnabled(txt == "PyQt5")
        self.rOpenFileUrls.setEnabled(txt == "PyQt5")
        self.rSaveFileUrl.setEnabled(txt == "PyQt5")
        self.rDirectoryUrl.setEnabled(txt == "PyQt5")

        if txt == "PyQt5":
            if self.rfOpenFile.isChecked():
                self.rOpenFile.setChecked(True)
            elif self.rfOpenFiles.isChecked():
                self.rOpenFiles.setChecked(True)
            elif self.rfSaveFile.isChecked():
                self.rSaveFile.setChecked(True)
        else:
            if self.rOpenFileUrl.isChecked():
                self.rOpenFile.setChecked(True)
            if self.rOpenFileUrls.isChecked():
                self.rOpenFiles.setChecked(True)
            if self.rSaveFileUrl.isChecked():
                self.rSaveFile.setChecked(True)
            if self.rDirectoryUrl.isChecked():
                self.rDirectory.setChecked(True)

        if txt == "eric":
            self.__dialogVariant = -1
        elif txt == "PyQt5":
            self.__dialogVariant = 5
        elif txt == "PyQt4":
            self.__dialogVariant = 4
        else:
            # default is PyQt5
            self.__dialogVariant = 5

        self.__toggleInitialFilterAndResult(
            self.__typeButtonsGroup.checkedId())

    def on_buttonBox_clicked(self, button):
        """
        Private slot called by a button of the button box clicked.
        
        @param button button that was clicked (QAbstractButton)
        """
        if button == self.bTest:
            self.on_bTest_clicked()

    @pyqtSlot()
    def on_bTest_clicked(self):
        """
        Private method to test the selected options.
        """
        if self.rOpenFile.isChecked() or self.rfOpenFile.isChecked():
            if not self.cSymlinks.isChecked():
                options = QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            else:
                options = QFileDialog.Options()
            options = self.__adjustOptions(options)
            QFileDialog.getOpenFileName(None, self.eCaption.text(),
                                        self.eStartWith.text(),
                                        self.eFilters.text(),
                                        self.eInitialFilter.text(), options)
        elif self.rOpenFileUrl.isChecked():
            if not self.cSymlinks.isChecked():
                options = QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            else:
                options = QFileDialog.Options()
            options = self.__adjustOptions(options)
            try:
                QFileDialog.getOpenFileUrl(None, self.eCaption.text(),
                                           QUrl(self.eStartWith.text()),
                                           self.eFilters.text(),
                                           self.eInitialFilter.text(), options,
                                           self.schemesEdit.text().split())
            except TypeError:
                # PyQt5 < 5.13.0 contains an error
                QFileDialog.getOpenFileUrl(None, self.eCaption.text(),
                                           self.eStartWith.text(),
                                           self.eFilters.text(),
                                           self.eInitialFilter.text(), options,
                                           self.schemesEdit.text().split())
        elif self.rOpenFiles.isChecked() or self.rfOpenFiles.isChecked():
            if not self.cSymlinks.isChecked():
                options = QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            else:
                options = QFileDialog.Options()
            options = self.__adjustOptions(options)
            QFileDialog.getOpenFileNames(None, self.eCaption.text(),
                                         self.eStartWith.text(),
                                         self.eFilters.text(),
                                         self.eInitialFilter.text(), options)
        elif self.rOpenFileUrls.isChecked():
            if not self.cSymlinks.isChecked():
                options = QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            else:
                options = QFileDialog.Options()
            options = self.__adjustOptions(options)
            try:
                QFileDialog.getOpenFileUrls(None, self.eCaption.text(),
                                            QUrl(self.eStartWith.text()),
                                            self.eFilters.text(),
                                            self.eInitialFilter.text(),
                                            options,
                                            self.schemesEdit.text().split())
            except TypeError:
                # PyQt5 < 5.13.0 contains an error
                QFileDialog.getOpenFileUrls(None, self.eCaption.text(),
                                            self.eStartWith.text(),
                                            self.eFilters.text(),
                                            self.eInitialFilter.text(),
                                            options,
                                            self.schemesEdit.text().split())
        elif self.rSaveFile.isChecked() or self.rfSaveFile.isChecked():
            if not self.cSymlinks.isChecked():
                options = QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            else:
                options = QFileDialog.Options()
            options = self.__adjustOptions(options)
            QFileDialog.getSaveFileName(None, self.eCaption.text(),
                                        self.eStartWith.text(),
                                        self.eFilters.text(),
                                        self.eInitialFilter.text(), options)
        elif self.rSaveFileUrl.isChecked():
            if not self.cSymlinks.isChecked():
                options = QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            else:
                options = QFileDialog.Options()
            options = self.__adjustOptions(options)
            try:
                QFileDialog.getSaveFileUrl(None, self.eCaption.text(),
                                           QUrl(self.eStartWith.text()),
                                           self.eFilters.text(),
                                           self.eInitialFilter.text(), options,
                                           self.schemesEdit.text().split())
            except TypeError:
                # PyQt5 < 5.13.0 contains an error
                QFileDialog.getSaveFileUrl(None, self.eCaption.text(),
                                           self.eStartWith.text(),
                                           self.eFilters.text(),
                                           self.eInitialFilter.text(), options,
                                           self.schemesEdit.text().split())
        elif self.rDirectory.isChecked():
            options = QFileDialog.Options()
            if not self.cSymlinks.isChecked():
                options |= QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            if self.cDirOnly.isChecked():
                options |= QFileDialog.Options(QFileDialog.ShowDirsOnly)
            else:
                options |= QFileDialog.Options(QFileDialog.Option(0))
            options = self.__adjustOptions(options)
            QFileDialog.getExistingDirectory(None, self.eCaption.text(),
                                             self.eWorkDir.text(), options)
        elif self.rDirectoryUrl.isChecked():
            options = QFileDialog.Options()
            if not self.cSymlinks.isChecked():
                options |= QFileDialog.Options(QFileDialog.DontResolveSymlinks)
            if self.cDirOnly.isChecked():
                options |= QFileDialog.Options(QFileDialog.ShowDirsOnly)
            else:
                options |= QFileDialog.Options(QFileDialog.Option(0))
            options = self.__adjustOptions(options)
            try:
                QFileDialog.getExistingDirectoryUrl(
                    None, self.eCaption.text(), QUrl(self.eWorkDir.text()),
                    options,
                    self.schemesEdit.text().split())
            except TypeError:
                # PyQt5 < 5.13.0 contains an error
                QFileDialog.getExistingDirectoryUrl(
                    None, self.eCaption.text(), self.eWorkDir.text(), options,
                    self.schemesEdit.text().split())

    def __toggleConfirmCheckBox(self):
        """
        Private slot to enable/disable the confirmation check box.
        """
        self.cConfirmOverwrite.setEnabled(self.rSaveFile.isChecked()
                                          or self.rfSaveFile.isChecked()
                                          or self.rSaveFileUrl.isChecked())

    def __toggleGroupsAndTest(self):
        """
        Private slot to enable/disable certain groups and the test button.
        """
        if self.rDirectory.isChecked() or self.rDirectoryUrl.isChecked():
            self.filePropertiesGroup.setEnabled(False)
            self.dirPropertiesGroup.setEnabled(True)
            self.bTest.setDisabled(self.cWorkDir.isChecked())
        else:
            self.filePropertiesGroup.setEnabled(True)
            self.dirPropertiesGroup.setEnabled(False)
            self.bTest.setDisabled(self.cStartWith.isChecked()
                                   or self.cFilters.isChecked())

    def __toggleInitialFilterAndResult(self, checkedId):
        """
        Private slot to enable/disable the initial filter elements and the
        results entries.
        
        @param checkedId id of the clicked button (integer)
        """
        enable = (
            (self.__dialogVariant in (-1, 4) and checkedId in [11, 12, 13]) or
            (self.__dialogVariant == 5 and checkedId in [1, 2, 3, 21, 22, 23]))

        self.lInitialFilter.setEnabled(enable)
        self.eInitialFilter.setEnabled(enable)
        self.cInitialFilter.setEnabled(enable)

        self.lFilterVariable.setEnabled(enable)
        self.eFilterVariable.setEnabled(enable)

        self.urlPropertiesGroup.setEnabled(checkedId in (21, 22, 23, 31))

    def getCode(self, indLevel, indString):
        """
        Public method to get the source code for Qt4 and Qt5.
        
        @param indLevel indentation level (int)
        @param indString string used for indentation (space or tab) (string)
        @return generated code (string)
        """
        # calculate our indentation level and the indentation string
        il = indLevel + 1
        istring = il * indString
        estring = os.linesep + indLevel * indString

        # now generate the code
        if self.parentSelf.isChecked():
            parent = "self"
        elif self.parentNone.isChecked():
            parent = "None"
        elif self.parentOther.isChecked():
            parent = self.parentEdit.text()
            if parent == "":
                parent = "None"

        # prepare the result variables
        nameVariable = self.eNameVariable.text()
        if not nameVariable:
            if self.__typeButtonsGroup.checkedButton() in [
                    self.rOpenFile, self.rfOpenFile, self.rSaveFile,
                    self.rfSaveFile
            ]:
                nameVariable = "fileName"
            elif self.__typeButtonsGroup.checkedButton() in [
                    self.rOpenFiles, self.rfOpenFiles
            ]:
                nameVariable = "fileNames"
            elif self.__typeButtonsGroup.checkedButton() == self.rDirectory:
                nameVariable = "dirName"
            else:
                nameVariable = "res"
        filterVariable = self.eFilterVariable.text()
        if not filterVariable:
            if ((self.__dialogVariant in (-1, 4)
                 and self.__typeButtonsGroup.checkedButton()
                 in [self.rfOpenFile, self.rfOpenFiles, self.rfSaveFile])
                    or (self.__dialogVariant == 5
                        and self.__typeButtonsGroup.checkedButton()
                        in [self.rOpenFile, self.rOpenFiles, self.rSaveFile])):
                filterVariable = ", selectedFilter"
            else:
                filterVariable = ""
        else:
            filterVariable = ", " + filterVariable

        if self.__dialogVariant == -1:
            dialogType = "E5FileDialog"
        else:
            dialogType = "QFileDialog"

        code = '{0}{1} = {2}.'.format(nameVariable, filterVariable, dialogType)
        if (self.rOpenFile.isChecked() or self.rfOpenFile.isChecked()
                or self.rOpenFileUrl.isChecked()):
            if self.rOpenFile.isChecked():
                code += 'getOpenFileName({0}{1}'.format(os.linesep, istring)
            elif self.rOpenFileUrl.isChecked():
                code += 'getOpenFileUrl({0}{1}'.format(os.linesep, istring)
            else:
                code += 'getOpenFileNameAndFilter({0}{1}'.format(
                    os.linesep, istring)
            code += '{0},{1}{2}'.format(parent, os.linesep, istring)
            if not self.eCaption.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                code += 'self.tr("{0}"),{1}{2}'.format(self.eCaption.text(),
                                                       os.linesep, istring)
            if self.rOpenFileUrl.isChecked():
                if not self.eStartWith.text():
                    code += 'QUrl(),{0}{1}'.format(os.linesep, istring)
                else:
                    if self.cStartWith.isChecked():
                        fmt = '{0},{1}{2}'
                    else:
                        fmt = 'QUrl("{0}"),{1}{2}'
                    code += fmt.format(self.eStartWith.text(), os.linesep,
                                       istring)
            else:
                if not self.eStartWith.text():
                    code += '"",{0}{1}'.format(os.linesep, istring)
                else:
                    if self.cStartWith.isChecked():
                        fmt = '{0},{1}{2}'
                    else:
                        fmt = '"{0}",{1}{2}'
                    code += fmt.format(self.eStartWith.text(), os.linesep,
                                       istring)
            if self.eFilters.text() == "":
                code += '""'
            else:
                if self.cFilters.isChecked():
                    fmt = '{0}'
                else:
                    fmt = 'self.tr("{0}")'
                code += fmt.format(self.eFilters.text())
            if self.rfOpenFile.isChecked() or self.__dialogVariant == 5:
                if self.eInitialFilter.text() == "":
                    initialFilter = "None"
                else:
                    if self.cInitialFilter.isChecked():
                        fmt = '{0}'
                    else:
                        fmt = 'self.tr("{0}")'
                    initialFilter = fmt.format(self.eInitialFilter.text())
                code += ',{0}{1}{2}'.format(os.linesep, istring, initialFilter)
            if not self.cSymlinks.isChecked():
                code += ',{0}{1}{2}.Options({2}.DontResolveSymlinks)'.format(
                    os.linesep, istring, dialogType)
            if self.rOpenFileUrl.isChecked() and bool(self.schemesEdit.text()):
                code += ',{0}{1}{2}'.format(os.linesep, istring,
                                            self.__prepareSchemesList())
            code += '){0}'.format(estring)
        elif (self.rOpenFiles.isChecked() or self.rfOpenFiles.isChecked()
              or self.rOpenFileUrls.isChecked()):
            if self.rOpenFiles.isChecked():
                code += 'getOpenFileNames({0}{1}'.format(os.linesep, istring)
            elif self.rOpenFileUrls.isChecked():
                code += 'getOpenFileUrls({0}{1}'.format(os.linesep, istring)
            else:
                code += 'getOpenFileNamesAndFilter({0}{1}'.format(
                    os.linesep, istring)
            code += '{0},{1}{2}'.format(parent, os.linesep, istring)
            if not self.eCaption.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                code += 'self.tr("{0}"),{1}{2}'.format(self.eCaption.text(),
                                                       os.linesep, istring)
            if self.rOpenFileUrls.isChecked():
                if not self.eStartWith.text():
                    code += 'QUrl(),{0}{1}'.format(os.linesep, istring)
                else:
                    if self.cStartWith.isChecked():
                        fmt = '{0},{1}{2}'
                    else:
                        fmt = 'QUrl("{0}"),{1}{2}'
                    code += fmt.format(self.eStartWith.text(), os.linesep,
                                       istring)
            else:
                if not self.eStartWith.text():
                    code += '"",{0}{1}'.format(os.linesep, istring)
                else:
                    if self.cStartWith.isChecked():
                        fmt = '{0},{1}{2}'
                    else:
                        fmt = '"{0}",{1}{2}'
                    code += fmt.format(self.eStartWith.text(), os.linesep,
                                       istring)
            if not self.eFilters.text():
                code += '""'
            else:
                if self.cFilters.isChecked():
                    fmt = '{0}'
                else:
                    fmt = 'self.tr("{0}")'
                code += fmt.format(self.eFilters.text())
            if self.rfOpenFiles.isChecked() or self.__dialogVariant == 5:
                if self.eInitialFilter.text() == "":
                    initialFilter = "None"
                else:
                    if self.cInitialFilter.isChecked():
                        fmt = '{0}'
                    else:
                        fmt = 'self.tr("{0}")'
                    initialFilter = fmt.format(self.eInitialFilter.text())
                code += ',{0}{1}{2}'.format(os.linesep, istring, initialFilter)
            if not self.cSymlinks.isChecked():
                code += ',{0}{1}{2}.Options({2}.DontResolveSymlinks)'.format(
                    os.linesep, istring, dialogType)
            if (self.rOpenFileUrls.isChecked()
                    and bool(self.schemesEdit.text())):
                code += ',{0}{1}{2}'.format(os.linesep, istring,
                                            self.__prepareSchemesList())
            code += '){0}'.format(estring)
        elif (self.rSaveFile.isChecked() or self.rfSaveFile.isChecked()
              or self.rSaveFileUrl.isChecked()):
            if self.rSaveFile.isChecked():
                code += 'getSaveFileName({0}{1}'.format(os.linesep, istring)
            elif self.rSaveFileUrl.isChecked():
                code += 'getSaveFileUrl({0}{1}'.format(os.linesep, istring)
            else:
                code += 'getSaveFileNameAndFilter({0}{1}'.format(
                    os.linesep, istring)
            code += '{0},{1}{2}'.format(parent, os.linesep, istring)
            if not self.eCaption.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                code += 'self.tr("{0}"),{1}{2}'.format(self.eCaption.text(),
                                                       os.linesep, istring)
            if self.rSaveFileUrl.isChecked():
                if not self.eStartWith.text():
                    code += 'QUrl(),{0}{1}'.format(os.linesep, istring)
                else:
                    if self.cStartWith.isChecked():
                        fmt = '{0},{1}{2}'
                    else:
                        fmt = 'QUrl("{0}"),{1}{2}'
                    code += fmt.format(self.eStartWith.text(), os.linesep,
                                       istring)
            else:
                if not self.eStartWith.text():
                    code += '"",{0}{1}'.format(os.linesep, istring)
                else:
                    if self.cStartWith.isChecked():
                        fmt = '{0},{1}{2}'
                    else:
                        fmt = '"{0}",{1}{2}'
                    code += fmt.format(self.eStartWith.text(), os.linesep,
                                       istring)
            if not self.eFilters.text():
                code += '""'
            else:
                if self.cFilters.isChecked():
                    fmt = '{0}'
                else:
                    fmt = 'self.tr("{0}")'
                code += fmt.format(self.eFilters.text())
            if self.rfSaveFile.isChecked() or self.__dialogVariant == 5:
                if self.eInitialFilter.text() == "":
                    initialFilter = "None"
                else:
                    if self.cInitialFilter.isChecked():
                        fmt = '{0}'
                    else:
                        fmt = 'self.tr("{0}")'
                    initialFilter = fmt.format(self.eInitialFilter.text())
                code += ',{0}{1}{2}'.format(os.linesep, istring, initialFilter)
            if ((not self.cSymlinks.isChecked())
                    or (not self.cConfirmOverwrite.isChecked())):
                code += ',{0}{1}{2}.Options('.format(os.linesep, istring,
                                                     dialogType)
                if not self.cSymlinks.isChecked():
                    code += '{0}.DontResolveSymlinks'.format(dialogType)
                if ((not self.cSymlinks.isChecked())
                        and (not self.cConfirmOverwrite.isChecked())):
                    code += ' | '
                if not self.cConfirmOverwrite.isChecked():
                    code += '{0}.DontConfirmOverwrite'.format(dialogType)
                code += ')'
            if (self.rSaveFileUrl.isChecked()
                    and bool(self.schemesEdit.text())):
                code += ',{0}{1}{2}'.format(os.linesep, istring,
                                            self.__prepareSchemesList())

            code += '){0}'.format(estring)
        elif self.rDirectory.isChecked() or self.rDirectoryUrl.isChecked():
            if self.rDirectory.isChecked():
                code += 'getExistingDirectory({0}{1}'.format(
                    os.linesep, istring)
            else:
                code += 'getExistingDirectoryUrl({0}{1}'.format(
                    os.linesep, istring)
            code += '{0},{1}{2}'.format(parent, os.linesep, istring)
            if not self.eCaption.text():
                code += '"",{0}{1}'.format(os.linesep, istring)
            else:
                code += 'self.tr("{0}"),{1}{2}'.format(self.eCaption.text(),
                                                       os.linesep, istring)
            if self.rDirectoryUrl.isChecked():
                if not self.eWorkDir.text():
                    code += 'QUrl()'
                else:
                    if self.cWorkDir.isChecked():
                        fmt = '{0}'
                    else:
                        fmt = 'QUrl("{0}")'
                    code += fmt.format(self.eWorkDir.text())
            else:
                if not self.eWorkDir.text():
                    code += '""'
                else:
                    if self.cWorkDir.isChecked():
                        fmt = '{0}'
                    else:
                        fmt = '"{0}"'
                    code += fmt.format(self.eWorkDir.text())
            code += ',{0}{1}{2}.Options('.format(os.linesep, istring,
                                                 dialogType)
            if not self.cSymlinks.isChecked():
                code += '{0}.DontResolveSymlinks | '.format(dialogType)
            if self.cDirOnly.isChecked():
                code += '{0}.ShowDirsOnly'.format(dialogType)
            else:
                code += '{0}.Option(0)'.format(dialogType)
            code += ')'
            if self.rDirectoryUrl.isChecked():
                code += ',{0}{1}{2}'.format(os.linesep, istring,
                                            self.__prepareSchemesList())
            code += '){0}'.format(estring)

        return code

    def __prepareSchemesList(self):
        """
        Private method to prepare the list of supported schemes.
        
        @return string representation of the supported schemes
        @rtype str
        """
        return repr(self.schemesEdit.text().strip().split())
コード例 #42
0
ファイル: newTm.py プロジェクト: mratmartinez/Mapuche
class TARWindow(QDialog):
    def __init__(self, resource, size):
        # Load UI
        super(TARWindow, self).__init__()
        uic.loadUi(GUI_FOLDER + 'tarCreation.ui', self)
        self.resource = cv2.imread(resource)
        self.h, self.w = self.resource.shape[:2]
        self.tileSize = size
        # We'll need a temporal folder
        self.tmp_dir = tempfile.mkdtemp()
        # In order to get the tiles we'll define the size
        self.resourceView.setIconSize(QSize(size, size))
        # Defining labels
        self.comprLabel.setText('Compression:')
        c = self.getTiles(self.resource, self.h, self.w, self.tileSize)
        self.columns, self.rows = c
        self.refreshdir(self.columns, self.rows, self.tileSize)
        # Radio Buttons in a group
        self.comprGroup = QButtonGroup()
        self.comprGroup.addButton(self.tarRadio)
        self.comprGroup.addButton(self.targzRadio)
        self.comprGroup.addButton(self.tarbz2Radio)
        self.comprGroup.addButton(self.tarxzRadio)
        # We'll define a compression by default
        self.targzRadio.setChecked(True)
        # If we don't define blankTile right now it will return an error
        self.blankTile = str()
        # Signals
        self.blankButton.clicked.connect(self.setBlank)
        self.saveBox.accepted.connect(self.saveTilemap)
        self.saveBox.rejected.connect(self.cancel)

    def getTiles(self, resource, h, w, tileSize):
        # This cuts the resource and put it on the temporary folder.
        r = 0
        for i in range(0, h, tileSize):
            c = 0
            for j in range(0, w, tileSize):
                box = self.resource[i:i+tileSize, j:j+tileSize]
                nm = str(c) + '-' + str(r) + '.png'
                place = os.path.join(self.tmp_dir, nm)
                cv2.imwrite(place, box)
                c += 1
            r += 1
        return(c,r)

    def hashsum(self, path, hex=True, hash_type=hashlib.md5):
        # All this function was for deleting the repeated tiles. I won't use
        # it.
        hashinst = hash_type()
        blocksize = hashinst.block_size * 128
        with open(path, 'rb') as f:
            for chunk in iter(lambda: f.read(blocksize), b''):
                hashinst.update(chunk)
        return(hashinst.hexdigest() if hex else hashinst.digest())

    def refreshdir(self, c, r, size):
        # This loads the tilemap
        self.resourceView.setColumnCount(c)
        self.resourceView.setRowCount(r)
        for column in range(0, c):
            self.resourceView.setColumnWidth(column, size)
            for row in range(0, r):
                self.resourceView.setRowHeight(row, size)
                filename = str(column) + '-'+ str(row) + '.png'
                filedir = os.path.join(self.tmp_dir, filename)
                icon = QIcon(filedir)
                item = QTableWidgetItem(icon, None)
                self.resourceView.setItem(row, column, item)

    @pyqtSlot()
    def setBlank(self):
        # Set the blank tile. When you load a new map, the tilemap will give a
        # default tile for the blank map.
        r = str(self.resourceView.currentRow())
        c = str(self.resourceView.currentColumn())
        file = c + '-' + r
        pixmap = QPixmap(os.path.join(self.tmp_dir, file + '.png'))
        pixmapitem = QGraphicsPixmapItem(pixmap)
        scene = QGraphicsScene()
        scene.addItem(pixmapitem)
        self.tileView.setScene(scene)
        self.blankTile = file

    def saveTilemap(self):
        # We have to define c and r from self
        # Because PyQt Signals are shitty
        # So I'm using a singals style that can't pass arguments
        c = self.columns
        r = self.rows
        # We'll write the metadata
        fileplace = os.path.join(self.tmp_dir, 'metafile.ini')
        # You may be thinking:
        # "Why did you write this string on such a shitty way?"
        # And the answer is: "NONE OF YOUR F*****G BUSINESS
        METADATA = (
                    "[META]\n"
                    "COLUMNS = {0}\n"
                    "ROWS = {1}\n"
                    "BLANKTILE = {2}\n"
                    "TILESIZE = {3}\n"
                    ).format(c, r, self.blankTile, self.tileSize)
        with open(fileplace, 'w') as metafile:
            metafile.write(METADATA)
        filters = 'TAR (*.tar, *.tar.gz, *.tar.xz, *.tar.bz2)'
        rawSuffix = self.comprGroup.checkedButton().text()
        suffix = rawSuffix.split(' ')[1][1:-1]
        sufParts = suffix.split('.')
        savefile = QFileDialog().getSaveFileName(filter = filters)
        if len(sufParts) > 2:
            openAs = 'w:{0}'.format(sufParts[-1])
        else:
            openAs = 'w'
        with tarfile.open(savefile[0] + suffix, openAs) as tar:
            for i in os.listdir(self.tmp_dir):
                tar.add(os.path.join(self.tmp_dir, i), arcname = i)
                os.remove(os.path.join(self.tmp_dir, i))
        os.removedirs(self.tmp_dir)
        self.close()

    def cancel(self):
        self.close()
コード例 #43
0
ファイル: dmsUnitWgt.py プロジェクト: Mr-WangJin/dms
class DMSUnitWgt(QWidget):
    unitTabDataWdg = None
    decorateTypeWgt: DMSDecorateTypeWgt = None
    decorateDataWgt: DMSDecorateDataWgt = None

    currentBuilding: DB_Building = None
    unitDict: dict = {}

    def __init__(self, parent=None):
        super(DMSUnitWgt, self).__init__(parent)

        self.initUI()
        self.initTrigger()

    def initUI(self):
        self.ui = Ui_UnitWgt()
        self.ui.setupUi(self)
        self.ui.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.setContentsMargins(0, 0, 0, 0)
        self.decorateTypeWgt = DMSDecorateTypeWgt(self)
        self.decorateDataWgt = DMSDecorateDataWgt(self)
        count = self.ui.verticalLayout.count()
        self.ui.verticalLayout.addWidget(self.decorateDataWgt)
        self.groupButton = QButtonGroup(self)

    def unitChanged(self):
        # self.decorateDataWgt.
        pass

    def initTrigger(self):
        self.ui.pBtnAddUnit.clicked.connect(self.addUnit)
        self.ui.pBtnDleleteUnit.clicked.connect(self.deleteUnit)
        self.groupButton.buttonClicked.connect(self.unitChanged)

    def setCurrentBuilding(self, building_id):
        if self.currentBuilding and self.currentBuilding.id == building_id:
            return
        self.currentBuilding = None
        building: DB_Building = dmsDatabase().getRecordById(
            DB_Building, building_id)
        if building is None:
            self.updateUiEnabled()
            return
        self.currentBuilding = building
        self.clearUnit()
        self.loadUnit()
        self.updateUiEnabled()

    def getCurrentUnit(self):
        pass

    def addUnit(self):
        unit = newUnit(self.currentBuilding)
        unit_tool_btn = self.createToolButton(unit)
        unit_tool_btn.setChecked(True)

    def deleteUnit(self):
        _id = self.groupButton.checkedId()
        _button = self.groupButton.checkedButton()

        self.groupButton.removeButton(_button)
        delete(_button)
        customDeleteRecord(DB_Building_Unit, _id)
        self.updateUiEnabled()

    def createToolButton(self, business_unit) -> QToolButton:
        if business_unit is None:
            return
        unit_tool_btn = QToolButton()
        unit_tool_btn.setText(business_unit.name)
        unit_tool_btn.setCheckable(True)
        count = self.ui.horizontalLayout.count()
        self.ui.horizontalLayout.insertWidget(count - 3, unit_tool_btn)
        self.unitDict[business_unit.id] = unit_tool_btn
        self.groupButton.addButton(unit_tool_btn, business_unit.id)

        return unit_tool_btn

    def loadUnit(self):
        if self.currentBuilding is None:
            return
        unit_list = dmsDatabase().getTableList(
            DB_Building_Unit, "building_id = " + str(self.currentBuilding.id))
        if len(unit_list) == 0:
            return
        first_item: QToolButton = None
        for item in unit_list:
            unit_tool_btn = self.createToolButton(item)
            if first_item is None:
                first_item = unit_tool_btn
        first_item.setChecked(True)

    def clearUnit(self):
        if len(self.unitDict) == 0:
            return
        tool_btn_list = self.unitDict.values()

        for var in self.groupButton.buttons():
            self.groupButton.removeButton(var)

        for item in tool_btn_list:
            self.ui.horizontalLayout.removeWidget(item)
            delete(item)
        self.unitDict.clear()

    def updateUnitDate(self, currentBuildingID, previousBuildingID=None):
        """
        槽函数
        :param currentBuildingID:
        :param previousBuildingID:
        :return:
        """
        pass
        # # Todo 待梳理嵌套关系
        # print(currentBuildingID, previousBuildingID)
        # dateTableWidget = self.unitTabWdg.currentWidget()
        # dateTableWidget = DMSDecorateDataWgt()
        # # decorateTaskList: List[DB_Decorate_Type] = dmsProject().getTableList(DB_Decorate_Type, filter_str=currentBuildingID).orderBy(
        # #     DB_Decorate_Type.order)
        # decorateTaskList: List[DB_Decorate_Type] = dmsDatabase().getTableList(DB_Decorate_Type)
        # tableHeaderList = [task.name for task in decorateTaskList]
        # dateTableWidget.setHorizontalHeaderLabels(tableHeaderList)

    def updateUiEnabled(self):
        enabled = False
        if len(self.unitDict) == 0:
            enabled = False
        else:
            enabled = True

        self.ui.pBtnDleleteUnit.setEnabled(enabled)
コード例 #44
0
class DyStockSelectBBandsStatsDlg(QDialog):

    def __init__(self, data, parent=None):
        super(DyStockSelectBBandsStatsDlg, self).__init__(parent)

        self._data = data

        self._initUi()

        self._stocksButtonGroup.buttonClicked.connect(self._radioButtonClicked)

    def _initUi(self):
        self.setWindowTitle('股票代码')
 
        # 控件
        startDateLable = QLabel('开始日期')
        self._startDateLineEdit = QLineEdit(datetime.now().strftime("%Y-%m-%d"))

        endDateLable = QLabel('结束日期')
        self._endDateLineEdit = QLineEdit(datetime.now().strftime("%Y-%m-%d"))

        # 指数和股票代码
        shIndexRadioButton = QRadioButton('上证指数'); shIndexRadioButton.setChecked(True)
        szIndexRadioButton = QRadioButton('深证成指')
        cybIndexRadioButton = QRadioButton('创业板指')
        zxbIndexRadioButton = QRadioButton('中小板指')

        stockRadioButton = QRadioButton('股票代码')
        self._stockLineEdit = QLineEdit(); self._stockLineEdit.setEnabled(False)

        # 添加到QButtonGroup
        self._stocksButtonGroup = QButtonGroup()
        self._stocksButtonGroup.addButton(shIndexRadioButton, 1); 
        self._stocksButtonGroup.addButton(szIndexRadioButton, 2)
        self._stocksButtonGroup.addButton(cybIndexRadioButton, 3)
        self._stocksButtonGroup.addButton(zxbIndexRadioButton, 4)
        self._stocksButtonGroup.addButton(stockRadioButton, 5)

        # 布林周期
        bBands1PeriodLabel = QLabel('布林1周期')
        self._bBands1PeriodLineEdit = QLineEdit('10')
        bBands2PeriodLabel = QLabel('布林2周期')
        self._bBands2PeriodLineEdit = QLineEdit('20')

        cancelPushButton = QPushButton('Cancel')
        okPushButton = QPushButton('OK')
        cancelPushButton.clicked.connect(self._cancel)
        okPushButton.clicked.connect(self._ok)

        # 布局
        grid = QGridLayout()
        grid.setSpacing(10)
 
        grid.addWidget(startDateLable, 0, 0)
        grid.addWidget(self._startDateLineEdit, 1, 0)

        grid.addWidget(endDateLable, 0, 1)
        grid.addWidget(self._endDateLineEdit, 1, 1)

        grid.addWidget(shIndexRadioButton, 2, 0)
        grid.addWidget(szIndexRadioButton, 2, 1)
        grid.addWidget(cybIndexRadioButton, 3, 0)
        grid.addWidget(zxbIndexRadioButton, 3, 1)
        grid.addWidget(stockRadioButton, 4, 0)
        grid.addWidget(self._stockLineEdit, 4, 1)

        grid.addWidget(bBands1PeriodLabel, 5, 0)
        grid.addWidget(self._bBands1PeriodLineEdit, 5, 1)
        grid.addWidget(bBands2PeriodLabel, 6, 0)
        grid.addWidget(self._bBands2PeriodLineEdit, 6, 1)

        grid.addWidget(okPushButton, 7, 1)
        grid.addWidget(cancelPushButton, 7, 0)
 
 
        self.setLayout(grid)

    def _radioButtonClicked(self, button):
        if button.text() == '股票代码':
            self._stockLineEdit.setEnabled(True)
        else:
            self._stockLineEdit.setEnabled(False)

    def _getStockCode(self):
        checkedButton = self._stocksButtonGroup.checkedButton()
        text = checkedButton.text()

        if text == '股票代码':
            return DyStockCommon.getDyStockCode(self._stockLineEdit.text())

        return DyStockCommon.getIndexByName(text)

    def _ok(self):
        self._data['startDate'] = self._startDateLineEdit.text()
        self._data['endDate'] = self._endDateLineEdit.text()
        self._data['code'] = self._getStockCode()
        self._data['bBands1Period'] = int(self._bBands1PeriodLineEdit.text())
        self._data['bBands2Period'] = int(self._bBands2PeriodLineEdit.text())

        self.accept()

    def _cancel(self):
        self.reject()