def __init__(self, parent, schema): QWidget.__init__(self, parent) self.parent = parent self.ui = Ui() self.ui.setupUi(self) self.api = ApiOS() self.schema = schema self.set_list_files()
def __init__(self, parent, schema, index, type_data=1): QWidget.__init__(self, parent) self.parent = parent self.ui = Ui() self.ui.setupUi(self) self.api = ApiOS() self.schema = schema self.type_data = type_data self.set_data(index)
class DataviewMaster(QDataviewMaster): def __init__(self, parent, schema, index, type_data=1): QWidget.__init__(self, parent) self.parent = parent self.ui = Ui() self.ui.setupUi(self) self.api = ApiOS() self.schema = schema self.type_data = type_data self.set_data(index) def __del__(self): self.ui = None # List Files --------------------------------- def set_data(self, index): try: self.ui.title.setText(self.schema["data"][index]["path"]) self.ui.table.clear() self.ui.table.setColumnCount(2) self.ui.table.setRowCount(0) self.ui.table.setHorizontalHeaderLabels(["X", "Y"]) data = [] if self.type_data == 1: data = self.schema["data"][index]["input_data"] else: data = self.schema["data"][index]["output_data"] self.ui.table.setRowCount(len(data)) i = 0 for item in data: if self.type_data == 1: self.ui.table.setItem(i, 0, QTableWidgetItem(str(item[0]))) self.ui.table.setItem(i, 1, QTableWidgetItem(str(item[1]))) else: self.ui.table.setItem( i, 0, QTableWidgetItem(str(item["point"][0]))) self.ui.table.setItem( i, 1, QTableWidgetItem(str(item["point"][1]))) i += 1 except Exception as err: self.api.send_system_message("Ошибка", "Не удалось отобразить данные")
class VisualizationMaster(QVisualizationMaster): def __init__(self, parent, schema): QWidget.__init__(self, parent) self.parent = parent self.ui = Ui() self.ui.setupUi(self) self.api = ApiOS() self.schema = schema self.set_list_files() def __del__(self): self.ui = None def select_file(self, index): try: if index < 0: return self.draw_graph(self.ui.input_graph, self.schema["data"][index]) self.draw_graph(self.ui.output_graph, self.schema["data"][index], type_data="output") except Exception as err: self.api.send_system_message("Ошибка", "Не удалось построить графики") def draw_graph(self, control, data, type_data="input"): count = control.count() for i in range(0, count): control.removeWidget(control.widget(0)) control.addWidget( plot_creater.create_plot(data, type_graph="one", type_data=type_data)) def set_list_files(self): data_sources = [("[%s] %s" % (item["code"], item["path"])) for item in self.schema["data"]] self.ui.list_files.clear() self.ui.list_files.addItems(data_sources)
def push(schema, path_to_dir): """ Пакетный экспорт данных в указанную папку :param schema: Данные для экспорта :param path_to_dir: Путь к папке :return: None """ try: res = get_outputs(schema, path_to_dir) write_output(res) except Exception as err: ApiOS().send_system_message("Ошибка", "Ошибка при записи данных")
def write_output(outputs): """ Запись списка данных в файлы :param outputs: Набор данные:путь к файлу :return: None """ try: for item in outputs: file = open(item["path"], "w") for row in item["data"]: file.write("%s,%s\n" % (row["point"][0], row["point"][1])) file.close() except Exception as err: ApiOS().send_system_message("Ошибка", "Ошибка при записи данных")
class ImportDataMaster(QImportMaster): def __init__(self, parent, schema): QWidget.__init__(self, parent) self.parent = parent self.ui = Ui() self.ui.setupUi(self) self.api = ApiOS() self.schema = schema self.set_list_files() def __del__(self): self.ui = None # List Files ---------------------------- def set_list_files(self): """ Установка списка файлов с контейнер списка файлов :return: """ try: data_sources = [("[%s] %s" % (item["code"], item["path"])) for item in self.schema["data"]] self.ui.list_files.clear() self.ui.list_files.addItems(data_sources) except Exception as err: self.api.send_system_message("Ошибка", "Неудалось отобразить список файлов") def add_list_items(self, items): """ Добавление списка файлов в контейнер импортиркемых файлов :param items: Список файлов :return: """ try: for item in items: try: self.schema["data"].append({ "code": self.schema["index"], "path": item, "input_data": sorted(self.read_file(item), key=lambda x: x[0]), "output_data": [] }) self.schema["index"] += 1 except Exception as err: self.api.send_system_message( u"Ошибка при импорте", u"Файл '%s' содержит неверный формат данных, и не был импортирован" % item) self.set_list_files() except Exception as err: self.api.send_system_message("Ошибка", "Неудалось добавить новые файлы") def select_current_file(self, index): """ Событиее выбора файла из списка, для предпросмотра данных файла :param index: Номер файла в списке :return: """ try: self.ui.table_preview.clear() self.ui.table_preview.setRowCount(0) self.ui.table_preview.setHorizontalHeaderLabels(["X", "Y"]) if type(index) != int: index = self.ui.list_files.currentRow() if index < 0: return self.ui.table_preview.setRowCount( len(self.schema["data"][index]["input_data"])) i = 0 for item in self.schema["data"][index]["input_data"]: self.ui.table_preview.setItem(i, 0, QTableWidgetItem(str(item[0]))) self.ui.table_preview.setItem(i, 1, QTableWidgetItem(str(item[1]))) i += 1 except Exception as err: self.api.send_system_message("Ошибка", "Не удалось отобразить данные") def delete_all_files(self): """ Удаление всех файлов из списка импортируемых файлов :return: """ try: result = self.api.show_variants(u"Удалить все файлы?") if result == QMessageBox.Yes: self.schema["data"] = [] self.set_list_files() except Exception as err: self.api.send_system_message("Ошибка", "Неудалось удалить все файлы") def delete_current_file(self): """ Удаление выбранного файла :return: """ try: current_index = self.ui.list_files.currentRow() if current_index > -1: result = self.api.show_variants_to_delete_node() if result == QMessageBox.Yes: self.schema["data"].pop(current_index) self.set_list_files() else: self.api.send_system_message("Предупреждение", "Файл не выбран") except Exception as err: self.api.send_system_message("Ошибка", "Неудалось удалить выбранный файл") # Import data --------------------------- def add_file_dialog(self): try: paths = self.api.show_open_data_dialog(self) if paths and len(paths[0]) > 0: paths = set(paths[0]) exist_files = [x["path"] for x in self.schema["data"]] exist_files = set(exist_files) paths.difference_update(exist_files) self.add_list_items(paths) return paths except Exception as err: self.api.send_system_message("Ошибка", "Неудалось загрузить файлы") return [] def check_files(self): try: self.parent.schema = self.schema self.parent.set_list_files(self.parent.ui.list_files) self.parent.set_list_files(self.parent.ui.output_files, type_files="output") self.parent.reset_chart() self.api.send_system_message(u"Импорт", u"Данные успешно зафиксированны") except Exception as err: self.api.send_system_message("Ошибка", "Неудалось зафиксировать данные") def read_file(self, path): array = [] try: with open(path, 'r') as fp: reader = csv.reader(fp, delimiter=',', quotechar='"') for row in reader: array.append([float(cell) for cell in row]) except Exception as err: self.api.send_system_message( "Ошибка", "Неудалось прочитать данные из файла '%s'," "данные могли иметь не вервый формат" % path) return array
def __init__(self, parent=None): QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.api = ApiOS()
class MainWindow(QMainWindow): schema = {"data": [], "index": 0} def __init__(self, parent=None): QMainWindow.__init__(self, parent) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.api = ApiOS() def __del__(self): self.ui = None # List files ----------------------------- def set_list_files(self, element, type_files="input"): data_sources = [] try: if type_files == "input": data_sources = [("[%s] %s" % (item["code"], item["path"])) for item in self.schema["data"]] elif type_files == "output": for item in self.schema["data"]: if item["output_data"] and (len(item["output_data"]) > 0): data_sources.append("OUT [%s] %s" % (item["code"], item["path"])) element.clear() element.addItems(data_sources) except Exception as err: self.api.send_system_message("Ошибка", "Не удалось добавить список файлов") def select_file(self, index): """ Событие выбора файла для предпосмотра данных :param index: Номер выбранного файла :return: """ try: if type(index) != int: index = self.ui.list_files.currentRow() if index < 0: return self.draw_graph(self.schema["data"][index]) except Exception as err: self.api.send_system_message("Ошибка", "Не удалось отобразить данные") # Masters -------------------------------- def open_import_master(self): """ Запуск мастера импорта :return: """ try: modal = ImportDataMaster(parent=self, schema=self.schema) modal.setWindowModality(Qt.ApplicationModal) modal.show() except Exception as err: self.api.send_system_message("Ошибка", "Не удалось открыть мастер импорта") def open_export_master(self): """ Запуск мастера экспорта :return: """ try: if self.ui.output_files.count() <= 0: self.api.send_system_message( u"Предупреждение", u"Отсутствуют данные для экспорта") else: path = self.api.show_open_dir_dialog(self) if not path or (path == ""): return master_export.push(self.schema, path) self.api.send_system_message( u"Экспорт", u"Данные были успешно записанны в директорию: '%s'" % path) except Exception as err: self.api.send_system_message("Ошибка", "Не удалось открыть мастер экспорта") def open_visualization_master(self): """ Запуск мастера визуализации данных :return: """ try: modal = VisualizationMaster(parent=self, schema=self.schema) modal.setWindowModality(Qt.ApplicationModal) modal.show() except Exception as err: self.api.send_system_message( "Ошибка", "Не удалось открыть мастер отображения данных") def open_conversion_master(self): """ Запуск мастера преобразования данных :return: """ try: modal = ConversionMaster(parent=self, schema=self.schema) modal.setWindowModality(Qt.ApplicationModal) modal.show() except Exception as err: self.api.send_system_message( "Ошибка", "Не удалось открыть мастер преобразования данных") def open_dataview_output_master(self): """ Запуск мастера просмотра выходных данных :return: """ try: index = self.ui.output_files.currentRow() if index >= 0: modal = DataviewMaster(parent=self, schema=self.schema, index=index, type_data=0) modal.setWindowModality(Qt.ApplicationModal) modal.show() else: self.api.send_system_message("Предупреждение", "Необходимо выбрать файл") except Exception as err: self.api.send_system_message( "Ошибка", "Не удалось открыть мастер просмотра выходных данных") def open_dataview_input_master(self): """ Запуск мастера просмотра входных данных :return: """ try: index = self.ui.list_files.currentRow() if index >= 0: modal = DataviewMaster(parent=self, schema=self.schema, index=index, type_data=1) modal.setWindowModality(Qt.ApplicationModal) modal.show() else: self.api.send_system_message("Предупреждение", "Необходимо выбрать файл") except Exception as err: self.api.send_system_message( "Ошибка", "Не удалось открыть мастер просмотра входных данных") # Graphic -------------------------------- def draw_graph(self, data): """ Отрисовка графика предпросмотра :param data: Набор точек :return: """ self.reset_chart() self.ui.graph_widget.addWidget(plot_creater.create_plot(data)) def reset_chart(self): """ Очистка графика :return: """ count = self.ui.graph_widget.count() for i in range(0, count): self.ui.graph_widget.removeWidget(self.ui.graph_widget.widget(0))
class ConversionMaster(QConversionMaster): def __init__(self, parent, schema): QWidget.__init__(self, parent) self.parent = parent self.ui = Ui() self.ui.setupUi(self) self.api = ApiOS() self.schema = schema self.set_list_files() def __del__(self): self.ui = None # List Files --------------------------------- def set_list_files(self): data_sources = [] try: data_sources = [("[%s] %s" % (item["code"], item["path"])) for item in self.schema["data"]] self.ui.list_files.clear() self.ui.list_files.addItems(data_sources) except Exception as err: self.api.send_system_message("Ошибка", "Не удалось добавить список файлов") def run(self): count = len(self.schema["data"]) beta = 0.0 width = 0.0 try: beta = float(str(self.ui.tb_beta.text()).replace(",", ".")) width = float(str(self.ui.tb_with.text()).replace(",", ".")) except Exception as err: self.api.send_system_message("Ошибка", "Неверный формат данных") return for index in range(0, count): threading.Thread(target=self.f, args=(index, count, beta, width)).run() def f(self, index, count, beta, width): try: k = (float(index) + 1.0) / float(count) * 100.0 self.schema["data"][index]["output_data"] = \ peak_detection.detect_peaks(self.schema["data"][index]["input_data"], beta, width) self.ui.progress.setValue(k) if k == 100: self.api.send_system_message("Выполнено", "Преобразование выполнено") self.set_list_files() QApplication.processEvents() except Exception as err: self.api.send_system_message("Ошибка", "Не удалось преобразовать данные") def apply(self): try: self.parent.schema = self.schema self.parent.set_list_files(self.parent.ui.list_files) self.parent.set_list_files(self.parent.ui.output_files, type_files="output") self.parent.reset_chart() self.api.send_system_message("Выполнено", "Данные сохранены") except: pass def select_file(self, index): try: if index < 0: return self.draw_graph(self.schema["data"][index]) except Exception as err: self.api.send_system_message("Ошибка", "Не удалось отобразить данные") def draw_graph(self, data): """ Отрисовка графика предпросмотра :param data: Набор точек :return: """ self.reset_chart() self.ui.graph_widget.addWidget(plot_creater.create_plot(data, type_data="output")) def reset_chart(self): """ Очистка графика :return: """ count = self.ui.graph_widget.count() for i in range(0, count): self.ui.graph_widget.removeWidget(self.ui.graph_widget.widget(0))