diff --git a/core/ui.py b/core/ui.py index 82a33a6..33588ff 100644 --- a/core/ui.py +++ b/core/ui.py @@ -691,7 +691,8 @@ class TradeTargetUI: # 读取当前配置 config = configparser.ConfigParser() - config.read('config.ini') + config_path = sfgrid_constants.get_config_path() + config.read(config_path, encoding='utf-8') # 创建输入框字典用于保存引用 entries = {} @@ -837,8 +838,7 @@ class TradeTargetUI: other_basic_frame.pack(fill=tk.X, padx=20, pady=10) other_basic_settings = [ - ("网格交易手数", "grid_volume", config.get('config', 'grid_volume'), "每个网格的交易手数"), - ("最大启用目标数", "max_enabled_targets", config.get('config', 'max_enabled_targets'), "同时运行的最大标的数量") + ("网格交易手数", "grid_volume", config.get('config', 'grid_volume'), "每个网格的交易手数") ] for i, (label, key, default, tooltip) in enumerate(other_basic_settings): @@ -916,10 +916,10 @@ class TradeTargetUI: config.set('config', 'grid_price', grid_price_str) config.set('config', 'grid_volume', entries['grid_volume'].get()) config.set('config', 'account_no', entries['account_no'].get()) - config.set('config', 'max_enabled_targets', entries['max_enabled_targets'].get()) # 写入配置文件 - with open('config.ini', 'w') as configfile: + config_path = sfgrid_constants.get_config_path() + with open(config_path, 'w', encoding='utf-8') as configfile: config.write(configfile) # 重新加载配置到内存中 diff --git a/sfgrid_constants.py b/sfgrid_constants.py index 8464e6c..1358a93 100644 --- a/sfgrid_constants.py +++ b/sfgrid_constants.py @@ -1,5 +1,7 @@ from typing import List import configparser +import os +import sys # miniQMTPath = r'D:\\Programs\\DTQMT_MN\\userdata_mini' # miniQMT软件的安装路径 miniQMTPath = r'D:\\Programs\\DTQMT\\userdata_mini' # miniQMT软件的安装路径 @@ -9,14 +11,48 @@ grid_price:List[float] = [] # 网格价格设置,从高到低 grid_volume:int = 100 # 每个网格的交易手数 account_no:str = '99082560' # account_no:str = '89009170' # 交易账号 -max_enabled_targets:int = 10 + +def get_config_path(): + """获取配置文件的正确路径(兼容开发环境和打包后的可执行文件)""" + if getattr(sys, 'frozen', False): + # 打包后的可执行文件环境 + # sys._MEIPASS是PyInstaller解压临时文件的目录 + # 配置文件应该放在可执行文件同目录下 + base_path = os.path.dirname(sys.executable) + else: + # 开发环境 + base_path = os.path.dirname(os.path.abspath(__file__)) + + return os.path.join(base_path, 'config.ini') + +def create_default_config(): + """创建默认配置文件""" + config = configparser.ConfigParser() + config['config'] = { + 'miniQMTPath': r'D:/Programs/QMT/userdata_mini', + 'grid_price': '11.0,10.0,9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0,1.0,0.0', + 'grid_volume': '100', + 'account_no': '00000000' + } + config_path = get_config_path() + with open(config_path, 'w') as configfile: + config.write(configfile) + print(f'已创建默认配置文件: {config_path}') def initConfig(): - global miniQMTPath, grid_price, grid_volume, account_no, max_enabled_targets + global miniQMTPath, grid_price, grid_volume, account_no + + # 获取配置文件路径 + config_path = get_config_path() + + # 检查配置文件是否存在,不存在则创建 + if not os.path.exists(config_path): + create_default_config() + config = configparser.ConfigParser() - config.read('config.ini') + config.read(config_path, encoding='utf-8') miniQMTPath = config.get('config','miniQMTPath') str_list = config.get('config','grid_price').split(',') grid_price = [float(item) for item in str_list] grid_volume = config.getint('config','grid_volume') - max_enabled_targets = config.getint('config','max_enabled_targets') + account_no = config.get('config','account_no')