From ee6d772cdc7fc32007305a3a029b10fd730c0087 Mon Sep 17 00:00:00 2001 From: nwljy Date: Sat, 26 Sep 2020 12:05:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BB=E8=8F=9C=E5=8D=95=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pmgwidgets/toolbars/toolbar.py | 17 ++++--- pyminer2/features/util/utils.py | 86 +++++++++++++++++++++++++++++++++ pyminer2/pmappmodern.py | 36 ++++++++++++-- 3 files changed, 129 insertions(+), 10 deletions(-) create mode 100644 pyminer2/features/util/utils.py diff --git a/pmgwidgets/toolbars/toolbar.py b/pmgwidgets/toolbars/toolbar.py index 10dfc1b2..c9e12327 100644 --- a/pmgwidgets/toolbars/toolbar.py +++ b/pmgwidgets/toolbars/toolbar.py @@ -130,17 +130,22 @@ class PMGToolBar(QToolBar): a.triggered.connect(cmd) button.setMenu(menu) - def append_menu(self, button_name: str, action_text: str, action_command: 'Callable') -> 'QAction': + def append_menu(self, button_name: str, action_text: str,action_command: 'Callable', action_icon : QIcon=None) -> 'QAction': button: 'QPushButton' = self.get_control_widget(button_name) + a=None if button is not None: menu = button.menu() if menu is None: self.add_menu_to(button_name, [action_text], [action_command]) return - a = QAction(text=action_text, parent=menu) - menu.addAction(a) - print(menu, action_text) - a.triggered.connect(action_command) + else : + a = QAction(text=action_text, parent=menu) + if action_icon is not None: + a.setIcon(action_icon) + menu.addAction(a) + + print(menu, action_text) + a.triggered.connect(action_command) return a - return None + return a diff --git a/pyminer2/features/util/utils.py b/pyminer2/features/util/utils.py new file mode 100644 index 00000000..95967e35 --- /dev/null +++ b/pyminer2/features/util/utils.py @@ -0,0 +1,86 @@ +""" +工具汇总: +作者:廖俊易 + +""" +import logging +import os + +from PyQt5.QtWidgets import QFileDialog, QWidget + +from pyminer2.features.io import sample + + + +class importutils(object): + def doSPSSImport(self): + self.__file_path_choose, filetype = QFileDialog.getOpenFileName(self, + '选择文件', '', + "All Files (*);;SPSS文件 (*.sav *.zsav)") # 设置文件扩展名过滤,用双分号间隔 + + if len(self.__file_path_choose) == 0: + logging.info("\n取消选择") + return + else: + + if os.path.split(self.__file_path_choose)[1].endswith(('sav', 'zsav')): + if len(self.__file_path_choose) > 0: + self.import_spss_form = sample.ImportSpssForm() + # self.import_spss_form.file_path_init(self.__file_path_choose) + # self.import_spss_form.signal_data_change.connect(self.slot_dataset_reload) # 接收信号 + self.import_spss_form.exec_() + else: + logging.info("信号发射失败") + + + def doSASImport(self): + self.__file_path_choose, filetype = QFileDialog.getOpenFileName(self, + '选择文件', '', + "All Files (*);;SAS文件 (*.sas7bdat)") # 设置文件扩展名过滤,用双分号间隔 + + if len(self.__file_path_choose) == 0: + logging.info("\n取消选择") + return + else: + + if os.path.split(self.__file_path_choose)[1].endswith(('sas7bdat')): + if len(self.__file_path_choose) > 0: + self.import_sas_form = sample.ImportSasForm() + # self.import_sas_form.file_path_init(self.__file_path_choose) + # self.import_sas_form.signal_data_change.connect(self.slot_dataset_reload) # 接收信号 + self.import_sas_form.exec_() + else: + logging.info("信号发射失败") + + + def doExcelImport(self): + self.__file_path_choose, filetype = QFileDialog.getOpenFileName(self, + '选择文件', '', + "All Files (*);;EXCEL文件 (*.xls *.xlsx *.xlsm *.xltx *.xltm)") # 设置文件扩展名过滤,用双分号间隔 + + if len(self.__file_path_choose) == 0: + logging.info("\n取消选择") + return + else: + if os.path.split(self.__file_path_choose)[1].endswith(('xlsx', 'xlsm', 'xltx', 'xltm')): + if len(self.__file_path_choose) > 0: + self.import_excel_form = sample.ImportExcelForm() + # self.import_excel_form.file_path_init(self.__file_path_choose) + # self.import_excel_form.signal_data_change.connect(self.slot_dataset_reload) # 接收信号 + self.import_excel_form.exec_() + else: + logging.info("信号发射失败--导入文件已选择") + + + def doTextImport(self): + self.__file_path_choose, filetype = QFileDialog.getOpenFileName(self, + '选择文件', '', + "All Files (*);;文本文件 (*.txt *.csv *.tsv *.tab *.dat)") + if len(self.__file_path_choose) == 0: + logging.info("\n取消选择") + return + else: + self.import_form = sample.ImportForm() + # self.import_form.file_path_init() + # self.import_form.signal_data_change.connect(self.slot_dataset_reload) # 接收信号 + self.import_form.exec_() \ No newline at end of file diff --git a/pyminer2/pmappmodern.py b/pyminer2/pmappmodern.py index 78be136e..65bdaa39 100644 --- a/pyminer2/pmappmodern.py +++ b/pyminer2/pmappmodern.py @@ -60,7 +60,7 @@ from pmgwidgets.sourcemgr import create_icon from pyminer2.extensions.extensions_manager.manager import extensions_manager from pyminer2.extensions.extensions_manager.log import ColorHandler from pyminer2.pmutil import get_main_window, get_root_dir - +from pyminer2.features.util import utils log_folder = os.path.join(get_root_dir(), 'log') if not os.path.exists(log_folder): os.mkdir(log_folder) @@ -156,7 +156,7 @@ class PMToolBarHome(PMGToolBar): create_icon(':/color/source/theme/color/icons/mIconType.svg')) self.add_tool_button('button_help', pmlocale._('Help'), create_icon( ':/color/source/theme/color/icons/mActionMapsheetManage.svg')) - + self.add_import_data_buttons() self.view_menu = QMenu() self.view_menu.triggered.connect(self.process_visibility_actions) @@ -188,8 +188,8 @@ class PMToolBarHome(PMGToolBar): self.get_control_widget('button_search_for_files').setEnabled(False) self.get_control_widget('button_compare_files').clicked.connect(lambda: print('比较文件:未做')) self.get_control_widget('button_compare_files').setEnabled(False) - self.get_control_widget('button_import_data').clicked.connect( - lambda: get_main_window().main_open_data_chooseFile()) + #self.get_control_widget('button_import_data').clicked.connect( + #lambda: get_main_window().main_open_data_chooseFile()) self.get_control_widget('button_import_database').clicked.connect( lambda: get_main_window().import_database_display()) self.get_control_widget('button_save_workspace').clicked.connect(lambda: print('保存工作区:未做')) @@ -204,6 +204,18 @@ class PMToolBarHome(PMGToolBar): self.get_control_widget('button_appstore').clicked.connect(lambda: get_main_window().main_appstore_dispaly()) self.get_control_widget('button_help').clicked.connect(lambda: get_main_window().main_help_display()) + def add_import_data_buttons(self): + excelImportIcon = create_icon(':/color/source/theme/color/icons/mIconType.svg') + self.append_menu('button_import_data','Excl导入',lambda: get_main_window().process_file('excel'),excelImportIcon) + textImportIcon = create_icon(':/color/source/theme/color/icons/mIconType.svg') + self.append_menu('button_import_data', 'Text导入', lambda: get_main_window().process_file('text'), + textImportIcon) + sasImportIcon = create_icon(':/color/source/theme/color/icons/mIconType.svg') + self.append_menu('button_import_data', 'Sas导入', lambda: get_main_window().process_file('sas'), + sasImportIcon) + spssImportIcon = create_icon(':/color/source/theme/color/icons/mIconType.svg') + self.append_menu('button_import_data', 'SPSS导入', lambda: get_main_window().process_file('spss'), + spssImportIcon) class MainWindow(BaseMainWindow): setupui_tasks: List[Callable] = [] @@ -435,6 +447,22 @@ class MainWindow(BaseMainWindow): else: logging.info("信号发射失败") + def process_file(self, type: str): + if type is not None: + if type == 'excel': + utils.importutils.doExcelImport(self) + elif type == 'sas': + utils.importutils.doSASImport(self) + elif type == 'spss': + utils.importutils.doSPSSImport(self) + elif type == 'text': + utils.importutils.doTextImport(self) + else: + logging.info("type is not supported yet") + else: + logging.info('type is null') + + def main_help_display(self): """ 打开帮助页面 -- Gitee