예제 #1
0
class Ui_MainWindow(object):
    def setupUi(self, windget):
        windget.resize(850, 700)
        self.h1_layout = QHBoxLayout()
        self.h2_layout = QHBoxLayout()
        self.h3_layout = QHBoxLayout()
        self.h4_layout = QHBoxLayout()
        self.h5_layout = QHBoxLayout()
        self.h6_layout = QHBoxLayout()
        self.h7_layout = QHBoxLayout()
        self.h8_layout = QHBoxLayout()
        self.h9_layout = QHBoxLayout()
        self.h10_layout = QHBoxLayout()
        self.h11_layout = QHBoxLayout()
        self.all_v_layout = QVBoxLayout()

        self.statusbar = QtWidgets.QStatusBar()
        self.toolbar = QToolBar()
        self.menubar = QMenuBar()
        self.menubar.setStyleSheet(
            "QMenuBar{background-color: rgb(240, 240, 240)}")
        self.menubar.setFixedSize(870, 22)
        self.menubar.setMaximumSize(9999, 9999)
        self.h4_layout.addWidget(self.menubar)
        self.h5_layout.addWidget(self.toolbar)

        self.file_Menu = self.menubar.addMenu("文件")

        self.file_compare = QAction(QIcon('exit.png'), '&对比')
        self.file_compare.setShortcut('Shift+F10')
        self.file_compare.setStatusTip('对比文件')
        self.file_Menu.addAction(self.file_compare)

        self.file_save = QAction(QIcon('exit.png'), '&保存')
        self.file_save.setShortcut('Ctrl+s')
        self.file_save.setStatusTip('保存备案比对结果')
        self.file_Menu.addAction(self.file_save)

        self.file_open = QAction(QIcon('exit.png'), '&打开')
        self.file_open.setShortcut('')
        self.file_open.setStatusTip('打开备案比对结果')
        self.file_Menu.addAction(self.file_open)

        self.select_Menu = self.menubar.addMenu("选择")

        self.select_backup = QAction(QIcon('exit.png'), '&备案文件')
        self.select_backup.setShortcut('')
        self.select_backup.setStatusTip('选择备案文件')
        self.select_Menu.addAction(self.select_backup)

        self.select_source = QAction(QIcon('exit.png'), '&待对比文件')
        self.select_source.setShortcut('')
        self.select_source.setStatusTip('选择待对比文件')
        self.select_Menu.addAction(self.select_source)

        self.record_Menu = self.menubar.addMenu("对比记录")

        self.win_Menu = self.menubar.addMenu("窗口")

        self.win_max = QAction(QIcon('exit.png'), '&窗口最大化')
        self.win_max.setShortcut('')
        self.win_max.setStatusTip('最大化窗口')
        self.win_Menu.addAction(self.win_max)

        self.win_min = QAction(QIcon('exit.png'), '&窗口最小化')
        self.win_min.setShortcut('')
        self.win_min.setStatusTip('最小化窗口')
        self.win_Menu.addAction(self.win_min)

        self.user_Menu = self.menubar.addMenu("用户")

        self.user_out = QAction(QIcon('exit.png'), '&用户信息')
        self.user_out.setShortcut('')
        self.user_out.setStatusTip('注销用户')
        self.user_Menu.addAction(self.user_out)

        #     self.user_out.triggered.connect(self.sign_out)
        #
        # def sign_out(self):
        #     self.close()
        #     dialog = logindialog()
        #     if dialog.exec_() == QDialog.Accepted:
        #         the_window = Main()
        #         self.windowList.append(the_window)  # 这句一定要写,不然无法重新登录
        #         the_window.show()

        self.quit_Menu = self.menubar.addMenu("退出")

        self.quit_app = QAction(QIcon('exit.png'), '&退出')
        self.quit_app.setShortcut('Ctrl+Q')
        self.quit_app.setStatusTip('退出')
        self.quit_Menu.addAction(self.quit_app)

        self.help_Menu = self.menubar.addMenu("帮助")
        self.help_app = QAction(QIcon('exit.png'), '&帮助')
        self.help_app.setShortcut('')
        self.help_app.setStatusTip('帮助信息')
        self.help_Menu.addAction(self.help_app)

        self.groupbox_1 = QGroupBox('备案文件')  # 1
        # self.groupbox_1.setMaximumSize(9999,9999)
        self.groupbox_2 = QGroupBox('待对比文件')
        # self.groupbox_2.setMaximumSize(9999,9999)
        self.groupbox_3 = QGroupBox('比对结果')
        self.groupbox_4 = QGroupBox()
        self.groupbox_4.setLayout(self.h5_layout)
        self.h11_layout.addWidget(self.groupbox_4)
        self.toolbutton = QtWidgets.QToolButton()
        self.toolbar.setMovable(False)
        self.toolbutton.setAutoRaise(True)
        self.toolbutton.setIcon(QIcon('素材/开始.png'))
        self.toolbutton.setText("开始")
        self.toolbutton.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)

        self.toolbutton2 = QtWidgets.QToolButton()
        # self.toolbutton2.setCheckable(False)
        self.toolbutton2.setAutoRaise(True)
        self.toolbutton2.setIcon(QIcon('素材/文档.png'))
        self.toolbutton2.setText("保存")
        self.toolbutton2.setToolTip("保存比对结果")
        # 在工具栏ToolBar里同时添加图标和文字,并设置图标和文字的相对位置;若没有下面的一行或多行代码,则只显示图标或文字。
        self.toolbutton2.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)

        self.comboBox = QtWidgets.QComboBox()
        self.comboBox.addItem("")
        self.comboBox.addItem("")

        self.toolbutton3 = QtWidgets.QToolButton()
        # self.toolbutton3.setCheckable(False)
        self.toolbutton3.setAutoRaise(True)
        self.toolbutton3.setIcon(QIcon('素材/关闭.png'))
        self.toolbutton3.setText("退出")
        self.toolbutton3.setToolTip("退出")
        # 在工具栏ToolBar里同时添加图标和文字,并设置图标和文字的相对位置;若没有下面的一行或多行代码,则只显示图标或文字。
        self.toolbutton3.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)

        self.toolbutton4 = QtWidgets.QToolButton()
        # self.toolbutton3.setCheckable(False)
        self.toolbutton4.setAutoRaise(True)
        self.toolbutton4.setIcon(QIcon('素材/下载.png'))
        self.toolbutton4.setText("下载备案")
        self.toolbutton4.setToolTip("下载备案文件")
        # 在工具栏ToolBar里同时添加图标和文字,并设置图标和文字的相对位置;若没有下面的一行或多行代码,则只显示图标或文字。
        self.toolbutton4.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)

        self.toolbutton5 = QtWidgets.QToolButton()
        # self.toolbutton3.setCheckable(False)
        self.toolbutton5.setAutoRaise(True)
        self.toolbutton5.setIcon(QIcon('素材/上传.png'))
        self.toolbutton5.setText("上传结果")
        self.toolbutton5.setToolTip("上传代码比对结果")
        # 在工具栏ToolBar里同时添加图标和文字,并设置图标和文字的相对位置;若没有下面的一行或多行代码,则只显示图标或文字。
        self.toolbutton5.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)

        self.toolbar.addWidget(self.toolbutton)
        self.toolbar.addSeparator()
        self.toolbar.addSeparator()
        self.toolbar.addWidget(self.toolbutton4)
        self.toolbar.addSeparator()
        self.toolbar.addSeparator()
        self.toolbar.addWidget(self.comboBox)
        self.toolbar.addSeparator()
        self.toolbar.addSeparator()
        self.toolbar.addWidget(self.toolbutton2)
        self.toolbar.addSeparator()
        self.toolbar.addSeparator()
        self.toolbar.addWidget(self.toolbutton5)
        self.toolbar.addSeparator()
        self.toolbar.addSeparator()
        self.toolbar.addWidget(self.toolbutton3)

        self.backup_label = QtWidgets.QLabel()
        self.backup_label.setFixedSize(375, 25)
        self.backup_label.setFont(QFont(
            "Roman times",
            11,
        ))
        self.backup_label.setText("请选择合适的备案文件")

        self.backup_button = QtWidgets.QPushButton()
        self.backup_button.setFixedSize(30, 30)
        self.backup_button.setIcon(QIcon("素材/文件夹.png"))

        self.source_label = QtWidgets.QLabel()
        self.source_label.setFixedSize(375, 25)
        self.source_label.setFont(QFont(
            "Roman times",
            11,
        ))
        self.source_label.setText("请选择合适的待比对文件")

        self.source_button = QtWidgets.QPushButton()
        self.source_button.setFixedSize(30, 30)
        self.source_button.setIcon(QIcon("素材/文件夹.png"))

        self.h6_layout.addWidget(self.backup_label)
        self.h6_layout.addWidget(self.backup_button)
        self.h6_layout.addWidget(self.source_label)
        self.h6_layout.addWidget(self.source_button)

        self.backup_win = QtWidgets.QWidget()
        self.backup_win.setFixedSize(420, 300)
        # self.backup_win.resize(500, 300)
        # self.backup_win.setMaximumSize(9999,9999)
        # self.backup_win.resize(420,300)

        self.source_win = QtWidgets.QWidget()
        self.source_win.setFixedSize(420, 300)
        # self.source_win.setMaximumSize(9999,9999)

        self.h1_layout.addWidget(self.backup_win)
        self.groupbox_1.setLayout(self.h1_layout)
        self.h2_layout.addWidget(self.source_win)
        self.groupbox_2.setLayout(self.h2_layout)

        self.backup_model = QFileSystemModel()

        self.backup_tree = QTreeView(self.backup_win)

        self.backup_model.setReadOnly(True)
        self.backup_tree.setGeometry(0, 0, 400, 290)

        self.source_model = QFileSystemModel()

        self.source_tree = QTreeView(self.source_win)

        self.source_model.setReadOnly(True)
        self.source_tree.setGeometry(0, 0, 400, 290)

        self.textBrowser = QtWidgets.QTextBrowser()

        self.textBrowser.setFixedSize(800, 250)
        self.textBrowser.setMaximumSize(9999, 9999)
        self.h7_layout.addWidget(self.textBrowser)
        self.groupbox_3.setLayout(self.h7_layout)
        self.pbar = QtWidgets.QProgressBar()
        self.pbar.setAlignment(Qt.AlignLeading | Qt.AlignLeft
                               | Qt.AlignVCenter)
        self.h9_layout.addWidget(self.pbar)
        # self.statusbar = QtWidgets.QStatusBar()
        self.h10_layout.addWidget(self.statusbar)

        self.h3_layout.addWidget(self.groupbox_1)
        self.h3_layout.addWidget(self.groupbox_2)
        # self.h3_layout.setSpacing(0)
        self.h8_layout.addWidget(self.groupbox_3)
        self.all_v_layout.addLayout(self.h4_layout)
        self.all_v_layout.addLayout(self.h11_layout)
        self.all_v_layout.addLayout(self.h6_layout)
        self.all_v_layout.addLayout(self.h3_layout)
        self.all_v_layout.addLayout(self.h8_layout)
        self.all_v_layout.addLayout(self.h9_layout)
        self.all_v_layout.addLayout(self.h10_layout)
        windget.setLayout(self.all_v_layout)
        self.retranslateUi(windget)

    def retranslateUi(self, windget):
        _translate = QtCore.QCoreApplication.translate
        windget.setWindowTitle(_translate("MainWindow", "电表代码对比软件"))
        windget.setWindowIcon(QIcon('素材/电网.ico'))
        self.comboBox.setItemText(0, _translate("MainWindow", "直接对比方式"))
        self.comboBox.setItemText(1, _translate("MainWindow", "数字签名对比方式"))
예제 #2
0
class Ui(QWidget):
    """
    窗体主模块
    """
    def __init__(self):
        super(Ui, self).__init__()
        self.__init_main__()
        self.__init_ui__()  # 其他窗口依赖项
        self.__init_status__()
        self.__init_meau_main__()
        self.__init_home__()

        self.__init_var__()  # 包含时间关联,最后初始化

        self.btn_home_audit.clicked.connect(self.no_compele)
        self.btn_home_kgraph.clicked.connect(self.no_compele)
        self.setAcceptDrops(True)

    def no_compele(self):
        QMessageBox.information(self, '提示', '还没有开发呢')

    def __init_ui__(self, *args):
        self.resize(715, 458)
        self.setFont(QFont('YaHei', 10))
        self.setWindowTitle('Toolbox')
        # self.setWindowIcon(QIcon('{}/Ico/toolbox.png'.format(ROOTDIR).format(ROOTDIR)))
        f_ico = open(r'{}/Ico/toolbox.png'.format(ROOTDIR).format(ROOTDIR),
                     'rb')
        pix = QPixmap()
        pix.loadFromData(f_ico.read())  # 读取文件流生成图标
        self.setWindowIcon(QIcon(pix))
        self.setMouseTracking(True)
        # self.setWindowOpacity(0.8)

        self.setStyleSheet('*{background-color: #FFFFFF}')
        # self.setWindowFlags(Qt.WindowStaysOnTopHint) # 窗口置顶
        # 总布局
        self.glayout_main = QGridLayout()
        self.glayout_main.setSpacing(0)
        self.glayout_main.setContentsMargins(0, 0, 0, 0)
        # 为窗体添加布局
        self.setLayout(self.glayout_main)

        # C = QColorDialog().getColor()

    def eventFilter(self, watched, event):
        print(event.type(), event.__doc__)
        if watched == self.label1:  # 只对label1的点击事件进行过滤,重写其行为,其他的事件会被忽略
            if event.type() == QEvent.MouseButtonPress:  # 这里对鼠标按下事件进行过滤,重写其行为
                mouseEvent = QMouseEvent(event)
                if mouseEvent.buttons() == Qt.LeftButton:
                    self.LabelState.setText("按下鼠标左键")
                elif mouseEvent.buttons() == Qt.MidButton:
                    self.LabelState.setText("按下鼠标中间键")
                elif mouseEvent.buttons() == Qt.RightButton:
                    self.LabelState.setText("按下鼠标右键")
                '''转换图片大小'''
                transform = QTransform()
                transform.scale(0.5, 0.5)
                tmp = self.image1.transformed(transform)
                self.label1.setPixmap(QPixmap.fromImage(tmp))
            if event.type(
            ) == QEvent.MouseButtonRelease:  # 这里对鼠标释放事件进行过滤,重写其行为
                self.LabelState.setText("释放鼠标按钮")
                self.label1.setPixmap(QPixmap.fromImage(self.image1))
        return QWidget.eventFilter(self, watched, event)  # 其他情况会返回系统默认的事件处理方法。

    def __init_main__(self):
        self.APPID = '17621214'
        self.APIKEY = 'kUaRn85Ljekp2AapOZaSMNIe'
        self.SECRETKEY = 'SVABkvSEzMGMhRkFqV0gxCO19Aqwo4gK'
        self.user_info_all_dict = {}
        path = r'{}/Config/config'.format(ROOTDIR)
        if os.path.exists(path):
            with open(path, 'r') as f_config:
                data = self.read_info_from_file(f_config.read())
                if data:
                    data = json.loads(data)
                    if 'APPID' and 'APIKEY' and 'SECRETKEY' in data.keys():
                        self.user_info_all_dict.update(data)
                        self.APPID = self.user_info_all_dict.get('APPID')
                        self.APIKEY = self.user_info_all_dict.get('APIKEY')
                        self.SECRETKEY = self.user_info_all_dict.get(
                            'SECRETKEY')
            os.remove(path)
        self.user_info_all_dict['APPID'] = self.APPID
        self.user_info_all_dict['APIKEY'] = self.APIKEY
        self.user_info_all_dict['SECRETKEY'] = self.SECRETKEY
        self.userinfo_change_save()

    def read_info_from_file(self, fb, key=None):
        if not key: key = 'BNM123456'
        try:
            data = decrypt(int(fb), key)
            return data
        except Exception as e:
            return None
        # APPID = '17621214' #152
        # APIKEY = 'kUaRn85Ljekp2AapOZaSMNIe'
        # SECRETKEY = 'SVABkvSEzMGMhRkFqV0gxCO19Aqwo4gK'

    @catch_except
    def userinfo_change_save(self, *args):

        with open(r'Config\config', 'w') as f:
            key = 'BNM123456'
            data = json.dumps(self.user_info_all_dict)
            data_int, k = encrypt(data, key)
            f.write(data_int.__str__())
            # print('保存完成')

    def time_show_out(self, *args):
        self.time_now = time.strftime('%Y-%m-%d %a %H:%M:%S', time.localtime())
        self.label_top_center.setText(self.time_now)
        # self.btn_0_openfolder.setText(self.time_now)

    def __init_var__(self, *args):
        # 时间
        self.timer_top = QTimer()
        self.timer_top.timeout.connect(self.time_show_out)
        self.timer_top.start(100)

        # 多线程执行程序
        self.Outter_Run = Outter_Run()
        self.Outter_Run.sign.connect(self.Outter_Run_sign_deal)

    def __init_meau_main__(self, *args):
        """
        主菜单栏
        :return:
        """
        # 窗口顶部主布局
        self.glayout_top = QGridLayout()
        self.glayout_main.addLayout(self.glayout_top, 1, 0, Qt.AlignTop)

        # 菜单栏 左侧
        self.glayout_meau = QGridLayout()
        self.glayout_top.addLayout(self.glayout_meau, 0, 0)
        self.meau_main = QMenuBar()
        self.meau_main.setFixedSize(100, 30)
        # self.meau_main.setWindowIcon(QIcon('{}/Ico/bg_img.png'.format(ROOTDIR)))
        self.glayout_meau.addWidget(self.meau_main, 0, 0, 1, 1)

        self.set_btn = QAction('设置', self.meau_main)
        self.set_btn.setText('设置')
        # meau.triggered.connect(self._test_ui)
        self.meau_main.addAction(self.set_btn)
        self.floder_btn = QAction('文件', self.meau_main)
        self.floder_btn.setText('文件')
        self.floder_btn.setToolTip('打开所有用户数据保存文件夹')
        self.floder_btn.triggered.connect(self.floder_btn_triggered)
        # meau.triggered.connect(self._test_ui)
        self.meau_main.addAction(self.floder_btn)

        # 返回按钮等
        self.btn_top_back = QToolButton()
        self.btn_top_back.setIcon(
            QIcon('{}/Ico/back.png'.format(ROOTDIR).format(ROOTDIR)))
        self.btn_top_back.setStyleSheet('*{width:22px;height:22px;border:0}')
        self.glayout_meau.addWidget(self.btn_top_back, 0, 1, 1, 1)
        self.btn_top_forward = QToolButton()
        self.btn_top_forward.setIcon(
            QIcon('{}/Ico/forward.png'.format(ROOTDIR).format(ROOTDIR)))
        self.btn_top_forward.setStyleSheet(
            '*{width:22px;height:22px;border:0}')
        self.glayout_meau.addWidget(self.btn_top_forward, 0, 2, 1, 1)

        self.btn_top_forward.setVisible(False)
        self.btn_top_back.setVisible(False)

        # 顶部中心
        self.glayout_top_center = QGridLayout()
        self.glayout_top.addLayout(self.glayout_top_center, 0, 1)

        self.label_top_center = QLabel()
        self.glayout_top_center.addWidget(self.label_top_center, 0, 1, 1, 1)
        self.label_top_center.setFixedHeight(25)
        # self.label_top_center.setMouseTracking(True)
        self.label_top_center.setAlignment(Qt.AlignCenter)

        # 顶部右侧
        self.glayout_top_right = QGridLayout()
        self.glayout_top.addLayout(self.glayout_top_right, 0, 2)

        self.label_top_right = ScrollLabel()
        self.label_top_right.setObjectName('label_top_right')
        # self.label_top_right.setText('label')
        self.label_top_right.setFixedWidth(150)
        self.label_top_right.setAlignment(Qt.AlignCenter)

        # self.label_top_show.setAutoFillBackground(True)
        self.label_top_right.setMouseTracking(True)
        self.glayout_top_right.addWidget(self.label_top_right, 0, 0, 1, 1)

        self.meau_widgets = [
            self.meau_main, self.btn_top_back, self.btn_top_forward,
            self.label_top_center, self.label_top_right
        ]
        color = (TopColor, random_color(mode='font'),
                 random_color(mode='background'), random_color(mode='font'))
        # self.meau_main.setStyleSheet("*{background-color:%s;color:%s;border:0;font:YaHei;} :pressed{background-color:%s;color:%s;}" % color)

        for widget in self.meau_widgets:
            widget.setFixedHeight(25)
            widget.setStyleSheet(
                "*{background-color:%s;color:%s;border:0;font:YaHei;} :pressed{background-color:%s;color:%s;}"
                % color)

        self.btn_top_forward.clicked.connect(self.btn_top_forward_clicked)
        self.btn_top_back.clicked.connect(self.btn_top_back_clicked)

    def floder_btn_triggered(self):
        os.system('start explorer "{}\Record"'.format(ROOTDIR))

    @catch_except
    def btn_top_back_clicked(self, *args):
        """返回按钮实际实现方法"""

        # print('back',func_before,func_historys)
        if func_before:
            index = func_historys.index(func_before)
            if func_historys[index - 1]:
                layout_dele(func_historys[index - 1])(self, *args)

            if func_historys[index]:
                self.btn_top_forward.setVisible(True)
            else:
                self.btn_top_forward.setVisible(False)

        # 底部状态栏清空
        self.pbar_bottom.reset()
        self.label_status_left.clear()
        self.label_status_right.clear()
        # self.label_top_right.setText('')

    @catch_except
    def btn_top_forward_clicked(self, *args):
        """实现窗口向前,注意子窗口调用函数中应该不包含sender()初始化,否则将导致窗口向前失效"""
        # global func_historys
        # print('forward',func_before)
        if func_before:
            index = func_historys.index(func_before)
            if func_historys[index + 1]:
                layout_dele(func_historys[index + 1])(self)
                # func_historys[index+1](self)
        self.btn_top_back.setVisible(True)

    def leave_home_event(self, *args):
        self.btn_top_back.setVisible(True)

    def __init_status__(self, *args):
        self.glayout_status = QGridLayout()
        self.glayout_main.addLayout(self.glayout_status, 3, 0, Qt.AlignBottom)
        self.label_status_left = QLabel()
        # self.label_status_left.setText('这是状态栏')
        self.label_status_left.setFixedWidth(200)
        self.label_status_left.setAlignment(Qt.AlignCenter)
        self.glayout_status.addWidget(self.label_status_left, 0, 0, 1, 1)
        self.pbar_bottom = QProgressBar()
        self.pbar_bottom.setObjectName('bottom_par')
        self.pbar_bottom.setAlignment(Qt.AlignCenter)
        self.pbar_bottom.setRange(0, 100)
        self.glayout_status.addWidget(self.pbar_bottom, 0, 1, 1, 1)
        self.label_status_right = QLabel()
        # self.label_status_right.setText('这是状态栏')
        self.label_status_right.setAlignment(Qt.AlignCenter)
        self.label_status_right.setFixedWidth(200)
        self.glayout_status.addWidget(self.label_status_right, 0, 2, 1, 1)

        self.status_widgets = [
            self.label_status_right, self.label_status_left, self.pbar_bottom
        ]
        color = (random_color(mode='background'), random_color(mode='font'),
                 random_color(mode='background'), random_color(mode='font'))
        for widget in self.status_widgets:
            widget.setStyleSheet(
                "*{background-color:%s;color:%s;border:0;height:25px;font:YaHei;} :pressed{background-color:%s;color:%s;}"
                % color)

    def Outter_Run_sign_deal(self, p):
        self.pbar_bottom.setValue(p)

    def __init_home__(self, *args):
        """
        主页布局
        :return:
        """
        self.glayout_home = QGridLayout()
        self.glayout_home.setObjectName('grade_1')
        self.glayout_main.addLayout(self.glayout_home, 2, 0, Qt.AlignCenter)
        self.glayout_home.setSpacing(int(self.width() * 0.2 / 6))
        self.glayout_home.setContentsMargins(10, 10, 10, 10)

        # btn及其参数
        self.home_btns = []

        self.btn_home_voice = QPushButton()
        self.home_btns.append([
            self.btn_home_voice, 0, 0, 1, 1, '语音技术', 'btn_home_voice', 80, 60,
            '{}/Ico/voice.png'.format(ROOTDIR)
        ])
        self.btn_home_face = QPushButton()
        self.home_btns.append([
            self.btn_home_face, 0, 1, 1, 1, '人脸识别', 'btn_home_face', 80, 60,
            '{}/Ico/face.png'.format(ROOTDIR)
        ])
        self.btn_home_bodyays = QPushButton()
        self.home_btns.append([
            self.btn_home_bodyays, 0, 2, 1, 1, '人体分析', 'btn_home_bodyays', 80,
            60, '{}/Ico/bodyays.png'.format(ROOTDIR)
        ])
        self.btn_home_ocr = QPushButton()
        self.home_btns.append([
            self.btn_home_ocr, 0, 3, 1, 1, '文字识别', 'btn_home_ocr', 80, 60,
            '{}/Ico/ocr.png'.format(ROOTDIR)
        ])
        self.btn_home_imgrec = QPushButton()
        self.home_btns.append([
            self.btn_home_imgrec, 1, 0, 1, 1, '图像识别', 'btn_home_imgrec', 80,
            60, '{}/Ico/imgrec.png'.format(ROOTDIR)
        ])
        self.btn_home_imgsearch = QPushButton()
        self.home_btns.append([
            self.btn_home_imgsearch, 1, 1, 1, 1, '图像搜索', 'btn_home_imgsearch',
            80, 60, '{}/Ico/imgsearch.png'.format(ROOTDIR)
        ])
        self.btn_home_imgup = QPushButton()
        self.home_btns.append([
            self.btn_home_imgup, 1, 2, 1, 1, '图像效果增强', 'btn_home_imgup', 80,
            60, '{}/Ico/imgup.png'.format(ROOTDIR)
        ])
        self.btn_home_nlp = QPushButton()
        self.home_btns.append([
            self.btn_home_nlp, 1, 3, 1, 1, '自然语言处理', 'btn_home_nlp', 80, 60,
            '{}/Ico/nlp.png'.format(ROOTDIR)
        ])
        self.btn_home_kgraph = QPushButton()
        # self.home_btns.append([self.btn_home_kgraph,2,0,1,1,'知识图谱','btn_home_kgraph',80,60,'{}/Ico/kgraph.png'.format(ROOTDIR)])
        self.btn_home_audit = QPushButton()
        # self.home_btns.append([self.btn_home_audit,2,1,1,1,'内容审核','btn_home_audit',80,60,'{}/Ico/audit.png'.format(ROOTDIR)])
        self.btn_home_music = QPushButton()
        # self.home_btns.append([self.btn_home_music,2,2,1,1,'音乐','btn_home_music',80,60,'{}/Ico/music.png'.format(ROOTDIR)])
        self.btn_home_screen = QPushButton()
        self.home_btns.append([
            self.btn_home_screen, 2, 1, 1, 1, '录屏', 'btn_home_music', 80, 60,
            r'{}/Ico/record.png'.format(ROOTDIR)
        ])
        self.btn_home_video = QPushButton()
        self.home_btns.append([
            self.btn_home_video, 2, 0, 1, 1, '视频', 'btn_home_video', 80, 60,
            '{}/Ico/video.png'.format(ROOTDIR)
        ])

        # 为btn设置参数
        for btn in self.home_btns:
            list(
                map(
                    lambda v1, v2, v3, v4, v5: self.glayout_home.addWidget(
                        v1, v2, v3, v4, v4), [btn[0]], [btn[1]], [btn[2]],
                    [btn[3]], [btn[4]]))
            btn[0].setObjectName(btn[6])
            # btn[0].setText(btn[5])
            # btn[0].setFixedSize(btn[7],btn[8])
            # 设置css样式表
            css = ":hover{background-color:%s;}" \
                  "QPushButton{background-color:%s;}" \
                  "QPushButton:pressed{background-color:%s;}" \
                  "QToolTip{color:%s;font:Yahei;font-size:14px}" %(random_color(),random_color(),random_color(),random_color()) # border:0px
            #background-color:%s; random_color(),
            btn[0].setStyleSheet(css)
            btn[0].setToolTip(btn[5])

            btn[0].setIcon(QIcon(btn[9]))
            btn[0].resize(btn[7], btn[8])

            # btn[0].setIconSize(QSize(btn[7], btn[8]))
            h = self.height() * 0.8 / 5
            w = self.width() * 0.8 / 4
            if h > 100: h = 100
            if w > h * 1.3: w = h * 1.3
            if h > w / 1.3: h = w / 1.3
            btn[0].setIconSize(QSize(w, h))
            # 掩膜,不规则图
            # pix = QPixmap(btn[9])
            # btn[0].setFixedSize(pix.size())
            # btn[0].setMask(pix.mask())

            # self.btn_home_voice.clicked.connect(self._init_voice_ui__)
            btn[0].clicked.connect(self.leave_home_event)

        self._home_reload()

    @layout_dele
    def _home_reload(self, *args):
        # 更新forward btn
        if func_historys[2]:
            self.btn_top_forward.setVisible(True)
        else:
            self.btn_top_forward.setVisible(False)
        self.btn_top_back.setVisible(False)
        for btn in self.home_btns:
            btn[0].setVisible(True)

        return self.glayout_home

    def bottom_pbar_changed(self, *args):
        pass

    def set_bottom_pabr_value(self, value=None):
        self.Outter_Run.value = list(range(101))
        self.Outter_Run.start()

    def dict_get_value(self, dicts, value='', grade=-1):
        """遍历字典并返回所有数据"""
        grade += 1
        if isinstance(dicts, dict):
            for k, v in dicts.items():
                if isinstance(v, dict):
                    value += '{}{}:\n'.format('  ' * grade, k)
                    value = self.dict_get_value(v, value, grade)
                elif isinstance(v, tuple) or isinstance(v, list):
                    value += "{}{}:\n".format('  ' * grade, k)
                    value = self.list_get_value(v, value, grade)
                else:
                    value += '{}{}:{}\n'.format('  ' * grade, k, v)
        elif isinstance(dicts, tuple) or isinstance(dicts, list):
            value = self.list_get_value(dicts, value, grade)
        else:
            value += '{}{}\n'.format('  ' * grade, dicts)
        return value

    def list_get_value(self, lists, value='', grade=-1):
        """遍历列表并返回所有数据"""
        if isinstance(lists, tuple) or isinstance(lists, list):
            for l in lists:
                if isinstance(lists, tuple) or isinstance(lists, list):
                    value = self.list_get_value(l, value, grade)
                elif isinstance(l, dict):
                    value = self.dict_get_value(l, value, grade)
                else:
                    if str(l).replace('\s', '').replace('\n', ''):
                        value += "{}{}:\n".format('  ' * grade, l)
                    else:
                        value += "{}{}\n".format('  ' * grade, l)
        elif isinstance(lists, dict):
            value = self.dict_get_value(lists, value, grade)

        else:
            if str(lists).replace('\n', '').replace('\t', ''):
                value += "{}{}:\n".format('  ' * grade, lists)
            else:
                value += "{}{}\n".format('  ' * grade, lists)

        return value

    def dict_get_value_by_key(self, dicts, key, value=''):
        """遍历字典并返回指定键值的所有数据"""
        def list_get_dict(lists, _key, _value=''):
            """遍历列表并返回所有数据"""
            if isinstance(lists, tuple) or isinstance(lists, list):
                for l in lists:
                    if isinstance(lists, tuple) or isinstance(lists, list):
                        _value = list_get_dict(l, _key, _value)
                    elif isinstance(l, dict):
                        _value = self.dict_get_value_by_key(l, _key, _value)
            elif isinstance(lists, dict):
                _value = self.dict_get_value_by_key(lists, _key, _value)
            return _value

        if isinstance(dicts, dict):
            if key in dicts.keys(): value += dicts.get(key) + '\n'
            for k, v in dicts.items():
                if isinstance(v, dict):
                    value = self.dict_get_value_by_key(v, key, value)
                elif isinstance(v, tuple) or isinstance(v, list):
                    value = list_get_dict(v, key, value)

        elif isinstance(dicts, tuple) or isinstance(dicts, list):
            value = list_get_dict(dicts, key, value)

        return value

    @catch_except
    def text_to_newline(self, text, length, temp='', *args):
        if len(text) > length:
            temp += text[:length] + '\r\n'
            return self.text_to_newline(text[length:], length, temp)

        else:
            temp += text
            print(temp)
            return temp

    def resizeEvent_ui(self, a0: QtGui.QResizeEvent) -> None:
        value = int(self.width() * 0.2 / 6)
        self.glayout_home.setSpacing(value)
        pass

    def paintEvent_main(self, a0: QtGui.QPaintEvent) -> None:

        # 背景
        painter = QPainter(self)
        painter.drawPixmap(self.rect(),
                           QPixmap('{}/Ico/bg_img.png'.format(ROOTDIR)))

    def dirs_to_files(self, path):
        my_files = []
        if os.path.isfile(path):
            my_files.append(path)
        elif os.path.isdir(path):
            alls = list(os.walk(path))
            for files in alls:
                for index, file in enumerate(files[2]):
                    filepath = r'{}\{}'.format(files[0], file)
                    my_files.append(filepath)
        if my_files:
            return my_files
        return False

    def setVisible_by_layout(self, layout, state):
        """隐藏或显示布里的控件"""
        for i in range(layout.count()):
            widget = layout.itemAt(i)
            if widget.__doc__.startswith('QGridLayout'):
                self.setVisible_by_layout(widget, state)
            else:
                widget.widget().setVisible(state)