def __init__(self): """! 1. Создает объект открываемых файлов в редакторе. 2. Настраивает положение, размер, название окна. 3. Создает объект конфигураций. 4. Создает виджет настроект области редактирования и подсветки текста. 5. Показывает окно. """ super().__init__() self.setLayout(Qt.QHBoxLayout()) ## Название окна self.window_title = 'EpiPy' self.configure_window() ## Конфигурации приложения self.config = Config() ## Главное меню приложения self.menu = menu_bar.Menu(self) self.setMenuBar(self.menu) ## Анализатор текста для обновления виджета инфорации о тексте self.analyzer = analyzer.Analyzer() self.analyzer.count = int(self.config.data['NFollowing']['value']) self.analyzer.delimiter = self.config.data['Delimiters']['value'] self.analyzer.phrase = self.config.data['Phrases']['value'] ## Виджет редактора текста с подсветкой self.tabbed_text_edit = TabbedTextEdit( self, self.config.data, self.statusBar()) self.tabbed_text_edit.text_changed.connect(self.text_updated) self.configure_text_edit() ## Виджет настроек отображения и обработки текста self.table = settings_widget.SettingsWidget(self.config.data) self.table.equal_areas_colors_changed.connect(self.equal_areas_colors_changed) self.table.area_bg_color_changed.connect(self.area_bg_color_changed) self.table.area_size_changed.connect(self.area_size_changed) self.table.current_phrase_color_changed.connect(self.current_phrase_color_changed) self.table.max_difflen_changed.connect(self.max_difflen_changed) self.table.delimiters_changed.connect(self.delimiters_changed) self.table.phrases_changed.connect(self.phrases_changed) self.sync_table_with_config() ## Виджет с настройками, который можно перемещать self.settings_dockwidget = QtWidgets.QDockWidget(self) self.configure_settings_dockwidget() ## Виджет информации о обрабатываемом тексте self.info_widget = InfoWidget() ## Виджет с информацией о обрабатываемом тексте self.info_dockwidget = QtWidgets.QDockWidget(self) self.configure_info_dockwidget() ## Окно помощи написания названий цветов self.color_help = color.ColorHelp(self) self.show()
class Window(QtWidgets.QMainWindow): def __init__(self): """! 1. Создает объект открываемых файлов в редакторе. 2. Настраивает положение, размер, название окна. 3. Создает объект конфигураций. 4. Создает виджет настроект области редактирования и подсветки текста. 5. Показывает окно. """ super().__init__() self.setLayout(Qt.QHBoxLayout()) ## Название окна self.window_title = 'EpiPy' self.configure_window() ## Конфигурации приложения self.config = Config() ## Главное меню приложения self.menu = menu_bar.Menu(self) self.setMenuBar(self.menu) ## Анализатор текста для обновления виджета инфорации о тексте self.analyzer = analyzer.Analyzer() self.analyzer.count = int(self.config.data['NFollowing']['value']) self.analyzer.delimiter = self.config.data['Delimiters']['value'] self.analyzer.phrase = self.config.data['Phrases']['value'] ## Виджет редактора текста с подсветкой self.tabbed_text_edit = TabbedTextEdit( self, self.config.data, self.statusBar()) self.tabbed_text_edit.text_changed.connect(self.text_updated) self.configure_text_edit() ## Виджет настроек отображения и обработки текста self.table = settings_widget.SettingsWidget(self.config.data) self.table.equal_areas_colors_changed.connect(self.equal_areas_colors_changed) self.table.area_bg_color_changed.connect(self.area_bg_color_changed) self.table.area_size_changed.connect(self.area_size_changed) self.table.current_phrase_color_changed.connect(self.current_phrase_color_changed) self.table.max_difflen_changed.connect(self.max_difflen_changed) self.table.delimiters_changed.connect(self.delimiters_changed) self.table.phrases_changed.connect(self.phrases_changed) self.sync_table_with_config() ## Виджет с настройками, который можно перемещать self.settings_dockwidget = QtWidgets.QDockWidget(self) self.configure_settings_dockwidget() ## Виджет информации о обрабатываемом тексте self.info_widget = InfoWidget() ## Виджет с информацией о обрабатываемом тексте self.info_dockwidget = QtWidgets.QDockWidget(self) self.configure_info_dockwidget() ## Окно помощи написания названий цветов self.color_help = color.ColorHelp(self) self.show() def configure_window(self): """! Изменяет размер окна. Устанавливает название окна. По окончанию настройки выводит сообщение готовности к работе. """ self.resize(850, 550) self.setWindowTitle(self.window_title) self.__window_centred() self.statusBar().showMessage('Ready') def __window_centred(self): """! Перемещает главное окно в центр экрана. """ q_rect = self.frameGeometry() widget = QtWidgets.QDesktopWidget() center_position = widget.availableGeometry().center() q_rect.moveCenter(center_position) self.move(q_rect.topLeft()) def configure_text_edit(self): """! Конфигурирует виджет редактирования и подсветки текста. """ self.setCentralWidget(self.tabbed_text_edit) conf = self.config.data self.tabbed_text_edit.equal_areas_colors(conf['Selections']['value']) self.tabbed_text_edit.parsed_text_background(conf['Selections_color']['value']) def configure_settings_dockwidget(self): """! Конфигурирует виджет настроек подсветки и обработки текста. """ self.settings_dockwidget.setWindowTitle('Settings') self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.settings_dockwidget) self.settings_dockwidget.setFeatures(QtWidgets.QDockWidget.DockWidgetMovable) scroll = QtWidgets.QScrollArea(self) scroll.setWidgetResizable(True) scroll.setWidget(self.table) self.settings_dockwidget.setWidget(scroll) self.settings_dockwidget.hide() def sync_table_with_config(self): """! Загружает все конфигурации в виджет настроек. """ self.table.colors_of_equal_areas = self.config.data['Selections']['value'] self.table.area_bg = self.config.data['Selections_color']['value'] self.table.area_size = self.config.data['NFollowing']['value'] self.table.phrase_color = self.config.data['Current_phrase_color']['value'] self.table.phrase_pattern = self.config.data['Phrases']['value'] self.table.max_diff_len = self.config.data['MaxDifLenPhrases']['value'] self.table.delimiters_pattern = self.config.data['Delimiters']['value'] def configure_info_dockwidget(self): """! Конфигурирует виджет информации о обрабатываемом тексте. """ self.info_dockwidget.setWindowTitle('Information') self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.info_dockwidget) self.info_dockwidget.setFeatures(QtWidgets.QDockWidget.DockWidgetMovable) scroll = QtWidgets.QScrollArea(self) scroll.setWidgetResizable(True) scroll.setWidget(self.info_widget) self.info_dockwidget.setWidget(scroll) self.info_dockwidget.hide() def visibility_settings_dockwidget(self, b): """! Скрывает и показывает виджет настроек подсветки и обработки текста. @param b показать настройки, если True, иначе скрыть. """ if b: self.settings_dockwidget.show() else: self.settings_dockwidget.hide() def visibility_info_dockwidget(self, b): """! Скрывает и показывает виджет настроек подсветки и обработки текста. @param b показать настройки, если True, иначе скрыть. """ if b: self.info_dockwidget.show() else: self.info_dockwidget.hide() def text_updated(self, text): """! Обновляет текст в экземпляре класса File. @param text обновленный текст. """ self.analyzer.recalculation(text) self.info_widget.count_graphemes = self.analyzer.count_graphemes self.info_widget.count_phrases = self.analyzer.count_phrases self.info_widget.table_of_graphemes = self.analyzer.table_of_graphemes def open_a_new_file(self): """! Запрашивает создание нового файла. """ self.tabbed_text_edit.open_new_file() def open_a_file(self): """! Запрашивает открытие нового файла. """ self.tabbed_text_edit.open_file() def save_a_file(self): """! СЗапрашивает сохранение открытого файла. """ self.tabbed_text_edit.save_file() def save_a_file_as(self): """! Запрашивает сохранение открытого файла по задаваемому пути. """ self.tabbed_text_edit.save_file_as() def close_a_file(self): """! Запрашивает закрытие открытого файла. """ self.tabbed_text_edit.close_file() def choice_font(self): """! Открывает окно с выбором нового шрифта. Устанавливает новый выбранный шрифт в виджет редактирования открытого файла. """ font, ok = QtWidgets.QFontDialog.getFont(self.tabbed_text_edit.font()) if ok: self.tabbed_text_edit.set_font(font) def equal_areas_colors_changed(self, colors): """! Обновляет цвета используемые для выделения эквивалентных областей текста. @param colors строка с цветами разделёнными пробелами. """ self.config.data['Selections']['value'] = colors self.tabbed_text_edit.equal_areas_colors(colors) self.tabbed_text_edit.update_selections() self.tabbed_text_edit.highlights() self.tabbed_text_edit.repaint() def area_bg_color_changed(self, color): """! Обновляет фоновый цвет обрабатываемых областей текста. @param color: строка с цветом областей. """ self.config.data['Selections_color']['value'] = color self.tabbed_text_edit.parsed_text_background(color) def area_size_changed(self, value): """! Обновляет размер обрабатываемых областей. @param value целое число, указывающее на количество обрабатываемых фраз по сторонам от фразы на которой стоит курсор. """ self.config.data['NFollowing']['value'] = value self.tabbed_text_edit.parser_count(value) self.tabbed_text_edit.update_selections() self.tabbed_text_edit.highlights() self.tabbed_text_edit.repaint() def current_phrase_color_changed(self, color): """! Цвет выделения фразы на которой стоит курсор. @param color строка с цветом фразы на которой стоит курсор. """ self.config.data['Current_phrase_color']['value'] = color self.tabbed_text_edit.current_phrase_color(color) def max_difflen_changed(self, value): """! Изменяет максимальное различие размера обрабатываемых фраз в порядках. @param value рациональное число, задающее максимальное различие размеров обрабатываемых фраз. Если длинна меньшей фразы умноженная на *value* меньше, чем длинна большей фразы, тогда не будет производиться поиск эквивалентности. """ self.config.data['MaxDifLenPhrases']['value'] = value # TODO: update parser settings def delimiters_changed(self, value): """! Изменяет паттерн поиска разделителей фраз в тексте. @param value строка, которая может быть регулярным выражением. """ self.config.data['Delimiters']['value'] = value self.tabbed_text_edit.parser_delimiter(value) def phrases_changed(self, value): """! Изменяет паттерн поиска фраз в тексте. @param value строка, которая может быть регулярным выражением. """ self.config.data['Phrases']['value'] = value self.tabbed_text_edit.parser_phrase(value) def show_color_help(self): """! Показать окно справки по написанию названий цветов. """ self.color_help.show() def closeEvent(self, event): """! Запрашивает подтверждение на выход. При пложительном ответе сохраняет настройки и закрывает окно. @param event: при отрицательном ответе пользователя событие игнорируется """ question = QtWidgets.QMessageBox.question reply = question(self, 'Oh, quit?', "Are you sure to quit?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) if reply == QtWidgets.QMessageBox.Yes: self.config.save() event.accept() else: event.ignore()