Exemplo n.º 1
0
class project:
    projectName = ""
    paratextFolder = ""
    audioFolderName = ""
    textFont = ""
    textSize = 0
    fileType = ""
    bBook = False
    currentBook = 1
    currentChapter = 1

    def project(self):
        pass

    def readProject(self, currentProject):
        try:
            print("Reading project " + currentProject)
            refMatcher = re.compile("^CurrentReference=([^ ]+) (\\d+)$")
            for line in open(currentProject + '.prj'):
                line = line.strip()
                mtch = refMatcher.match(line)
                if mtch:
                    self.currentBook = mtch.group(1)
                    # bk = mtch.group(1)
                    # for i, b in enumerate(data.data.book):
                    #    if b.equals(bk):
                    #         self.currentBook = i
                    #         break
                    self.currentChapter = mtch.group(2)
                elif line.startswith("ProjectName="):
                    self.projectName = line[len("ProjectName="):]
                elif line.startswith("VersionName="):
                    self.projectName = line[len("VersionName="):]
                elif line.startswith("ParatextFolder="):
                    self.paratextFolder = line[len("ParatextFolder="):]
                elif line.startswith("SoundFolder="):
                    self.audioFolderName = line[len("SoundFolder="):]
                elif line.startswith("AudioFolder="):
                    self.audioFolderName = line[len("AudioFolder="):]
                elif line.startswith("Font="):
                    self.textFont = line[len("Font="):]
                elif line.startswith("FontSize="):
                    self.textSize = int(line[len("FontSize=")])
                elif line.startswith("FileType="):
                    self.fileType = line[len("FileType="):]
                    self.bBook = self.fileType == "Book"
                else:
                    print("Unknown project option: ", line)
        except FileNotFoundError:
            print("Failed to open project file")
            self.writeProject(currentProject)
            pass
        except Exception as detail:
            print("Exception reading project file: ", detail)
            pass

    def writeProject(self, currentProject):
        print("Writing project file")
        try:
            fh = open(currentProject + ".prj", "w+")
            fh.write("CurrentReference=" + self.currentBook + " " +
                     str(self.currentChapter) + "\n")
            fh.write("ProjectName=" + self.projectName + "\n")
            fh.write("ParatextFolder=" + self.paratextFolder + "\n")
            fh.write("AudioFolder=" + self.audioFolderName + "\n")
            fh.write("Font=" + self.textFont + "\n")
            fh.write("FontSize=" + str(self.textSize) + "\n")
            fh.write("FileType=" + self.fileType + "\n")
            fh.close()
        except Exception as detail:
            print("IOException writing project file: ", detail)
            pass

# class Ui_Dialog(object):

    def setupUi(self, Dialog, proj, newProject):
        try:
            self.dialog = Dialog
            self.proj = proj
            Dialog.setObjectName("Dialog")
            Dialog.resize(400, 357)
            self.buttonBox = QDialogButtonBox(Dialog)
            self.buttonBox.setGeometry(QRect(30, 310, 341, 32))
            self.buttonBox.setOrientation(Qt.Horizontal)
            self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel
                                              | QDialogButtonBox.Ok)
            self.buttonBox.setObjectName("buttonBox")
            self.groupBox = QGroupBox(Dialog)
            self.groupBox.setGeometry(QRect(10, 0, 381, 61))
            self.groupBox.setObjectName("groupBox")
            self.lineEditProjectName = QLineEdit(self.groupBox)
            self.lineEditProjectName.setGeometry(QRect(10, 30, 361, 23))
            self.lineEditProjectName.setObjectName("lineEditProjectName")
            self.groupBox_2 = QGroupBox(Dialog)
            self.groupBox_2.setGeometry(QRect(10, 60, 381, 61))
            self.groupBox_2.setObjectName("groupBox_2")
            self.comboBoxProjectType = QComboBox(self.groupBox_2)
            self.comboBoxProjectType.setGeometry(QRect(10, 30, 361, 23))
            self.comboBoxProjectType.setObjectName("comboBoxProjectType")
            self.groupBox_3 = QGroupBox(Dialog)
            self.groupBox_3.setGeometry(QRect(10, 120, 381, 61))
            self.groupBox_3.setObjectName("groupBox_3")
            self.lineEditSourcePath = QLineEdit(self.groupBox_3)
            self.lineEditSourcePath.setGeometry(QRect(10, 30, 271, 23))
            self.lineEditSourcePath.setObjectName("lineEditSourcePath")
            self.pushButtonBrowseSource = QPushButton(self.groupBox_3)
            self.pushButtonBrowseSource.setGeometry(QRect(290, 30, 80, 23))
            self.pushButtonBrowseSource.setObjectName("pushButtonBrowseSource")
            self.groupBox_4 = QGroupBox(Dialog)
            self.groupBox_4.setGeometry(QRect(10, 180, 381, 61))
            self.groupBox_4.setObjectName("groupBox_4")
            self.pushButtonBrowseAudio = QPushButton(self.groupBox_4)
            self.pushButtonBrowseAudio.setGeometry(QRect(290, 30, 80, 23))
            self.pushButtonBrowseAudio.setObjectName("pushButtonBrowseAudio")
            self.lineEditAudioFilesPath = QLineEdit(self.groupBox_4)
            self.lineEditAudioFilesPath.setGeometry(QRect(10, 30, 271, 23))
            self.lineEditAudioFilesPath.setObjectName("lineEditAudioFilesPath")
            self.groupBox_5 = QGroupBox(Dialog)
            self.groupBox_5.setGeometry(QRect(10, 240, 381, 61))
            self.groupBox_5.setObjectName("groupBox_5")
            self.comboBoxFont = QFontComboBox(self.groupBox_5)
            self.comboBoxFont.setGeometry(QRect(10, 30, 271, 23))
            self.comboBoxFont.setObjectName("comboBoxFont")
            self.lineEditFontSize = QLineEdit(self.groupBox_5)
            self.lineEditFontSize.setGeometry(QRect(290, 30, 81, 23))
            self.lineEditFontSize.setObjectName("lineEditFontSize")

            # set up fields
            if newProject:
                self.projectName = ""
                self.paratextFolder = "c:\\My Paratext 8 Projects"
                self.textFont = "Times New Roman"
                self.textSize = 25
                self.fileType = "Paratext"

            typeList = ("Paratext", "Book", "BART")
            # self.comboBoxProjectType.clear()
            for index, i in enumerate(typeList):
                self.comboBoxProjectType.addItem(i)
            index = self.comboBoxProjectType.findText(self.fileType,
                                                      Qt.MatchFixedString)
            if index >= 0:
                self.comboBoxProjectType.setCurrentIndex(index)
            self.lineEditProjectName.setText(self.projectName)
            self.lineEditSourcePath.setText(self.paratextFolder)
            self.lineEditAudioFilesPath.setText(self.audioFolderName)
            index = self.comboBoxFont.findText(self.textFont,
                                               Qt.MatchFixedString)
            if index >= 0:
                self.comboBoxFont.setCurrentIndex(index)
            self.lineEditFontSize.setText(str(self.textSize))

            self.retranslateUi(Dialog)
            self.pushButtonBrowseSource.clicked.connect(self.browse_source)
            self.pushButtonBrowseAudio.clicked.connect(self.browse_audio_path)
            self.lineEditProjectName.textChanged.connect(
                self.lineEditProjectName_changed)
            self.comboBoxProjectType.currentTextChanged.connect(
                self.comboBoxProjectType_changed)
            self.comboBoxFont.currentTextChanged.connect(
                self.comboBoxFont_changed)
            self.lineEditFontSize.textChanged.connect(
                self.lineEditFontSize_changed)
            self.buttonBox.accepted.connect(self.accept)
            self.buttonBox.rejected.connect(self.reject)
            QMetaObject.connectSlotsByName(Dialog)
        except Exception as detail:
            print("Exception: " + detail)

    def retranslateUi(self, Dialog):
        _translate = QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.groupBox.setTitle(_translate("Dialog", "Project name"))
        self.groupBox_2.setTitle(_translate("Dialog", "Type"))
        self.groupBox_3.setTitle(_translate("Dialog", "Source"))
        self.pushButtonBrowseSource.setText(_translate("Dialog", "Browse..."))
        self.groupBox_4.setTitle(_translate("Dialog", "Audio files folder"))
        self.pushButtonBrowseAudio.setText(_translate("Dialog", "Browse..."))
        self.groupBox_5.setTitle(_translate("Dialog", "Font"))

    def accept(self):
        self.writeProject(self.projectName)
        print("Saved project " + self.projectName)
        self.dialog.close()

    def reject(self):
        print("Cancel")
        self.dialog.close()

    def comboBoxProjectType_changed(self):
        self.fileType = self.comboBoxProjectType.currentText()
        # print("Changing project type to " + self.fileType)
        self.bBook = True
        if self.fileType == "Paratext":
            self.paratextFolder = "c:\\Paratext\\My Paratext 8 Projects\\" + self.lineEditProjectName.text(
            )
            self.bBook = False
        elif self.fileType == "Book":
            self.paratextFolder = ""
        else:
            self.paratextFolder = ""
        self.lineEditSourcePath.setText(self.paratextFolder)

    def lineEditProjectName_changed(self):
        self.comboBoxProjectType_changed()
        self.lineEditSourcePath.setText(self.paratextFolder)
        self.projectName = self.lineEditProjectName.text()

    def comboBoxFont_changed(self):
        self.textFont = self.comboBoxFont.currentText()

    def lineEditFontSize_changed(self):
        self.textSize = int(self.lineEditFontSize.text())

    def browse_source(self):
        try:
            my_dir = QFileDialog.getExistingDirectory(self.dialog,
                                                      "Open a folder",
                                                      self.paratextFolder,
                                                      QFileDialog.ShowDirsOnly)
            if my_dir:
                self.paratextFolder = my_dir
            self.lineEditSourcePath.setText(self.paratextFolder)
        # except TypeError as detail:
        #     print (detail)
        except Exception:
            print("Failed choose Paratext folder: ")  # + detail)

    def browse_audio_path(self):
        try:
            my_dir = QFileDialog.getExistingDirectory(self.dialog,
                                                      "Open a folder",
                                                      self.audioFolderName,
                                                      QFileDialog.ShowDirsOnly)
            if my_dir:
                self.audioFolderName = my_dir
            self.lineEditAudioFilesPath.setText(self.audioFolderName)
        # except TypeError as detail:
        #     print (detail)
        except Exception:
            print("Failed choose audio folder: ")  # + detail)
Exemplo n.º 2
0
class SettinInterface(QWidget):
    def __init__(self, screen_scale_rate):
        super(SettinInterface, self).__init__()

        if 1.01 <= screen_scale_rate <= 1.49:
            self.rate = 1.25
            self.px = 80
            self.image_sign = 2
        else:
            self.rate = 1
            self.px = 75
            self.image_sign = 1

        self.get_settin()
        self.setupUi()

    def setupUi(self):

        # 窗口尺寸及不可拉伸
        self.setWindowFlags(Qt.WindowStaysOnTopHint)
        self.resize(404 * self.rate, 576 * self.rate)
        self.setMinimumSize(QSize(404 * self.rate, 576 * self.rate))
        self.setMaximumSize(QSize(404 * self.rate, 576 * self.rate))
        self.setWindowFlags(Qt.WindowMinimizeButtonHint)

        # 窗口标题
        self.setWindowTitle("设置")

        # 窗口样式
        # self.setStyleSheet("QWidget {""font: 9pt \"华康方圆体W7\";"
        #                    "background-image: url(./config/Background%d.jpg);"
        #                    "background-repeat: no-repeat;"
        #                    "background-size:cover;""}" % self.image_sign)
        self.setStyleSheet("QWidget {" "font: 9pt \"微软雅黑\"};")  # 华康方圆体W7

        # 窗口图标
        self.icon = QIcon()
        self.icon.addPixmap(QPixmap(folder_path + "/config/logo.ico"),
                            QIcon.Normal, QIcon.On)
        self.setWindowIcon(self.icon)

        # 顶部工具栏
        self.tabWidget = QTabWidget(self)
        self.tabWidget.setGeometry(
            QRect(-2, 0, 410 * self.rate, 580 * self.rate))
        self.tabWidget.setCurrentIndex(0)

        # 工具栏样式
        self.tabWidget.setStyleSheet("QTabBar::tab {"
                                     "min-width:%dpx;"
                                     "background: rgba(255, 255, 255, 1);"
                                     "}"
                                     "QTabBar::tab:selected {"
                                     "border-bottom: 2px solid #4796f0;"
                                     "}"
                                     "QLabel{"
                                     "background: transparent;"
                                     "}"
                                     "QCheckBox{"
                                     "background: transparent;"
                                     "}" % (self.px))

        # 工具栏2
        self.tab_2 = QWidget()
        self.tabWidget.addTab(self.tab_2, "")
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), "设置")

        # 原语言标签
        self.translateSource_label_6 = QLabel(self.tab_2)
        self.translateSource_label_6.setGeometry(
            QRect(30 * self.rate, 20 * self.rate, 151 * self.rate,
                  16 * self.rate))
        self.translateSource_label_6.setText("待识别的语言类型:")

        # 原语言comboBox
        self.language_comboBox = QComboBox(self.tab_2)
        self.language_comboBox.setGeometry(
            QRect(190 * self.rate, 20 * self.rate, 150 * self.rate,
                  22 * self.rate))
        for idx, language_name in enumerate(config.language_name):
            self.language_comboBox.addItem("")
            self.language_comboBox.setItemText(idx, language_name[1])
        self.language_comboBox.setStyleSheet(
            "background: rgba(255, 255, 255, 0.4);")
        self.language_comboBox.setCurrentIndex(self.language)

        # 是否显示识别结果checkBox
        self.vis_result_checkBox = QCheckBox(self.tab_2)
        self.vis_result_checkBox.setGeometry(
            QRect(30 * self.rate, 52 * self.rate, 300 * self.rate,
                  16 * self.rate))
        self.vis_result_checkBox.setChecked(self.vis_result)
        self.vis_result_checkBox.setText("可视化识别结果(对识别结果进行修改及导出)")

        # 自动复制到剪贴板checkBox
        self.Clipboard_checkBox = QCheckBox(self.tab_2)
        self.Clipboard_checkBox.setGeometry(
            QRect(30 * self.rate, 80 * self.rate, 231 * self.rate,
                  16 * self.rate))
        self.Clipboard_checkBox.setChecked(self.showClipboard)
        self.Clipboard_checkBox.setText("识别结果自动复制到剪贴板")

        # 字体大小设定标签
        self.fontSize_label = QLabel(self.tab_2)
        self.fontSize_label.setGeometry(
            QRect(30 * self.rate, 120 * self.rate, 145 * self.rate,
                  16 * self.rate))
        self.fontSize_label.setText("显示文字大小:")

        # 字体大小设定
        self.fontSize_spinBox = QSpinBox(self.tab_2)
        self.fontSize_spinBox.setGeometry(
            QRect(190 * self.rate, 120 * self.rate, 50 * self.rate,
                  25 * self.rate))
        self.fontSize_spinBox.setMinimum(10)
        self.fontSize_spinBox.setMaximum(30)
        self.fontSize_spinBox.setStyleSheet(
            "background: rgba(255, 255, 255, 0)")
        self.fontSize_spinBox.setValue(self.fontSize)

        # 字体样式设定标签
        self.translate_label = QLabel(self.tab_2)
        self.translate_label.setGeometry(
            QRect(30 * self.rate, 145 * self.rate, 145 * self.rate,
                  20 * self.rate))
        self.translate_label.setText("显示字体类型:")

        # 字体样式设定
        self.fontComboBox = QFontComboBox(self.tab_2)
        self.fontComboBox.setGeometry(
            QRect(190 * self.rate, 145 * self.rate, 151 * self.rate,
                  25 * self.rate))
        self.fontComboBox.setStyleSheet("background: rgba(255, 255, 255, 0.4)")
        self.fontComboBox.activated[str].connect(self.get_fontType)
        self.ComboBoxFont = QFont(self.fontType)
        self.fontComboBox.setCurrentFont(self.ComboBoxFont)

        # 字体颜色设定标签
        self.colour_label = QLabel(self.tab_2)
        self.colour_label.setGeometry(
            QRect(30 * self.rate, 172 * self.rate, 340 * self.rate,
                  25 * self.rate))
        self.colour_label.setText("显示文字颜色:")

        # 字体颜色按钮
        self.originalColour_toolButton = QToolButton(self.tab_2)
        self.originalColour_toolButton.setGeometry(
            QRect(190 * self.rate, 175 * self.rate, 71 * self.rate,
                  25 * self.rate))
        self.originalColour_toolButton.setStyleSheet(
            "background: rgba(255, 255, 255, 0.4); color: {};".format(
                self.originalColor))
        self.originalColour_toolButton.clicked.connect(
            lambda: self.get_font_color())
        self.originalColour_toolButton.setText("选择颜色")

        # 显示颜色样式checkBox
        self.showColorType_checkBox = QCheckBox(self.tab_2)
        self.showColorType_checkBox.setGeometry(
            QRect(30 * self.rate, 200 * self.rate, 340 * self.rate,
                  20 * self.rate))
        self.showColorType_checkBox.setChecked(self.showColorType)
        self.showColorType_checkBox.setText("是否使用实心字体样式(不勾选则显示描边字体样式)")

        # 截屏键快捷键checkBox
        self.shortcutKey2_checkBox = QCheckBox(self.tab_2)
        self.shortcutKey2_checkBox.setGeometry(
            QRect(30 * self.rate, 250 * self.rate, 160 * self.rate,
                  16 * self.rate))
        self.shortcutKey2_checkBox.setStyleSheet("background: transparent;")
        self.shortcutKey2_checkBox.setChecked(self.showHotKey2)
        self.shortcutKey2_checkBox.setText("是否使用截屏快捷键:")

        # 截屏键的快捷键
        self.HotKey2_ComboBox = QComboBox(self.tab_2)
        self.HotKey2_ComboBox.setGeometry(
            QRect(200 * self.rate, 250 * self.rate, 120 * self.rate,
                  21 * self.rate))
        self.HotKey2_ComboBox.setStyleSheet(
            "background: rgba(255, 255, 255, 0.4);")
        for index, HotKey in enumerate(self.HotKeys):
            self.HotKey2_ComboBox.addItem("")
            self.HotKey2_ComboBox.setItemText(index, HotKey)
        self.HotKey2_ComboBox.setCurrentIndex(self.showHotKey1Value2)

        # 翻译键快捷键checkBox
        self.shortcutKey1_checkBox = QCheckBox(self.tab_2)
        self.shortcutKey1_checkBox.setGeometry(
            QRect(30 * self.rate, 280 * self.rate, 160 * self.rate,
                  16 * self.rate))
        self.shortcutKey1_checkBox.setStyleSheet("background: transparent;")
        self.shortcutKey1_checkBox.setChecked(self.showHotKey1)
        self.shortcutKey1_checkBox.setText("是否使用识别快捷键:")

        # 翻译键的快捷键
        self.HotKey1_ComboBox = QComboBox(self.tab_2)
        self.HotKey1_ComboBox.setGeometry(
            QRect(200 * self.rate, 280 * self.rate, 120 * self.rate,
                  21 * self.rate))
        self.HotKey1_ComboBox.setStyleSheet(
            "background: rgba(255, 255, 255, 0.4);")
        for index, HotKey in enumerate(self.HotKeys):
            self.HotKey1_ComboBox.addItem("")
            self.HotKey1_ComboBox.setItemText(index, HotKey)
        self.HotKey1_ComboBox.setCurrentIndex(self.showHotKey1Value1)

        # 是否翻译
        self.translate_checkBox = QCheckBox(self.tab_2)
        self.translate_checkBox.setGeometry(
            QRect(30 * self.rate, 315 * self.rate, 300 * self.rate,
                  16 * self.rate))
        self.translate_checkBox.setChecked(self.need_translate)
        self.translate_checkBox.setText("是否翻译为汉语")

        # 是否翻译
        self.show_org_checkBox = QCheckBox(self.tab_2)
        self.show_org_checkBox.setGeometry(
            QRect(30 * self.rate, 340 * self.rate, 300 * self.rate,
                  16 * self.rate))
        self.show_org_checkBox.setChecked(self.showOriginal)
        self.show_org_checkBox.setText("翻译后是否显示原文")

        # 翻译框透明度设定标签1
        self.tab4_label_1 = QLabel(self.tab_2)
        self.tab4_label_1.setGeometry(
            QRect(30 * self.rate, 380 * self.rate, 211 * self.rate,
                  16 * self.rate))
        self.tab4_label_1.setText("调节显示界面的透明度")

        # 翻译框透明度设定
        self.horizontalSlider = QSlider(self.tab_2)
        self.horizontalSlider.setGeometry(
            QRect(30 * self.rate, 400 * self.rate, 347 * self.rate,
                  22 * self.rate))
        self.horizontalSlider.setStyleSheet("background: transparent;")
        self.horizontalSlider.setMaximum(100)
        self.horizontalSlider.setOrientation(Qt.Horizontal)
        self.horizontalSlider.setValue(self.horizontal)
        self.horizontalSlider.valueChanged.connect(self.get_horizontal)

        # 翻译框透明度设定标签2
        self.tab2_label_2 = QLabel(self.tab_2)
        self.tab2_label_2.setGeometry(
            QRect(30 * self.rate, 420 * self.rate, 61 * self.rate,
                  20 * self.rate))
        self.tab2_label_2.setText("完全透明")

        # 翻译框透明度设定标签3
        self.tab2_label_3 = QLabel(self.tab_2)
        self.tab2_label_3.setGeometry(
            QRect(310 * self.rate, 420 * self.rate, 71 * self.rate,
                  20 * self.rate))
        self.tab2_label_3.setText("完全不透明")

        # 工具栏3
        self.tab_3 = QWidget()
        self.tabWidget.addTab(self.tab_3, "")
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), "关于")

        self.tab3_label = QLabel(self.tab_3)
        self.tab3_label.setGeometry(
            QRect(30 * self.rate, 75 * self.rate, 100 * self.rate,
                  40 * self.rate))
        self.tab3_label.setText("说明:")

        self.tab3_label2 = QLabel(self.tab_3)
        self.tab3_label2.setTextInteractionFlags(Qt.TextSelectableByMouse)
        self.tab3_label2.setWordWrap(True)
        self.tab3_label2.setGeometry(
            QRect(50 * self.rate, 100 * self.rate, 400 * self.rate,
                  80 * self.rate))
        self.tab3_label2.setText(
            "Dango-OCR是一款开源的OCR文字识别软件。\n如果在使用过程中有什么问题或者建议,欢迎微信交流(itlane)\n"
            "或者在github(https://github.com/zhangming8/Dango-ocr)\n上留言")

        self.tab3_label3 = QLabel(self.tab_3)
        self.tab3_label3.setWordWrap(True)
        self.tab3_label3.setGeometry(
            QRect(30 * self.rate, 350 * self.rate, 400 * self.rate,
                  80 * self.rate))
        self.tab3_label3.setText(
            "参考:\n        https://github.com/zhangming8/ocr_algo_server\n        "
            "https://github.com/PaddlePaddle/PaddleOCR\n        "
            "https://github.com/PantsuDango/Dango-Translator")

        # 设置保存按钮
        self.SaveButton = QPushButton(self)
        self.SaveButton.setGeometry(
            QRect(85 * self.rate, 515 * self.rate, 90 * self.rate,
                  30 * self.rate))
        self.SaveButton.setStyleSheet(
            "background: rgba(255, 255, 255, 0.4);font: 12pt;")
        self.SaveButton.setText("保存设置")

        # 设置返回按钮
        self.CancelButton = QPushButton(self)
        self.CancelButton.setGeometry(
            QRect(232 * self.rate, 515 * self.rate, 90 * self.rate,
                  30 * self.rate))
        self.CancelButton.setStyleSheet(
            "background: rgba(255, 255, 255, 0.4);font: 12pt")
        self.CancelButton.setText("退 出")

    def get_settin(self):  # 获取所有预设值

        with open(folder_path + '/config/settin.json') as file:
            self.data = load(file)

        # 获取各翻译源颜色预设值
        self.originalColor = self.data["fontColor"]["original"]

        # 获取翻译字体大小预设值
        self.fontSize = self.data["fontSize"]

        # 获取翻译字体样式预设值
        self.fontType = self.data["fontType"]

        # 获取颜色样式预设值
        self.showColorType = self.data["showColorType"]
        if self.showColorType == "True":
            self.showColorType = True
        else:
            self.showColorType = False

        # 获取是否显示原文预设值
        self.showOriginal = self.data["showOriginal"]
        if self.showOriginal == "True":
            self.showOriginal = True
        else:
            self.showOriginal = False

        # 获取是否将原文复制到剪贴板预设值
        self.showClipboard = self.data["showClipboard"]
        if self.showClipboard == "True":
            self.showClipboard = True
        else:
            self.showClipboard = False

        self.vis_result = self.data.get("vis_result", False)
        if self.vis_result == "True":
            self.vis_result = True
        else:
            self.vis_result = False

        self.need_translate = self.data.get("need_translate", False)
        if self.need_translate == "True":
            self.need_translate = True
        else:
            self.need_translate = False

        # 所有可设置的快捷键
        self.HotKeys = [
            'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11',
            'F12', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
            'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
            'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'Back',
            'Tab', 'Space', 'Left', 'Up', 'Right', 'Down', 'Delete', 'Numpad0',
            'Numpad1', 'Numpad2', 'Numpad3', 'Numpad4', 'Numpad5', 'Numpad6',
            'Numpad7', 'Numpad8', 'Numpad9'
        ]
        self.QtHotKeys = [
            Qt.Key_F1, Qt.Key_F2, Qt.Key_F3, Qt.Key_F4, Qt.Key_F5, Qt.Key_F6,
            Qt.Key_F7, Qt.Key_F8, Qt.Key_F9, Qt.Key_F10, Qt.Key_F11,
            Qt.Key_F12, Qt.Key_A, Qt.Key_B, Qt.Key_C, Qt.Key_D, Qt.Key_E,
            Qt.Key_F, Qt.Key_G, Qt.Key_H, Qt.Key_I, Qt.Key_J, Qt.Key_K,
            Qt.Key_L, Qt.Key_M, Qt.Key_N, Qt.Key_O, Qt.Key_P, Qt.Key_Q,
            Qt.Key_R, Qt.Key_S, Qt.Key_T, Qt.Key_U, Qt.Key_V, Qt.Key_W,
            Qt.Key_X, Qt.Key_Y, Qt.Key_Z, Qt.Key_0, Qt.Key_1, Qt.Key_2,
            Qt.Key_3, Qt.Key_4, Qt.Key_5, Qt.Key_6, Qt.Key_7, Qt.Key_8,
            Qt.Key_9, Qt.Key_Back, Qt.Key_Tab, Qt.Key_Space, Qt.Key_Left,
            Qt.Key_Up, Qt.Key_Right, Qt.Key_Down, Qt.Key_Delete, Qt.Key_0,
            Qt.Key_1, Qt.Key_2, Qt.Key_3, Qt.Key_4, Qt.Key_5, Qt.Key_6,
            Qt.Key_7, Qt.Key_8, Qt.Key_9
        ]
        self.QtHotKeysMaps = {}
        for idx in range(len(self.HotKeys)):
            self.QtHotKeysMaps[self.HotKeys[idx]] = self.QtHotKeys[idx]

        # 获取翻译键快捷键的热键预设值
        self.showHotKey1Value1 = self.data["showHotKeyValue1"]
        self.showHotKey1Value1 = self.HotKeys.index(self.showHotKey1Value1)

        # 获取范围键快捷键的热键预设值
        self.showHotKey1Value2 = self.data["showHotKeyValue2"]
        self.showHotKey1Value2 = self.HotKeys.index(self.showHotKey1Value2)

        # 获取是否启用翻译键快捷键预设值
        self.showHotKey1 = self.data["showHotKey1"]
        if self.showHotKey1 == "True":
            self.showHotKey1 = True
        else:
            self.showHotKey1 = False

        # 获取是否启用范围键快捷键预设值
        self.showHotKey2 = self.data["showHotKey2"]
        if self.showHotKey2 == "True":
            self.showHotKey2 = True
        else:
            self.showHotKey2 = False

        # 获取文本框透明度预设值
        self.horizontal = self.data["horizontal"]

        # 获取翻译语言预设值
        self.language = config.language_map_reverse[self.data["language"]]

    def get_font_color(self):  # 各翻译源字体颜色
        color = QColorDialog.getColor()
        self.originalColor = color.name()
        self.originalColour_toolButton.setStyleSheet(
            "background: rgba(255, 255, 255, 0.4);color: {};".format(
                color.name()))
        self.data["fontColor"]["original"] = self.originalColor

    def get_fontType(self, text):  # 字体样式

        self.fontType = text
        self.data["fontType"] = self.fontType

    def showColorType_state(self):  # 颜色样式

        if self.showColorType_checkBox.isChecked():
            self.showColorType = "True"
        else:
            self.showColorType = "False"
        self.data["showColorType"] = self.showColorType

    def showClipboard_state(self):  # 是否将原文自动复制到剪贴板

        if self.Clipboard_checkBox.isChecked():
            self.showClipboard = "True"
        else:
            self.showClipboard = "False"
        self.data["showClipboard"] = self.showClipboard

    def VisResult_state(self):
        if self.vis_result_checkBox.isChecked():
            self.vis_result = "True"
        else:
            self.vis_result = "False"
        self.data["vis_result"] = self.vis_result

    def NeedTranslate_state(self):
        if self.translate_checkBox.isChecked():
            self.need_translate = "True"
        else:
            self.need_translate = "False"
        self.data["need_translate"] = self.need_translate

    def ShowOrigion_state(self):
        if self.show_org_checkBox.isChecked():
            self.showOriginal = "True"
        else:
            self.showOriginal = "False"
        self.data["showOriginal"] = self.showOriginal

    def showHotKey1_state(self):  # 是否启用翻译键快捷键

        if self.shortcutKey1_checkBox.isChecked():
            self.showHotKey1 = "True"
        else:
            self.showHotKey1 = "False"
        self.data["showHotKey1"] = self.showHotKey1

    def showHotKey2_state(self):  # 是否启用范围键快捷键

        if self.shortcutKey2_checkBox.isChecked():
            self.showHotKey2 = "True"
        else:
            self.showHotKey2 = "False"
        self.data["showHotKey2"] = self.showHotKey2

    def get_horizontal(self):  # 文本框透明度

        self.horizontal = self.horizontalSlider.value()
        self.data["horizontal"] = self.horizontal

    def save_fontSize(self):  # 翻译源字体大小

        self.data["fontSize"] = self.fontSize_spinBox.value()

    def range(self):

        with open(folder_path + '/config/settin.json') as file:
            data1 = load(file)

            self.data["range"]["X1"] = data1["range"]["X1"]
            self.data["range"]["Y1"] = data1["range"]["Y1"]
            self.data["range"]["X2"] = data1["range"]["X2"]
            self.data["range"]["Y2"] = data1["range"]["Y2"]

    def save_language(self):  # 保存翻译语种

        self.data["language"] = config.language_map[
            self.language_comboBox.currentIndex()][0]

    def save_showHotKeyValue1(self):  # 保存翻译键快捷键
        HotKey_index = self.HotKey1_ComboBox.currentIndex()
        self.data["showHotKeyValue1"] = self.HotKeys[HotKey_index]

    def save_showHotKeyValue2(self):  # 保存范围键快捷键
        HotKey_index = self.HotKey2_ComboBox.currentIndex()
        self.data["showHotKeyValue2"] = self.HotKeys[HotKey_index]

    def save_settin(self):

        self.range()
        self.get_horizontal()
        self.save_fontSize()

        self.showColorType_state()
        self.showClipboard_state()
        self.VisResult_state()
        self.NeedTranslate_state()
        self.ShowOrigion_state()
        self.save_language()

        self.showHotKey1_state()
        self.showHotKey2_state()
        self.save_showHotKeyValue1()
        self.save_showHotKeyValue2()

        with open(folder_path + '/config/settin.json', 'w') as file:
            dump(self.data, file, indent=2)

        MessageBox('保存设置', '保存成功啦 ヾ(๑╹◡╹)ノ"')