Exemplo n.º 1
0
class Tab(LibTab):
    def __init__(self):
        super().__init__()
        self.rows = []
        self.initData()
        self.initUI()

    def initData(self):
        self.rows = []
        self.main_title = None

    def initUI(self):


        self.text_panel_code = QTextEdit(objectName="text3")
        self.text_panel_code.setToolTip('Код для всавки в <b>проект</b>')

        button_generat = widj_tab1.button_setting("Сгенерировать", self.generat)
        button_view = widj_tab1.button_setting("Отобразить", self.view_code)

        self.w_screen = widj_tab1.lile_label("Ширина", '1920')
        self.indent_w = widj_tab1.lile_label("Отступ w", '50')
        self.indent_h = widj_tab1.lile_label("Отступ h", '50')
        self.name_wind = widj_tab1.lile_label_name("Имя", "PRG_TEST")

        self.table = TableSimple(name=["Блок"])

        self.status = QLabel('')
        self.set_status(status="ОК", color='#0b5506')

        self.main_layout.addWidget(self.text_panel_code, 0, 0, 27, 1)
        self.main_layout.addWidget(self.table, 0, 1, 27, 1)
        self.main_layout.addWidget(self.w_screen, 12, 3, 1, 2)

        self.main_layout.addWidget(self.status, 6, 3, 1, 2)
        self.main_layout.addWidget(self.indent_w, 14, 3, 1, 2)
        self.main_layout.addWidget(self.indent_h, 15, 3, 1, 2)
        self.main_layout.addWidget(self.name_wind, 11, 3, 1, 2)
        self.main_layout.addWidget(widj_tab1.line_btn_simple(self), 0, 3, 1, 2)
        self.main_layout.addWidget(button_view, 17, 3, 1, 2)
        self.main_layout.addWidget(button_generat, 18, 3, 1, 2)



    def set_status(self, color, status):
        self.status.setText(f"""
                               Статус: <b style="color: {color};">{status}</b> 
                               """)

    def reverce_code(self):
        try:
            self.cur = self.con.cursor()
            new_str = ""

            rows_str = self.text_panel_code.toPlainText().split('\n')
            for string_some in rows_str:
                if string_some == '':
                    break

                slovo_pos = re.search(r'__EXVAR_\d+', string_some)
                if slovo_pos is None:
                    new_str += '\n'
                    continue
                slovo = string_some[slovo_pos.start():slovo_pos.end()]

                result = re.sub(r'__EXVAR_\d+', f"Э{self.get_card_from_exvar(slovo)}У", string_some)
                new_str += result + '\n'

            self.text_panel_view.setText(new_str)
        except Exception as e:
            self.text_panel_view.setText("Упс, ошибочка вышла :(")
            QMessageBox().warning(self, "Ошибка", str(e), QMessageBox.Ok, QMessageBox.Ok)

    def get_count_of_in_out(self, type_id):
        count = [0, 0]
        for direction in [1, 2]:
            select = f"select count(*) from ISAOBJFIELDS where ISAOBJID in (select id from ISAOBJ where id = {type_id}) and direction = {direction}"
            self.cur.execute(select)
            try:
                count[direction - 1] = [count[0] for count in self.cur][0]
            except:
                pass

        return 20 + max(count) * 20

    def get_type_from_marka(self, marka):
        select = f"select tid from ISACARDS where CARDSID in (select id from CARDS where marka = '{marka}')"
        self.cur.execute(select)
        return [id[0] for id in self.cur][0]

    def get_type_name(self, type_id):
        select = f"select name from ISAOBJ where id = {type_id}"
        self.cur.execute(select)
        return [id[0] for id in self.cur][0]

    def get_temp(self, marka):
        type_id = self.get_type_from_marka(marka)
        height = self.get_count_of_in_out(type_id)
        type_name = self.get_type_name(type_id)
        weight = 100 + len(type_name) * 10
        return height, weight, type_name

    # def generat(self):
    #     try:
    #         self.cur = self.con.cursor()
    #
    #         template_num = []
    #         env1 = Environment(loader=FileSystemLoader('.'))
    #         template_num.append(env1.get_template('templates/fbd_xml/block_xml.html'))
    #         env = Environment(loader=FileSystemLoader('.'))
    #         template = env.get_template('templates/fbd_xml/temp_xml.html')
    #         page = []
    #         x0 = 50
    #         y0 = 50
    #         dx0 = int(self.indent_w.line_edit.text())
    #         dy = int(self.indent_h.line_edit.text())
    #         dx = dx0
    #         y = y0
    #         x = x0
    #         ymax = int(self.heigh_screen.line_edit.text())
    #         marks = self.data_row
    #
    #         for marka in marks:
    #             height, weight, type_name = self.get_temp(marka)
    #             con = dict(x=x, y=y, WIDTH=weight, HEIGHT=height, type=type_name, marka=marka)
    #             page.append(str(template_num[0].render(name_page=self.name_wind.line_edit.text(), con=con)))
    #             y += height + dy
    #             if weight + dx0 > dx:
    #                 dx = weight + dx0
    #             if y >= ymax:
    #                 y = y0
    #                 x += dx
    #                 dx = dx0
    #
    #         options = QFileDialog.Options()
    #         options |= QFileDialog.DontUseNativeDialog
    #         fileName, _ = QFileDialog.getSaveFileName(self, "Сохранить xml", "", "xml (*.xml)", options=options)
    #
    #         if fileName == '':
    #             return
    #
    #         if fileName.find('.xml') == -1:
    #             fileName += '.xml'
    #         with open(fileName, "w", encoding='utf8') as f:
    #             f.write(template.render(blocks=page))
    #
    #
    #     except Exception as e:
    #         self.text_panel_code.setText("Упс, ошибочка вышла :(")
    #         QMessageBox().warning(self, "Ошибка", str(e), QMessageBox.Ok, QMessageBox.Ok)
    #         return

    def generat(self):
        try:
            self.cur = self.con.cursor()
            marks = [self.table.item(row, 0).text() for row in range(self.table.rowCount())]
            x0 = int(self.indent_w.line_edit.text())
            y0 = int(self.indent_h.line_edit.text())
            xmax = int(self.w_screen.line_edit.text())

            self.thread_bd = CloneThread(self.con, marks, x0, y0, xmax)  # This is the thread object
            self.thread_bd.signal.connect(self.thread_finished)
            self.thread_bd.bad_signal.connect(self.bad_finished)
            self.thread_bd.start()
            self.set_status(status="Перевдим ...", color='#0e385e')

        except Exception as e:
            QMessageBox().warning(self, "Ошибка", str(e), QMessageBox.Ok, QMessageBox.Ok)
            self.set_status(status="Ошибка", color='#780d04')
            return

    def bad_finished(self, error):
        QMessageBox().warning(self, "Ошибка", str(error), QMessageBox.Ok, QMessageBox.Ok)
        self.set_status(status="Ошибка", color='#780d04')

    def thread_finished(self, list_bloks, list_links, brack):
        ''' Сигналы из потока '''
        self.set_status(status="OK", color='#0b5506')
        env = Environment(loader=FileSystemLoader('.'))
        main = env.get_template('templates/tab5/MAIN.html')

        options = QFileDialog.Options()
        # options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getSaveFileName(self, "Сохранить xml", "", "xml (*.xml)", options=options)
        if fileName == '':
            return
        if fileName.find('.xml') == -1:
            fileName += '.xml'
        with open(fileName, "w", encoding='utf8') as f:
            f.write(main.render(bloks=list_bloks, links=list_links, name=self.name_wind.line_edit.text()))

        if len(brack) != 0:
            QMessageBox().warning(self, "Не удалось найти",
                                  'Следующие блоки отсутствуют:           \n' + str(', '.join(brack)), QMessageBox.Ok,
                                  QMessageBox.Ok)

        self.set_status(status="Готово", color='#0b5506')

    def view_code(self):
        data_row = []
        text_code = self.text_panel_code.toPlainText().split('\n')
        self.table.setRowCount(0)
        for text in text_code:
            block = text.split('.')
            if len(block) > 1 and block[0] not in data_row:
                index = self.table.rowCount()
                self.table.setRowCount(index + 1)  # и одну строку в таблице
                self.table.setItem(index, 0, QTableWidgetItem(block[0]))
                data_row.append(block[0])
Exemplo n.º 2
0
class Tab(LibTab):
    def __init__(self):
        super().__init__()
        self.new_templates = Template()
        self.rows = []
        self.initData()
        self.initUI()

    def initData(self):
        self.rows = []
        self.main_title = None

    def initUI(self):

        self.table = TableSimple(name=["MARKA"])
        # self.table.setSelectionBehavior(QAbstractItemView.SelectItems)  # Выделяет всю строку

        self.table_for_test = TableSimple(name=["SOMETHING"])
        # self.table_for_test.setSelectionBehavior(QAbstractItemView.SelectItems)  # Выделяет всю строку
        # self.table_for_test.setMaximumWidth(500)

        button_open = SimpleBtn(label="Открыть исх. файл",
                                click_func=self.open_xml)

        self.count_element = LineLabel(
            label="Кол-во в ряду/строке", number='20')
        self.dx = LineLabel(label="dx", number='100')
        self.dy = LineLabel(label="dy ", number='100')

        button_generat = SimpleBtn(label="Сгенерировать",
                                   click_func=self.gerait_xml)
        button_open_teml = SimpleBtn(label="Открыть шаблон",
                                     click_func=self.get_tempalte)
        button_save_teml = SimpleBtn(label="Сохранить шаблон",
                                     click_func=self.save_template)

        self.xml_template = SimpleLabel(text="None", WordWrap=True)

        self.table.setMaximumWidth(1700)
        self.table.setSizeAdjustPolicy(QAbstractScrollArea.AdjustToContents)

        self.text_panel = TextEditor(
            objectName="text1",
            tooltip='Правила вставки',
            text=
            """[f"2/PLC_GP_21_1BR/1/{str(item1).rjust(2,'0')}/DI_DIG_3A" for item1 in range(1, 3)]"""
        )

        self.offset = CheckBox(label='Смещение по оси x',
                               value=True)

        button_generat_tab2 = SimpleBtn(label="get_table2",
                                        click_func=self.generate_table2)

        self.xml_template = SimpleLabel(text="None", WordWrap=True)

        splitter_v = QSplitter(Qt.Vertical)
        splitter_v.addWidget(self.table_for_test)
        splitter_v.addWidget(self.text_panel)

        splitter = QSplitter(Qt.Horizontal)
        splitter.addWidget(self.table)
        splitter.addWidget(splitter_v)

        self.main_layout.addWidget(splitter, 0, 0, 27, 2)

        self.main_layout.addWidget(button_generat, 23, 2, 1, 2)
        self.main_layout.addWidget(button_generat_tab2, 5, 2, 1, 2)
        self.main_layout.addWidget(self.xml_template, 1, 2, 1, 2)

        self.main_layout.addWidget(button_open, 14, 2, 1, 2)
        self.main_layout.addWidget(button_open_teml, 16, 2, 1, 2)
        self.main_layout.addWidget(button_save_teml, 15, 2, 1, 2)

        self.main_layout.addWidget(self.count_element, 9, 2, 1, 2)
        self.main_layout.addWidget(self.dx, 11, 2, 1, 2)
        self.main_layout.addWidget(self.dy, 12, 2, 1, 2)
        self.main_layout.addWidget(self.offset, 8, 2, 1, 2)

    def get_tempalte(self):
        options = QFileDialog.Options()
        # options |= QFileDialog.DontUseNativeDialog
        path, _ = QFileDialog.getOpenFileName(self,
                                              'Открыть xml',
                                              "",
                                              "Xml (*.xml)",
                                              options=options)

        if path == '':
            return

        try:
            self.new_templates.get_tempalte(path)
            self.table_view_set()
            self.watch_path(path)
        except Exception as e:
            self.error_message()
            QMessageBox().warning(self, "Ошибка", str(e), QMessageBox.Ok,
                                  QMessageBox.Ok)

    def save_template(self):
        options = QFileDialog.Options()
        # options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getSaveFileName(self,
                                                  "Сохранить xml",
                                                  "",
                                                  "xml (*.xml)",
                                                  options=options)

        if fileName == '':
            return

        if fileName.find('.xml') == -1:
            fileName += '.xml'

        try:
            self.new_templates.save_to_file(fileName)
        except Exception as e:
            self.error_message()
            QMessageBox().warning(self, "Ошибка", str(e), QMessageBox.Ok,
                                  QMessageBox.Ok)

    def table_clean(self):
        self.table.setRowCount(0)

    def tab_view(self):
        # exec(f'connection = {self.text_panel.toPlainText()}')
        # connection = eval('[dict(MARKA=f"GP0011_SPPV_{item1}_P", NAME=f"{item2}",OBJSIGN=f"P",KLASSNAME="[ВСЕ]\Водоснабжение\ГП0011 СППВ",EVKLASSNAME="[Все технологические]\Водоснабжение\ГП0011 СППВ", PLCNAME="ICore_2") for item1, item2 in [["TO_K1", "Давление на входе насоса K1"],["FROM_K1", "Рабочее давление K1"],["TO_K8", "Давление на входе насоса K8"],["FROM_K8", "Рабочее давление K8"],["TO_K10", "Давление на входе насоса K10"],["FROM_K10", "Рабочее давление K10"],["TO_K14", "Давление на входе насоса K14"],["FROM_K14","Рабочее давление K14"]]]')
        # connection = eval(self.text_panel.toPlainText())
        pass

    def open_xml(self):
        options = QFileDialog.Options()
        # options |= QFileDialog.DontUseNativeDialog
        path, _ = QFileDialog.getOpenFileName(self,
                                              'Открыть xml',
                                              "",
                                              "Xml (*.xml)",
                                              options=options)

        if path == '':
            return

        try:
            with open(path, "r", encoding='UTF-8') as f:
                self.new_templates.open_xml(path)
                self.table_view_set()

            self.watch_path(path)
            self.dx.line_edit.setText(
                str(roundUpToMultiple(self.new_templates.maximum_x, 50)))
            self.dy.line_edit.setText(
                str(roundUpToMultiple(self.new_templates.maximum_y, 50)))

        except Exception as e:
            self.error_message()
            QMessageBox().warning(self, "Ошибка", str(e), QMessageBox.Ok,
                                  QMessageBox.Ok)

    def table_view_set(self):
        self.table.setColumnCount(
            len(self.new_templates.atr_dict.keys()) +
            1)  # Устанавливаем три колонки
        labels_list = ['№']
        labels_list.extend(list(self.new_templates.atr_dict.keys()))
        self.table.setHorizontalHeaderLabels(labels_list)
        self.table.setRowCount(1)  # и одну строку в таблице
        header = self.table.horizontalHeader()
        self.table.setItem(0, 0, QTableWidgetItem('1'))
        for in_col, key in enumerate(list(self.new_templates.atr_dict.keys())):
            self.table.setItem(
                0, in_col + 1,
                QTableWidgetItem(str(self.new_templates.atr_dict[key])))
            header.setSectionResizeMode(in_col + 1,
                                        QHeaderView.Stretch)  # Stretch)
        self.table.setWordWrap(True)

    def gerait_xml(self):
        try:
            bloks_templ = Environment(loader=BaseLoader).from_string(
                self.new_templates.bloks_data)
            links_templ = Environment(loader=BaseLoader).from_string(
                self.new_templates.links_data)
            env = Environment(loader=FileSystemLoader('.'))
            template = env.get_template('templates/tab11/main.html')

            options = QFileDialog.Options()
            # options |= QFileDialog.DontUseNativeDialog
            fileName, _ = QFileDialog.getSaveFileName(self,
                                                      "Сохранить xml",
                                                      "",
                                                      "xml (*.xml)",
                                                      options=options)

            if fileName == '':
                return

            if fileName.find('.xml') == -1:
                fileName += '.xml'

            with open(fileName, "w", encoding='utf8') as f:
                count_element_max = int(self.count_element.line_edit.text())
                x0 = 0
                y0 = 0
                x = x0
                y = y0
                dx = int(self.dx.line_edit.text())
                dy = int(self.dy.line_edit.text())

                list_atrib = ['X', 'Y', 'index']
                list_atrib.extend(list(self.new_templates.atr_dict.keys()))
                dicr_atr = collections.namedtuple('dicr_atr', list_atrib)
                links = []
                count = self.table.rowCount()
                index_of_element = 0
                bloks = []
                index_row = 1
                for index in range(count):

                    at = [
                        self.table.item(index, col).text()
                        for col in range(1, self.table.columnCount())
                    ]
                    my_dict = dicr_atr(x, y, index_of_element, *at)
                    links.append(str(links_templ.render(dict=my_dict)))
                    bloks.append(str(bloks_templ.render(dict=my_dict)))
                    if self.offset.isChecked():
                        x += dx
                        if index_row >= count_element_max:
                            x = x0
                            y += dy
                            index_row = 0
                    else:
                        y += dy
                        if index_row >= count_element_max:
                            y = y0
                            x += dx
                            index_row = 0
                    index_row += 1
                    index_of_element += self.new_templates.delta + 1
                f.write(template.render(bloks=bloks, links=links))
        except Exception as e:
            self.text_panel.setText('Что-то пошло не так')
            QMessageBox().warning(self, "Ошибка", str(e), QMessageBox.Ok,
                                  QMessageBox.Ok)

    @staticmethod
    def check_type(data):
        return '' if isinstance(data, type(None)) else data.text()

    def generate_table2(self):
        self.table_for_test.setRowCount(0)
        try:
            connection = eval(self.text_panel.toPlainText())
            for conn in connection:
                index = self.table_for_test.rowCount()
                self.table_for_test.setRowCount(
                    index + 1)  # и одну строку в таблице
                self.table_for_test.setRowHeight(index, 50)
                self.table_for_test.setItem(index, 0, QTableWidgetItem(conn))
            self.table_for_test.resizeRowsToContents()
        except Exception as e:
            self.table_for_test.setRowCount(1)
            self.table_for_test.setItem(0, 0, "Что-то не так")
            QMessageBox().warning(self, "Ошибка", str(e), QMessageBox.Ok,
                                  QMessageBox.Ok)

    def watch_path(self, path):
        now = datetime.now()
        self.xml_template.setText(path + '\n' + str(now.hour) + ':' +
                                  str(now.minute) + ':' + str(now.second))

    def error_message(self):
        self.xml_template.setText("Ошибка! :(")
Exemplo n.º 3
0
class Tab(LibTab):
    def __init__(self):
        super().__init__()
        self.rows = []
        self.initData()
        self.initUI()

    def initData(self):
        self.rows = []
        self.main_title = None

    def initUI(self):

        self.table = TableSimple(name=[
            "MARKA", "NAME", "KLASSNAME", "EVKLASSNAME", "PLCNAME",
            "PLC_ADRESS", "OBJSIGN"
        ])

        button_open = SimpleBtn(label="Открыть xml",
                                click_func=self.open_xml)
        button_except = SimpleBtn(label="Добавить",
                                  click_func=self.tab_view)
        button_clean = SimpleBtn(label="Очистить",
                                 click_func=self.table_clean)
        button_generat = SimpleBtn(label="Сгенерировать",
                                   click_func=self.gerait_xml)
        button_open_example = SimpleBtn(
            label="Отобразить пример",
            click_func=self.open_example_xml)

        self.xml_template = QLabel("None")
        self.xml_template.setWordWrap(True)

        self.text_panel = TextEditor(
            text=
            """[dict(MARKA=f"GP0011_SPPV_{item1}", NAME=f"{item2}", OBJSIGN=f"P", KLASSNAME="[ВСЕ]\Водоснабжение\ГП0011 СППВ", EVKLASSNAME="[Все технологические]\Водоснабжение\ГП0011 СППВ", PLCNAME="ICore_2") for item1, item2 in [["K12_WORK", "Работа"], ["K12_ALARM", "Авария"],["K13_WORK", "Работа"], ["K13_ALARM", "Авария"]]]""",
            height=200)

        self.main_layout.addWidget(self.table, 0, 0, 27, 1)
        self.main_layout.addWidget(self.text_panel, 27, 0, 1, 1)
        self.main_layout.addWidget(self.xml_template, 12, 2, 1, 2)

        self.main_layout.addWidget(button_clean, 15, 3, 1, 1)
        self.main_layout.addWidget(button_except, 15, 2, 1, 1)
        self.main_layout.addWidget(button_open, 14, 2, 1, 2)
        self.main_layout.addWidget(button_open_example, 6, 2, 1, 2)

        self.main_layout.addWidget(button_generat, 27, 2, 1, 2)

    def table_clean(self):
        self.table.setRowCount(1)

    def tab_view(self):
        connection = eval(self.text_panel.toPlainText())
        for conn in connection:
            index = self.table.rowCount()
            self.table.setRowCount(
                index + 1)  # и одну строку в таблице
            self.table.setRowHeight(index, 50)

            # self.table.setCellWidget(index, 0, widj_tab1.lineWap(conn.get('MARKA', '')))
            self.table.setItem(index, 0,
                               QTableWidgetItem(conn.get('MARKA', '')))
            self.table.setItem(index, 1, QTableWidgetItem(conn.get('NAME',
                                                                   '')))
            self.table.setItem(index, 2,
                               QTableWidgetItem(conn.get('KLASSNAME', '')))
            self.table.setItem(index, 3,
                               QTableWidgetItem(conn.get('EVKLASSNAME', '')))
            self.table.setItem(index, 4,
                               QTableWidgetItem(conn.get('PLCNAME', '')))
            self.table.setItem(index, 5,
                               QTableWidgetItem(conn.get('PLC_ADRESS', '')))
            self.table.setItem(index, 6,
                               QTableWidgetItem(conn.get('OBJSIGN', '')))
        self.table.resizeRowsToContents()

    def open_xml(self):
        options = QFileDialog.Options()
        # options |= QFileDialog.DontUseNativeDialog
        path, _ = QFileDialog.getOpenFileName(self,
                                              'Открыть xml',
                                              "",
                                              "Xml (*.xml)",
                                              options=options)

        if path == '':
            return

        with open(path, "r", encoding='UTF-8') as f:
            # contents = f.read()#.encode().decode('utf-8')
            dom = xml.dom.minidom.parse(path)
            dom.normalize()
            itemlist = dom.getElementsByTagName('TEHOBJ')
            for item in itemlist:
                item.attributes['MARKA'].value = "{{MARKA}}"
                item.attributes['EVKLASSNAME'].value = "{{EVKLASSNAME}}"
                item.attributes['KLASSNAME'].value = "{{KLASSNAME}}"
                item.attributes['NAME'].value = "{{NAME}}"
                item.attributes['PLCNAME'].value = "{{PLCNAME}}"
                item.attributes['OBJSIGN'].value = "{{OBJSIGN}}"
                item.attributes['PLC_ADRESS'].value = "{{PLC_ADRESS}}"

            now = datetime.now()
            self.xml_template.setText(path + '\n' + str(now.hour) + ':' +
                                      str(now.minute) + ':' + str(now.second))

            self.template_t = dom.toxml()
            self.template_t = self.template_t.replace(
                '<?xml version="1.0" ?><root>', '')
            self.template_t = self.template_t.replace('</root>', '')

    def open_example_xml(self):
        options = QFileDialog.Options()
        # options |= QFileDialog.DontUseNativeDialog
        path, _ = QFileDialog.getOpenFileName(self,
                                              'Открыть xml',
                                              "",
                                              "Xml (*.xml)",
                                              options=options)

        if path == '':
            return

        with open(path, "r", encoding='UTF-8') as f:
            # contents = f.read()#.encode().decode('utf-8')
            dom = xml.dom.minidom.parse(path)
            dom.normalize()
            itemlist = dom.getElementsByTagName('TEHOBJ')
            self.table.setRowCount(
                0)  # и одну строку в таблице
            for item in itemlist:
                index = self.table.rowCount()
                self.table.setRowCount(
                    index + 1)  # и одну строку в таблице
                self.table.setRowHeight(index, 50)

                # self.table.setCellWidget(index, 0, widj_tab1.lineWap(conn.get('MARKA', '')))
                self.table.setItem(
                    index, 0, QTableWidgetItem(item.attributes['MARKA'].value))
                self.table.setItem(
                    index, 1, QTableWidgetItem(item.attributes['NAME'].value))
                self.table.setItem(
                    index, 2,
                    QTableWidgetItem(item.attributes['KLASSNAME'].value))
                self.table.setItem(
                    index, 3,
                    QTableWidgetItem(item.attributes['EVKLASSNAME'].value))
                self.table.setItem(
                    index, 4,
                    QTableWidgetItem(item.attributes['PLCNAME'].value))
                self.table.setItem(
                    index, 5,
                    QTableWidgetItem(item.attributes['PLC_ADRESS'].value))
                self.table.setItem(
                    index, 6,
                    QTableWidgetItem(item.attributes['OBJSIGN'].value))
            self.table.resizeRowsToContents()

    def gerait_xml(self):
        try:
            template1 = Environment(loader=BaseLoader).from_string(
                self.template_t)
            env = Environment(loader=FileSystemLoader('.'))
            template = env.get_template('templates/tab2/main_.html')
            contents = []
            # connection = eval(self.text_panel.toPlainText())
            options = QFileDialog.Options()
            # options |= QFileDialog.DontUseNativeDialog
            fileName, _ = QFileDialog.getSaveFileName(self,
                                                      "Сохранить xml",
                                                      "",
                                                      "xml (*.xml)",
                                                      options=options)

            if fileName == '':
                return

            if fileName.find('.xml') == -1:
                fileName += '.xml'

            with open(fileName, "w", encoding='utf8') as f:
                count = self.table.rowCount()
                for index in range(count):
                    contents.append(
                        str(
                            template1.render(MARKA=self.check_type(
                                self.table.item(index, 0)),
                                             NAME=self.check_type(
                                                 self.table.item(index, 1)),
                                             OBJSIGN=self.check_type(
                                                 self.table.item(index, 6)),
                                             KLASSNAME=self.check_type(
                                                 self.table.item(index, 2)),
                                             EVKLASSNAME=self.check_type(
                                                 self.table.item(index, 3)),
                                             PLCNAME=self.check_type(
                                                 self.table.item(index, 4)),
                                             PLC_ADRESS=self.check_type(
                                                 self.table.item(index, 5)))))

                f.write(template.render(vars=contents))
        except Exception as e:
            self.text_panel.setText('Error')
            QMessageBox().warning(self, "Ошибка", str(e), QMessageBox.Ok,
                                  QMessageBox.Ok)

    def check_type(self, data):
        return '' if type(data) == type(None) else data.text()