コード例 #1
0
ファイル: CaseModel.py プロジェクト: 278524255/CaseModeling
 def sublevel_help(self):
     try:
         self.help_widget = QtWidgets.QWidget()
         self.window_help = Ui_Form_Help()
         self.window_help.setupUi(self.help_widget)
     except:
         logger.exception("发现错误:")
コード例 #2
0
ファイル: CaseModel.py プロジェクト: 278524255/CaseModeling
class Ui_Form_Main(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(679, 589)
        # module
        self.label_module = QtWidgets.QLabel(Form)
        self.label_module.setGeometry(QtCore.QRect(10, 29, 61, 20))
        self.label_module.setObjectName("label_module")
        self.comboBox_module = QtWidgets.QComboBox(Form)
        self.comboBox_module.setGeometry(QtCore.QRect(90, 20, 91, 31))
        self.comboBox_module.setObjectName("comboBox_module")
        self.comboBox_module_handle()
        self.comboBox_module_current_data = self.comboBox_module.currentText()
        #
        self.label_thirdlevelPreview = QtWidgets.QLabel(Form)
        self.label_thirdlevelPreview.setGeometry(QtCore.QRect(260, 50, 81, 20))
        self.label_thirdlevelPreview.setObjectName("label_thirdlevelPreview")
        self.textEdit_thirdlevel = QtWidgets.QTextEdit(Form)
        self.textEdit_thirdlevel.setGeometry(QtCore.QRect(350, 20, 201, 91))
        self.textEdit_thirdlevel.setObjectName("textEdit")
        self.pushButton_addThirdlevel = QtWidgets.QPushButton(Form)
        self.pushButton_addThirdlevel.setGeometry(QtCore.QRect(560, 80, 81, 31))
        self.pushButton_addThirdlevel.setObjectName("pushButton_addThirdlevel")
        # toplevel
        self.label_toplevel = QtWidgets.QLabel(Form)
        self.label_toplevel.setGeometry(QtCore.QRect(10, 89, 61, 20))
        self.label_toplevel.setObjectName("label_toplevel")
        self.comboBox_toplevel = QtWidgets.QComboBox(Form)
        self.comboBox_toplevel.setGeometry(QtCore.QRect(90, 80, 91, 31))
        self.comboBox_toplevel.setObjectName("comboBox_toplevel")
        self.comboBox_toplevel_handle()
        self.comboBox_toplevel_current_data = self.comboBox_toplevel.currentText()
        # sublevel
        self.label_sublevel = QtWidgets.QLabel(Form)
        self.label_sublevel.setGeometry(QtCore.QRect(13, 210, 61, 20))
        self.label_sublevel.setObjectName("label_sublevel")
        self.listWidget_sublevel = QtWidgets.QListWidget(Form)
        self.listWidget_sublevel.setGeometry(QtCore.QRect(90, 138, 201, 191))
        self.listWidget_sublevel.setObjectName("listWidget_sublevel")
        # 默认选中第一个
        self.listWidget_sublevel_handle(self.comboBox_toplevel_current_data)
        # thirdlevel
        self.label_thirdlevel = QtWidgets.QLabel(Form)
        self.label_thirdlevel.setGeometry(QtCore.QRect(300, 218, 41, 20))
        self.label_thirdlevel.setObjectName("label_thirdlevel")
        self.listWidget_thirdlevel = QtWidgets.QListWidget(Form)
        self.listWidget_thirdlevel.setGeometry(QtCore.QRect(350, 139, 201, 191))
        # 设定listWidget为可多选
        self.listWidget_thirdlevel.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
        self.listWidget_thirdlevel.setObjectName("listWidget_thirdlevel")
        self.listWidget_thirdlevel_handle()
        #
        self.pushButton_deleteThirdlevel = QtWidgets.QPushButton(Form)
        self.pushButton_deleteThirdlevel.setGeometry(QtCore.QRect(560, 260, 81, 31))
        self.pushButton_deleteThirdlevel.setObjectName("pushButton_deleteThirdlevel")
        # casemodel
        self.label_caseModel = QtWidgets.QLabel(Form)
        self.label_caseModel.setGeometry(QtCore.QRect(13, 450, 61, 20))
        self.label_caseModel.setObjectName("label_caseModel")
        self.listWidget_caseModel = QtWidgets.QListWidget(Form)
        self.listWidget_caseModel.setGeometry(QtCore.QRect(90, 368, 261, 192))
        self.listWidget_caseModel.setObjectName("listWidget_caseModel")
        self.listWidget_casemodel_handle()
        # button
        self.pushButton_deleteSelection = QtWidgets.QPushButton(Form)
        self.pushButton_deleteSelection.setGeometry(QtCore.QRect(380, 530, 81, 31))
        self.pushButton_deleteSelection.setObjectName("pushButton_deleteSelection")
        self.pushButton_toExcel = QtWidgets.QPushButton(Form)
        self.pushButton_toExcel.setGeometry(QtCore.QRect(560, 488, 101, 31))
        self.pushButton_toExcel.setObjectName("pushButton_toExcel")
        self.pushButton_resetAll = QtWidgets.QPushButton(Form)
        self.pushButton_resetAll.setGeometry(QtCore.QRect(560, 528, 101, 31))
        self.pushButton_resetAll.setObjectName("pushButton_resetAll")
        self.pushButton_addToCaseModel = QtWidgets.QPushButton(Form)
        self.pushButton_addToCaseModel.setGeometry(QtCore.QRect(560, 300, 81, 31))
        self.pushButton_addToCaseModel.setObjectName("pushButton_addToCaseModel")
        self.pushButton_sublevel_help = QtWidgets.QPushButton(Form)
        self.pushButton_sublevel_help.setGeometry(QtCore.QRect(560, 448, 101, 31))
        self.pushButton_sublevel_help.setObjectName("pushButton_sublevel_help")
        self.retranslateUi(Form)
        # 下拉框变更事件
        self.comboBox_module.currentTextChanged.connect(self.comboBox_module_change_handle)
        # 下拉框变更事件
        self.comboBox_toplevel.currentTextChanged.connect(self.listWidget_sublevel_handle)
        # 次层元素选择与选项联动事件
        self.listWidget_sublevel.itemSelectionChanged.connect(self.listWidget_thirdlevel_handle)
        # 重新设定按钮事件
        self.pushButton_addThirdlevel.clicked.connect(self.add_thirdlevel)
        self.pushButton_resetAll.clicked.connect(self.clear_all)
        self.pushButton_deleteThirdlevel.clicked.connect(self.delete_thirdlevel)
        self.pushButton_addToCaseModel.clicked.connect(self.add_to_casemodel)
        self.pushButton_deleteSelection.clicked.connect(self.delete_selection)
        self.pushButton_toExcel.clicked.connect(self.to_excel)
        self.pushButton_sublevel_help.clicked.connect(self.sublevel_help)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "测试建模工具"))
        self.pushButton_deleteSelection.setText(_translate("Form", "删除选定"))
        self.label_caseModel.setText(_translate("Form", "已设定项"))
        self.label_thirdlevel.setText(_translate("Form", "选项"))
        self.label_sublevel.setText(_translate("Form", "次层元素"))
        self.pushButton_toExcel.setText(_translate("Form", "导出excel"))
        self.label_toplevel.setText(_translate("Form", "顶层元素"))
        self.pushButton_resetAll.setText(_translate("Form", "重新设定"))
        self.pushButton_addToCaseModel.setText(_translate("Form", "添加"))
        self.pushButton_sublevel_help.setText(_translate("Form", "次层元素说明"))
        self.label_module.setText(_translate("Form", "模块"))
        self.pushButton_addThirdlevel.setText(_translate("Form", "添加"))
        self.pushButton_deleteThirdlevel.setText(_translate("Form", "删除选定"))
        self.label_thirdlevelPreview.setText(_translate("Form", "预添加的选项"))

    # 顶层元素下拉框加载数据方法
    def comboBox_module_handle(self):
        comboBox_data = DBManager().query("modules", "module")
        for i in range(len(comboBox_data)):
            self.comboBox_module.addItem(comboBox_data[i])

    # 顶层元素下拉框加载数据方法
    def comboBox_module_change_handle(self):
        self.listWidget_thirdlevel_handle()
        self.listWidget_casemodel_handle()

    # 顶层元素下拉框加载数据方法
    def comboBox_toplevel_handle(self):
        comboBox_data = DBManager().query("toplevel", "toplevel_element")
        for i in range(len(comboBox_data)):
            self.comboBox_toplevel.addItem(comboBox_data[i])

    # 次层元素加载数据方法
    def listWidget_sublevel_handle(self, comboBox_current_data):
        try:
            self.listWidget_sublevel.clear()
            condition_List = list()
            condition_List.append("toplevel_element='" + comboBox_current_data + "'")
            toplevel_id = DBManager().query("toplevel", "toplevel_id", condition_List)
            condition_List.clear()
            condition_List.append("toplevel_id=" + toplevel_id[0])
            sublevel_element = DBManager().query("sublevel", "sublevel_element", condition_List)
            for i in sublevel_element:
                self.listWidget_sublevel.addItem(i)
            self.listWidget_sublevel.setCurrentRow(0)
        except:
            logger.exception("发现错误:")

    # 三层元素加载数据方法
    def listWidget_thirdlevel_handle(self):
        try:
            # 获取列表中选中的值
            self.listWidget_thirdlevel.clear()
            condition_List = list()
            module = self.comboBox_module.currentText()
            condition_List.clear()
            condition_List.append("module='" + module + "'")
            module_id = DBManager().query("modules", "module_id", condition_List)[0]
            thirdlevel_widget = self.listWidget_sublevel.currentItem()
            row_data = thirdlevel_widget.text()
            condition_List.clear()
            condition_List.append("sublevel_element='" + row_data + "'")
            sublevel_id = DBManager().query("sublevel", "sublevel_id", condition_List)
            condition_List.clear()
            condition_List.append("sublevel_id='" + sublevel_id[0] + "'")
            condition_List.append("module_id='" + str(module_id) + "'")
            sublevel_element = DBManager().query("thirdlevel", "thirdlevel_element", condition_List)
            for i in sublevel_element:
                self.listWidget_thirdlevel.addItem(i)
        except:
            logger.exception("发现错误:")

    # 添加第三层元素选项
    def add_thirdlevel(self):
        try:
            data_dict = dict()
            condition_list = list()
            module = self.comboBox_module.currentText()
            condition_list.clear()
            condition_list.append("module='" + module + "'")
            module_id = DBManager().query("modules", "module_id", condition_list)[0]
            thirdlevel_element = self.textEdit_thirdlevel.toPlainText()
            # 由于casemodel界面展示时包含“:”和“-”,所以在处理包含这两个符号的选项时会出错,这个弹提示不允许这个的数据输入
            if ":" in thirdlevel_element or ":" in thirdlevel_element or "-" in thirdlevel_element:
                msg_box = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Warning, "错误输入提示", "不允许输入冒号或横线!")
                msg_box.exec_()
            else:
                items_sublevel = self.listWidget_sublevel.selectedItems()
                for i_sublevel in items_sublevel:
                    sublevel_element = i_sublevel.text()
                    condition_list.clear()
                    condition_list.append("sublevel_element='" + i_sublevel.text() + "'")
                    sublevel_id = DBManager().query("sublevel", "sublevel_id", condition_list)[0]
                condition_list.clear()
                condition_list.append("module_id='" + module_id + "'")
                module_id_thirdlevel = DBManager().query("thirdlevel", "module_id", condition_list)
                thirdlevel_id = str(len(module_id_thirdlevel) + 1)
                logger.debug(thirdlevel_id)
                condition_list.clear()
                if thirdlevel_element is not "":
                    data_dict["thirdlevel_element"] = thirdlevel_element
                data_dict["sublevel_id"] = sublevel_id
                data_dict["module_id"] = module_id
                data_dict["thirdlevel_id"] = thirdlevel_id
                DBManager().insert_data("thirdlevel", data_dict)
                self.textEdit_thirdlevel.clear()
                self.listWidget_thirdlevel_handle()
        except:
            logger.exception("发现错误:")

    # 生成的建模数据加载方法
    def listWidget_casemodel_handle(self):
        try:
            self.listWidget_caseModel.clear()
            condition_List = list()
            module = self.comboBox_module.currentText()
            condition_List.clear()
            condition_List.append("module='" + module + "'")
            module_id = DBManager().query("modules", "module_id", condition_List)[0]
            condition_List.clear()
            condition_List.append("module_id='" + str(module_id) + "'")
            logger.debug("=====================================================================")
            logger.debug(condition_List)
            toplevel_element_list = DBManager().query("casemodel", "toplevel_element", condition_List)
            logger.debug(toplevel_element_list)
            sublevel_element_list = DBManager().query("casemodel", "sublevel_element", condition_List)
            thirdlevel_element_list = DBManager().query("casemodel", "thirdlevel_element", condition_List)
            casemodel_list = list()
            for j in range(len(toplevel_element_list)):
                casemodel_list.append(
                    toplevel_element_list[j] + "-" + sublevel_element_list[j] + ":" + thirdlevel_element_list[j]
                )
            logger.debug(casemodel_list)
            for k in casemodel_list:
                self.listWidget_caseModel.addItem(k)
        except:
            logger.exception("发现错误:")

    # 根据操作生成模型数据方法
    def add_to_casemodel(self):
        try:
            module = self.comboBox_module.currentText()
            condition_List = list()
            condition_List.clear()
            condition_List.append("module='" + module + "'")
            module_id = DBManager().query("modules", "module_id", condition_List)[0]
            toplevel_element = self.comboBox_toplevel.currentText()
            items_sublevel = self.listWidget_sublevel.selectedItems()
            items_thirdlevel = self.listWidget_thirdlevel.selectedItems()
            for i_sublevel in items_sublevel:
                sublevel_element = i_sublevel.text()
                condition_List.clear()
                condition_List.append("sublevel_element='" + i_sublevel.text() + "'")
                sublevel_id = DBManager().query("sublevel", "sublevel_id", condition_List)[0]

            # 使用字典记录即将添加的值,并调用公用方法添加数据
            for i_thirdlevel in items_thirdlevel:
                data_dict = dict()
                condition_List.clear()
                condition_List.append("sublevel_id='" + sublevel_id + "'")
                logger.debug(sublevel_id)
                condition_List.append("module_id='" + str(module_id) + "'")
                condition_List.append("thirdlevel_element='" + i_thirdlevel.text() + "'")
                logger.debug(condition_List)
                thirdlevel_id = DBManager().query("thirdlevel", "thirdlevel_id", condition_List)[0]
                condition_List.clear()
                condition_List.append("module_id='" + str(module_id) + "'")
                condition_List.append("thirdlevel_element='" + i_thirdlevel.text() + "'")
                casemodel_thirdlevel_id = DBManager().query("casemodel", "thirdlevel_id", condition_List)
                if thirdlevel_id not in casemodel_thirdlevel_id:
                    data_dict["thirdlevel_id"] = thirdlevel_id
                    thirdlevel_element = i_thirdlevel.text()
                    data_dict["thirdlevel_element"] = thirdlevel_element
                    data_dict["sublevel_id"] = sublevel_id
                    data_dict["sublevel_element"] = sublevel_element
                    condition_List.clear()
                    condition_List.append("toplevel_element='" + toplevel_element + "'")
                    toplevel_id = DBManager().query("toplevel", "toplevel_id", condition_List)[0]
                    data_dict["toplevel_id"] = toplevel_id
                    data_dict["toplevel_element"] = toplevel_element
                    data_dict["module_id"] = module_id
                    logger.debug(data_dict)
                    DBManager().insert_data("casemodel", data_dict)
            self.listWidget_casemodel_handle()
        except:
            logger.exception("发现错误:")

    # 清除所有数据方法
    def clear_all(self):
        try:
            listWidget_count = self.listWidget_caseModel.count()
            module = self.comboBox_module.currentText()
            condition_list = list()
            condition_list.clear()
            condition_list.append("module='" + module + "'")
            module_id = DBManager().query("modules", "module_id", condition_list)[0]
            condition_list.clear()
            condition_list.append("module_id='" + module_id + "'")
            while listWidget_count != 0:
                DBManager().delete("casemodel", condition_list)
                listWidget_count = listWidget_count - 1
            self.listWidget_caseModel.clear()
        except:
            logger.exception("发现错误:")

    # 删除第三层元素选项
    def delete_thirdlevel(self):
        try:
            condition_list = list()
            module = self.comboBox_module.currentText()
            condition_list.clear()
            condition_list.append("module='" + module + "'")
            module_id = DBManager().query("modules", "module_id", condition_list)[0]
            condition_list.clear()
            try:
                # 获取当前选中的对象list,currentItems是当前点过的选项而不是选中的
                delete_data_object = self.listWidget_thirdlevel.selectedItems()
                delete_data_list = list()
                for i in delete_data_object:
                    delete_data_list.append(i.text())
            except:
                delete_data_object = None
            if delete_data_object is not None:
                for i in delete_data_list:
                    logger.debug(i)
                    thirdlevel_data = "thirdlevel_element='" + i + "'"
                    logger.debug(thirdlevel_data)
                    condition_list.clear()
                    condition_list.append(thirdlevel_data)
                    condition_list.append("module_id='" + str(module_id) + "'")
                    logger.debug(condition_list)
                    DBManager().delete("thirdlevel", condition_list)
                    self.listWidget_thirdlevel_handle()
        except:
            logger.exception("发现错误:")

    # 删除所选项方法
    def delete_selection(self):
        try:
            condition_list = list()
            module = self.comboBox_module.currentText()
            condition_list.clear()
            condition_list.append("module='" + module + "'")
            module_id = DBManager().query("modules", "module_id", condition_list)[0]
            condition_list.clear()
            try:
                delete_data = self.listWidget_caseModel.currentItem().text()
            except:
                delete_data = ""
            if delete_data is not "":
                thirdlevel_data = "thirdlevel_element='" + delete_data.split(":")[1] + "'"
                condition_list.append(thirdlevel_data)
                condition_list.append("module_id='" + str(module_id) + "'")
                logger.debug(condition_list)
                DBManager().delete("casemodel", condition_list)
                self.listWidget_casemodel_handle()
        except:
            logger.exception("发现错误:")

    # 生成excel方法
    def to_excel(self):
        try:
            # toplevel_id在sublevel表中个数索引从1开始
            toplevel_count_list = list()
            condition_list = list()
            module = self.comboBox_module.currentText()
            condition_list.clear()
            condition_list.append("module='" + module + "'")
            module_id = DBManager().query("modules", "module_id", condition_list)[0]
            logger.debug(module_id)
            logger.debug(condition_list)
            for i in range(4):
                i = i + 1
                condition_list.clear()
                condition_list.append("toplevel_id='" + str(i) + "'")
                toplevel_count_list.append(len(DBManager().query("sublevel", "sublevel_elemnt", condition_list)))
            TEMPLATE_FILE = "./templates/测试建模模板.xlsx"
            SHEET_COUNT = 4
            real_index_list = list()
            condition_list.clear()
            condition_list.append("module_id='" + str(module_id) + "'")
            toplevel_id = DBManager().query("casemodel", "toplevel_id", condition_list)
            # sublevel_id数据索引从1开始
            sublevel_id = DBManager().query("casemodel", "sublevel_id", condition_list)
            for j in sublevel_id:
                real_index = int(j)
                toplevel_count_index = 0
                # 由于sublevel_id数据索引和sublevel表中toplevel_id个数索引均从1开始
                # 故两者之差大于0时认为当前sublevel_element为下一个顶级元素的次级元素,需要做差取真实表格索引
                while (real_index - toplevel_count_list[toplevel_count_index]) > 0:
                    real_index = real_index - toplevel_count_list[toplevel_count_index]
                    toplevel_count_index = toplevel_count_index + 1
                real_index_list.append(real_index)
            thirdlevel_element = DBManager().query("casemodel", "thirdlevel_element", condition_list)
            data_list = list()
            data_list.append(toplevel_id)
            data_list.append(real_index_list)
            data_list.append(thirdlevel_element)
            logger.debug(data_list)
            OutputWithTemplate().output_with_excel(TEMPLATE_FILE, SHEET_COUNT, data_list)
        except:
            logger.exception("发现错误:")

    # 打开次层元素帮助方法
    def sublevel_help(self):
        try:
            self.help_widget = QtWidgets.QWidget()
            self.window_help = Ui_Form_Help()
            self.window_help.setupUi(self.help_widget)
        except:
            logger.exception("发现错误:")