完善UI操作逻辑
This commit is contained in:
+34
-33
@@ -3,7 +3,8 @@ from tkinter import ttk, messagebox, filedialog
|
||||
from datetime import datetime
|
||||
import threading
|
||||
import time
|
||||
from core.eventbus import ActionDisableMarketData, ActionEnableMarketData, ActionEventDeleteTradeTarget, ActionEventDisableTrade, ActionEventEnableTrade, MarketDataUpdate, MarketDataEnabled, MarketDataDisabled, ResultEventTradeDisabled, ResultEventTradeEnabled, ResultEventTradeTargetDeleted, event_bus
|
||||
import core.eventbus as eBus
|
||||
from core.logger import LogData, LogLevel
|
||||
from core.strategy_db import TradeTarget
|
||||
import configparser
|
||||
import sfgrid_constants
|
||||
@@ -28,12 +29,13 @@ class TradeTargetUI:
|
||||
# 不再自动启动刷新线程,由市场数据开关控制
|
||||
|
||||
def registerEventHandler(self):
|
||||
event_bus.subscribe(MarketDataUpdate, self.onTradeTargetUpdated)
|
||||
event_bus.subscribe(ResultEventTradeEnabled, self.onTradeEnabled)
|
||||
event_bus.subscribe(ResultEventTradeDisabled, self.onTradeDisabled)
|
||||
event_bus.subscribe(MarketDataEnabled, self.onMarketDataToggled)
|
||||
event_bus.subscribe(MarketDataDisabled, self.onMarketDataToggled)
|
||||
event_bus.subscribe(ResultEventTradeTargetDeleted, self.onTradeTargetDeleted)
|
||||
eBus.event_bus.subscribe(eBus.MarketDataUpdate, self.onTradeTargetUpdated)
|
||||
eBus.event_bus.subscribe(eBus.ResultEventTradeEnabled, self.onTradeEnabled)
|
||||
eBus.event_bus.subscribe(eBus.ResultEventTradeDisabled, self.onTradeDisabled)
|
||||
eBus.event_bus.subscribe(eBus.MarketDataEnabled, self.onMarketDataToggled)
|
||||
eBus.event_bus.subscribe(eBus.MarketDataDisabled, self.onMarketDataToggled)
|
||||
eBus.event_bus.subscribe(eBus.ResultEventTradeTargetDeleted, self.onTradeTargetDeleted)
|
||||
eBus.event_bus.subscribe(eBus.EventPrintLog, self.onLog)
|
||||
|
||||
def start_refresh_thread(self):
|
||||
"""启动刷新线程"""
|
||||
@@ -59,11 +61,11 @@ class TradeTargetUI:
|
||||
if id in self.data:
|
||||
del self.data[id]
|
||||
# 添加日志
|
||||
self.add_log("INFO", f"交易标的已删除,ID: {id}")
|
||||
self.add_log(LogLevel.INFO, f"交易标的已删除,ID: {id}")
|
||||
|
||||
def onMarketDataToggled(self, data:bool):
|
||||
self.market_data_enabled = self.market_data_switch_var.get()
|
||||
self.add_log("INFO", "市场数据监听已" + ("启用" if data else "禁用"))
|
||||
self.add_log(LogLevel.INFO, "市场数据监听已" + ("启用" if data else "禁用"))
|
||||
# 同步UI刷新线程状态
|
||||
if data:
|
||||
self.start_ui_refresh()
|
||||
@@ -71,10 +73,10 @@ class TradeTargetUI:
|
||||
self.stop_ui_refresh()
|
||||
|
||||
def onTradeEnabled(self, target:TradeTarget):
|
||||
self.add_log("INFO", f"交易启用: {target.stock_code} - {target.stock_name}")
|
||||
self.add_log(LogLevel.INFO, f"交易启用: {target.stock_code} - {target.stock_name}")
|
||||
|
||||
def onTradeDisabled(self, target:TradeTarget):
|
||||
self.add_log("INFO", f"交易禁用: {target.stock_code} - {target.stock_name}")
|
||||
self.add_log(LogLevel.INFO, f"交易禁用: {target.stock_code} - {target.stock_name}")
|
||||
|
||||
|
||||
def onTradeTargetUpdated(self, target: TradeTarget):
|
||||
@@ -137,11 +139,11 @@ class TradeTargetUI:
|
||||
print(f'市场数据监听开关')
|
||||
self.market_data_enabled = self.market_data_switch_var.get()
|
||||
if self.market_data_enabled:
|
||||
event_bus.publish(ActionEnableMarketData, True)
|
||||
eBus.event_bus.publish(eBus.ActionEnableMarketData, True)
|
||||
# 同步开启UI刷新线程
|
||||
self.start_ui_refresh()
|
||||
else:
|
||||
event_bus.publish(ActionDisableMarketData, True)
|
||||
eBus.event_bus.publish(eBus.ActionDisableMarketData, True)
|
||||
# 同步关闭UI刷新线程
|
||||
self.stop_ui_refresh()
|
||||
|
||||
@@ -150,14 +152,14 @@ class TradeTargetUI:
|
||||
if not self.refresh_thread_running:
|
||||
self.refresh_thread_running = True
|
||||
self.start_refresh_thread()
|
||||
self.add_log("INFO", "UI刷新线程已启动")
|
||||
self.add_log(LogLevel.INFO, "UI刷新线程已启动")
|
||||
|
||||
def stop_ui_refresh(self):
|
||||
"""停止UI刷新线程"""
|
||||
if self.refresh_thread_running:
|
||||
self.stop_refresh_thread()
|
||||
self.refresh_thread_running = False
|
||||
self.add_log("INFO", "UI刷新线程已停止")
|
||||
self.add_log(LogLevel.INFO, "UI刷新线程已停止")
|
||||
|
||||
def create_menu_bar(self):
|
||||
"""创建菜单栏"""
|
||||
@@ -330,7 +332,7 @@ class TradeTargetUI:
|
||||
if selected:
|
||||
item = selected[0]
|
||||
values = self.trade_table.item(item)['values']
|
||||
self.add_log("DEBUG", f"双击查看详情: {values[0]} - {values[1]}")
|
||||
self.add_log(LogLevel.DEBUG, f"双击查看详情: {values[0]} - {values[1]}")
|
||||
|
||||
def get_selected_target(self):
|
||||
"""获取选中的交易标的"""
|
||||
@@ -351,10 +353,6 @@ class TradeTargetUI:
|
||||
|
||||
return None
|
||||
|
||||
def onLog(self, level: str, message: str):
|
||||
"""接收外部日志消息并显示在日志组件中"""
|
||||
self.add_log(level, message)
|
||||
|
||||
def start_selected_trade(self):
|
||||
"""启动选中的交易"""
|
||||
target = self.get_selected_target()
|
||||
@@ -374,12 +372,12 @@ class TradeTargetUI:
|
||||
|
||||
if result:
|
||||
target.enabled = True # type: ignore
|
||||
event_bus.publish(ActionEventEnableTrade, target.get_id())
|
||||
eBus.event_bus.publish(eBus.ActionEventEnableTrade, target.get_id())
|
||||
# self.add_log("INFO", f"已启动交易: {target.stock_code} - {target.stock_name}")
|
||||
# messagebox.showinfo("启动成功", f"已启动 {target.stock_code} ({target.stock_name}) 的交易")
|
||||
|
||||
def on_trade_enabled(self, target: TradeTarget):
|
||||
event_bus.publish(ActionEventEnableTrade, target)
|
||||
eBus.event_bus.publish(eBus.ActionEventEnableTrade, target)
|
||||
|
||||
def pause_selected_trade(self):
|
||||
"""暂停选中的交易"""
|
||||
@@ -400,7 +398,7 @@ class TradeTargetUI:
|
||||
|
||||
if result:
|
||||
target.enabled = False # type: ignore
|
||||
event_bus.publish(ActionEventDisableTrade, target.get_id())
|
||||
eBus.event_bus.publish(eBus.ActionEventDisableTrade, target.get_id())
|
||||
# self.add_log("INFO", f"已暂停交易: {target.stock_code} - {target.stock_name}")
|
||||
# messagebox.showinfo("暂停成功", f"已暂停 {target.stock_code} ({target.stock_name}) 的交易")
|
||||
|
||||
@@ -421,8 +419,8 @@ class TradeTargetUI:
|
||||
|
||||
if result:
|
||||
# 通过事件总线发出删除动作
|
||||
event_bus.publish(ActionEventDeleteTradeTarget, target.get_id())
|
||||
self.add_log("INFO", f"已发送删除请求: {target.stock_code} - {target.stock_name}")
|
||||
eBus.event_bus.publish(eBus.ActionEventDeleteTradeTarget, target.get_id())
|
||||
self.add_log(LogLevel.INFO, f"已发送删除请求: {target.stock_code} - {target.stock_name}")
|
||||
|
||||
def add_trade_target(self):
|
||||
"""添加新的交易标的"""
|
||||
@@ -463,7 +461,7 @@ class TradeTargetUI:
|
||||
return
|
||||
|
||||
# 发布事件通知主控制器添加标的
|
||||
event_bus.publish("add_trade_target", stock_code)
|
||||
eBus.event_bus.publish(eBus.ActionEventAddTradeTarget, stock_code)
|
||||
add_window.destroy()
|
||||
|
||||
def cancel_add():
|
||||
@@ -476,7 +474,7 @@ class TradeTargetUI:
|
||||
# 绑定回车键确认
|
||||
stock_code_entry.bind('<Return>', lambda event: confirm_add())
|
||||
|
||||
self.add_log("INFO", "点击添加交易标的按钮")
|
||||
self.add_log(LogLevel.INFO, "点击添加交易标的按钮")
|
||||
|
||||
def toggle_log_panel(self):
|
||||
"""切换日志面板的显示/隐藏"""
|
||||
@@ -514,18 +512,21 @@ class TradeTargetUI:
|
||||
values = self.trade_table.item(item)['values']
|
||||
if values and values[0] in selected_values:
|
||||
self.trade_table.selection_add(item)
|
||||
|
||||
def add_log(self, level, message):
|
||||
|
||||
def onLog(self, data:LogData):
|
||||
self.add_log(data.level, data.message)
|
||||
|
||||
def add_log(self, level:LogLevel, message):
|
||||
"""添加日志记录"""
|
||||
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
self.log_table.insert('', 0, values=(timestamp, level, message))
|
||||
self.log_table.insert('', 0, values=(timestamp, level.value, message))
|
||||
|
||||
def clear_logs(self):
|
||||
"""清空日志记录"""
|
||||
# 删除所有日志项
|
||||
for item in self.log_table.get_children():
|
||||
self.log_table.delete(item)
|
||||
self.add_log("INFO", "日志已清空")
|
||||
self.add_log(LogLevel.DEBUG, "日志已清空")
|
||||
|
||||
def system_settings(self):
|
||||
"""系统设置"""
|
||||
@@ -813,12 +814,12 @@ class TradeTargetUI:
|
||||
sfgrid_constants.initConfig()
|
||||
|
||||
messagebox.showinfo("成功", f"配置已保存!\n网格价格序列: {grid_price_str}\n部分配置可能需要重启程序后生效。")
|
||||
self.add_log("INFO", f"系统配置已更新 - 网格数量: {len(grid_prices)}")
|
||||
self.add_log(LogLevel.INFO, f"系统配置已更新 - 网格数量: {len(grid_prices)}")
|
||||
settings_window.destroy()
|
||||
|
||||
except Exception as e:
|
||||
messagebox.showerror("错误", f"保存配置失败:{str(e)}")
|
||||
self.add_log("ERROR", f"保存配置失败: {str(e)}")
|
||||
self.add_log(LogLevel.ERROR, f"保存配置失败: {str(e)}")
|
||||
|
||||
def cancel_settings():
|
||||
"""取消设置"""
|
||||
|
||||
Reference in New Issue
Block a user