def main(test_func): from pyminer2 import pmutil app = QApplication(sys.argv) path_logo = os.path.join(pmutil.get_root_dir(), r'ui\source\icons\logo.png') app.setWindowIcon(QIcon(path_logo)) # 设置应用logo path_splash = os.path.join(pmutil.get_root_dir(), r'ui\source\images\splash.png') splash = QSplashScreen(QPixmap(path_splash)) splash.showMessage("正在加载pyminer... 0%", Qt.AlignHCenter | Qt.AlignBottom, Qt.black) splash.show() # 显示启动界面 pmutil._application = app load_fonts(app) load_translator(app) # font = os.path.join(os.path.dirname(__file__), 'ui', 'source', 'font', 'SourceCodePro-Regular.ttf') app.default_font = 'Deng' f = QFont(app.default_font, 10) app.setFont(f) demo = MainWindow() demo.events_ready_signal.connect(test_func) splash.finish(demo) # 修复故障 I1VYVO 程序启动完成后,关闭启动界面 liugang 20200921 id(demo) sys.exit(app.exec_())
def load(self) -> Dict[str, str]: """ 加载设置项。 default_settings是默认设置项 :return: """ from pyminer2.pmutil import get_root_dir with open( os.path.join(get_root_dir(), 'config', 'features', 'default_settings.json'), 'r') as f: default_settings = json.load(f) default_settings['work_dir'] = get_root_dir() try: with open( os.path.join(get_root_dir(), 'config', 'customized', 'ui_settings.json'), 'r') as f: settings = json.load(f) except BaseException: settings = {} pmsettings = default_settings pmsettings.update(settings) return pmsettings
def load_settings(self): import json from pyminer2.pmutil import get_root_dir default_settings = { 'work_dir': get_root_dir(), 'main_theme': '#F7F7F7', 'margin_theme': '#dadada' } # default_settings = {'work_dir': get_root_dir(), 'main_theme': # '#232323','margin_theme':'#565656'} try: with open( os.path.join(get_root_dir(), 'config', 'customized', 'ui_settings.json'), 'r') as f: settings = json.load(f) except BaseException: settings = {} print(settings, default_settings) self.settings.update(default_settings) self.settings.update(settings) print(self.settings) with open(os.path.join(get_root_dir(), 'config', 'ui', 'standard.qss'), 'rb') as f: b = f.read() enc = chardet.detect(b) if enc.get('encoding') is not None: s = b.decode(enc['encoding']) self.setStyleSheet( s.replace('MAIN_THEME', self.settings['main_theme']).replace( 'MARGIN_THEME', self.settings['margin_theme']))
def load_layout(self): from pyminer2.pmutil import get_root_dir p = os.path.join(get_root_dir(), 'config', 'customized', 'layout.ini') if os.path.exists(p): with open(p, 'rb') as f: s = f.read() self.restoreState(s) else: p = os.path.join(get_root_dir(), 'config', 'ui', 'standard.ini') with open(p, 'rb') as f: s = f.read() self.restoreState(s)
def save_settings(self): import json from pyminer2.pmutil import get_root_dir try: config_file = os.path.join(get_root_dir(), 'config', 'customized', 'ui_settings.json') if not os.path.exists( os.path.join(get_root_dir(), 'config', 'customized')): os.mkdir(os.path.join(get_root_dir(), 'config', 'customized')) with open(config_file, 'w') as f: json.dump(self.settings, f) except FileNotFoundError as e: print(e)
def save(self): """ 保存 :return: """ import json from pyminer2.pmutil import get_root_dir try: config_file = os.path.join(get_root_dir(), 'config', 'customized', 'ui_settings.json') if not os.path.exists( os.path.join(get_root_dir(), 'config', 'customized')): os.mkdir(os.path.join(get_root_dir(), 'config', 'customized')) with open(config_file, 'w') as f: json.dump(self, f, indent=4) except FileNotFoundError as e: logging.warning(e)
def load_predefined_layout(self, layout_type: str = 'standard'): from pyminer2.pmutil import get_root_dir layouts = {'standard': 'standard.ini'} p = os.path.join(get_root_dir(), 'config', 'ui', layouts[layout_type]) if os.path.exists(p): with open(p, 'rb') as f: s = f.read() self.restoreState(s) self.refresh_view_configs()
def save_layout(self): from pyminer2.pmutil import get_root_dir try: root = os.path.join(get_root_dir(), 'config', 'customized') if not os.path.isdir(root): os.mkdir(root) p = os.path.join(root, 'layout.ini') with open(p, 'wb') as f: s = self.saveState() f.write(s) except FileNotFoundError: print("file not found:", p)
def get_stylesheet(style_sheet_name: str = 'standard'): style_sheet = "" from pyminer2.pmutil import get_root_dir with open( os.path.join(get_root_dir(), 'config', 'ui', '%s.qss' % style_sheet_name), 'rb') as f: b = f.read() enc = chardet.detect(b) if enc.get('encoding') is not None: s = b.decode(enc['encoding']) style_sheet = s.replace( 'MAIN_THEME', Settings.get_instance()['main_theme']).replace( 'MARGIN_THEME', Settings.get_instance()['margin_theme']) return style_sheet
def init_ui(self): """初始化ui""" self.layout = QHBoxLayout(self) # 扩展图标 img = QLabel(self) img_path = os.path.join(get_root_dir( ), 'extensions/packages/', self.ext.info.name, self.ext.info.icon) pixmap = QPixmap(img_path) pixmap = pixmap.scaledToHeight(50) img.setPixmap(pixmap) self.layout.addWidget(img) # 扩展名称 ext_name = QLabel(self) ext_name.setText(self.ext.info.display_name) self.layout.addWidget(ext_name) # 设置菜单模式,关联菜单事件 self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.show_menu) self.setLayout(self.layout) self.show()
def setLogo(self): pix = QPixmap(get_root_dir() + '/ui/source/icons/logo.png') self.label_logo.setPixmap(pix)
def slot_change_workspace(self): directory = QFileDialog.getExistingDirectory( self, "选择工作区间位置", get_root_dir()) self.lineEdit_workspace.setText(directory)
def slot_change_output(self): directory = QFileDialog.getExistingDirectory( self, "选择输出文件夹位置", get_root_dir()) self.lineEdit_output.setText(directory)
import sys import json import json.decoder import zipfile import importlib import traceback import logging logger = logging.getLogger('extensionmanager') from vermanager import VersionsManager, Module # from pyminer2.features.extensions.extensionlib import env from pyminer2.pmutil import get_root_dir # from pyminer2.extensions.extensions_manager import log from pyminer2.extensions.extensions_manager.ExtensionLoader import ExtensionLoader from pyminer2.extensions.extensions_manager.UIInserter import ui_inserters BASEDIR = get_root_dir() class ExtensionsManager: """ 扩展管理类 """ def __init__(self): self.extensions = {} # 扩展类实例 self.ui_inserters = ui_inserters self.id_ = 0 # 扩展id,动态分配的 self.setting_path = os.path.join( BASEDIR, 'config/extensions.json') # 扩展配置文件位置 if not os.path.exists(self.setting_path): raise FileNotFoundError(self.setting_path)
def get_main_program_dir(self): """ 获取主程序路径 :return: """ return get_root_dir()
def get_main_program_dir(self): return get_root_dir()
from PyQt5.QtWidgets import QApplication, QMenu, QTextEdit, QMessageBox, QToolBar, QSplashScreen, QFileDialog from pyminer2.features.io import sample from pyminer2.features import base from pyminer2.features.io.settings import Settings from pyminer2.ui.base.widgets.controlpanel import PMPageExt from pyminer2.ui.pmwidgets import BaseMainWindow from pmgwidgets import PMGToolBar, ActionWithMessage, PMDockObject 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, get_application from pyminer2.features.util import utils from pyminer2.features.io.settings import load_theme log_folder = os.path.join(get_root_dir(), 'log') if not os.path.exists(log_folder): os.mkdir(log_folder) logging.Formatter.default_msec_format = '%s.%03d' logging_file = os.path.join(log_folder, f'log_{datetime.datetime.now().strftime("%Y-%m-%d")}.log') logging.basicConfig( format='[%(asctime)s] %(levelname)-8s %(name)s [%(module)s:%(funcName)s:%(lineno)s] %(message)+8s', # filename=logging_file, # filemode='a', level=logging.DEBUG, handlers=[logging.FileHandler(logging_file, 'a', encoding='utf8'), ColorHandler()] ) logger = logging.getLogger('pmapp') logger.info('Program starts up')