强生成完整代码 调:上面的代码是能够运行,现在修改,只是局部修改问题,不要胡乱修改。。。修改时一定要说明在什么类的什么地方,这样不要用户进行修改。找准位置,认真修改,本着用户至上的原则。生成完整代码。。。问题:1.主界面要求分成三栏,这里明明有要求,咋呈现的又是另一个界面,{ # 左侧面板
self.left_panel = Frame(main_container, width=200, bg="#eaeaea")
self.left_panel.pack(side='left', fill='y', padx=(0, 5))
# 中间内容区
self.center_frame = Frame(main_container, width=600)
self.center_frame.pack(side='left', fill='both', expand=True)
# 右侧面板
self.right_panel = Frame(main_container, width=600, bg="#f5f5f5")
self.right_panel.pack(side='right', fill='y')}2.其它问题未解析的引用 'front_hot_entry'未解析的引用 'front_freq_entry'未解析的引用 'front_freq_rec_entry'未解析的引用 'back_hot_entry'未解析的引用 'back_freq_entry'未解析的引用 'back_infreq_rec_entry'未解析的引用 'result_text'未解析的引用 'front_more_entry'未解析的引用 'front_less_entry'未解析的引用 'back_more_entry'未解析的引用 'back_less_entry'未解析的引用 'result_text'未解析的引用 'sum_value_entry'未解析的引用 'prime_ratio_entry'未解析的引用 'odd_even_ratio_entry'未解析的引用 'zone_rec_entry'未解析的引用 'consec_rec_entry'未解析的引用 'hot_cold_rec_entry'未解析的引用 'hot_rec_entry'未解析的引用 'cold_rec_entry'未解析的引用 'trend_rec_entry'未解析的引用 'result_text'未解析的引用 未解析的引用 'back_dan_entry''front_dan_entry'未解析的引用 'result_text'原代码# ==================== 主界面修改 ====================
class MainInterface:
def __init__(self, root: Tk, pool: NumberPool):
self.root = root
self.pool = pool
self.left_panel = None
self.center_frame = None
self.right_panel = None
self.core_vars = {}
self.pool_vars = {}
self.status_var = StringVar()
self.dynamic_text = None
self.current_module = None
self._setup_ui()
self._setup_event_handlers()
self.module_instances = {} # 添加模块实例存储
self._init_modules() # 初始化所有模块
# 初始化排除号码相关控件
self.exclude_front_entries = []
self.exclude_back_entries = []
self.front_dan_entries = []
self.back_dan_entries = []
# 初始化结果文本控件
self.result_text = None
# 初始化排除号码变量
self.exclude_front_var = StringVar()
self.exclude_back_var = StringVar()
self.recommend_front_var = StringVar()
self.recommend_back_var = StringVar()
# 初始化模块内容框架
self.dynamic_content = None
self.module_content_frame = None
self.labels = {
'InputAnalysis_analysis': [
"输入号码:" ,
"前区:" ,
"后区:" ,
"推荐号码:",
"前区:" ,
"后区:",
],
'combination_analysis': [
"前区热号:",
"前数字频:",
"前频繁推:",
"后区热号:",
"后数字频:",
"后低频推:"
],
'follow_analysis': [
"前推荐多:",
"前推荐少:",
"后推荐多:",
"后推荐少:"
],
'trend_analysis': [
"和值:",
"质合比:",
"奇偶比:",
"断区推荐:",
"连号推荐:",
"冷热推荐:",
"后区热号:",
"后区冷号:",
"趋势号:"
],
'NumberGeneration_analysis': [
"胆码:" ,
"前区:" ,
"后区:",
"推荐5注号码:",
"1:" "",
"2:" "",
"3:" "",
"4:" "",
"5:" ""
],
}
# 初始化所有模块的条目引用
self.front_dan_entry = None
self.back_dan_entry = None
self.result_text = None
self.exclude_front_entry = None
self.exclude_back_entry = None
self.front_entry = None
self.back_entry = None
def _focus_adjacent_entry(self, event, current_idx, offset, area):
"""移动焦点到相邻的输入框"""
entries = self.front_exclude_entries if area == 'front' else self.back_exclude_entries
new_idx = current_idx + offset
if 0 <= new_idx < len(entries):
entries[new_idx].focus_set()
def _init_modules(self):
"""初始化所有分析模块"""
modules = {
'input_analysis': InputAnalysisModule,
'combination_analysis': CombinationAnalysisModule,
'follow_analysis': FollowAnalysisModule,
'trend_analysis': TrendAnalysisModule,
'number_generation': NumberGenerationModule
}
for name, cls in modules.items():
self.module_instances[name] = cls(name)
def _setup_event_handlers(self):
"""初始化事件处理器"""
event_center.subscribe(EventType.MODULE_COMPLETE, self._handle_module_complete)
event_center.subscribe(EventType.UI_UPDATE, self._handle_ui_update)
event_center.subscribe(EventType.EXCLUDE_NUMBERS, self._handle_exclude_numbers)
def _setup_ui(self):
self.root.title(f"大乐透智能分析平台 - {GlobalConfig.VERSION}")
self.root.geometry("1400x800")
# 添加主标题(居中显示在最上面)
title_frame = Frame(self.root)
title_frame.pack(fill='x', pady=5)
Label(title_frame,
text="大乐透智能分析平台",
font=('微软雅黑', 16, 'bold')).pack(expand=True)
# 主容器
main_container = Frame(self.root)
main_container.pack(fill='both', expand=True, padx=5, pady=(0, 5))
# 左侧面板
self.left_panel = Frame(main_container, width=200, bg="#eaeaea")
self.left_panel.pack(side='left', fill='y', padx=(0, 5))
# 中间内容区
self.center_frame = Frame(main_container, width=600)
self.center_frame.pack(side='left', fill='both', expand=True)
# 右侧面板
self.right_panel = Frame(main_container, width=600, bg="#f5f5f5")
self.right_panel.pack(side='right', fill='y')
# 初始化各区域
self._setup_left_panel()
self._setup_center_area()
self._setup_right_panel()
def _setup_left_panel(self):
"""初始化左侧模块按钮区"""
module_names = {
'input_analysis': '1. 输入分析',
'combination_analysis': '2. 组合分析',
'follow_analysis': '3. 跟随分析',
'trend_analysis': '4. 趋势分析',
'number_generation': '5. 数字生成'
}
for module in GlobalConfig.MODULES:
Button(
self.left_panel,
text=module_names[module],
width=18,
command=lambda m=module: self._on_module_button_click(m)
).pack(pady=3, padx=5, ipady=3)
def _setup_center_area(self):
"""设置中间区域布局"""
# 期号区
period_frame = Frame(self.center_frame, height=30, bd=1, relief='solid')
period_frame.pack(fill='x', pady=(0, 5))
Label(period_frame, text="期号: ", font=('微软雅黑', 10)).pack(side='left')
self.period_var = StringVar(value="2023001")
Label(period_frame, textvariable=self.period_var, font=('微软雅黑', 10, 'bold')).pack(side='left')
# 核心区
core_frame = Frame(self.center_frame, bd=1, relief='solid')
core_frame.pack(fill='both', expand=True, pady=(0, 5))
# 核心区标题
Label(core_frame, text="核心区", font=('微软雅黑', 12, 'bold')).pack(anchor='w', padx=5, pady=2)
# 核心数据展示
self.core_vars = {
'front_area': StringVar(),
'back_area': StringVar(),
'front_hot': StringVar(),
'front_cold': StringVar(),
'back_hot': StringVar(),
'back_cold': StringVar()
}
for label, var_name in [
("前区:", 'front_area'),
("后区:", 'back_area'),
("前区热号:", 'front_hot'),
("前区冷号:", 'front_cold'),
("后区热号:", 'back_hot'),
("后区冷号:", 'back_cold')
]:
frame = Frame(core_frame)
frame.pack(fill='x', padx=5, pady=2)
Label(frame, text=label, width=10, anchor='w').pack(side='left')
# 添加容器Frame实现右边距2px
entry_container = Frame(frame)
entry_container.pack(side='left', fill='x', expand=True, padx=(0, 2))
entry = Entry(entry_container,
textvariable=self.core_vars[var_name],
font=('微软雅黑', 10),
state='readonly',
readonlybackground='#f0f0f0',
relief='sunken',
bd=1)
entry.pack(fill='x', expand=True)
# 动态区
dynamic_frame = Frame(self.center_frame, bd=1, relief='solid')
dynamic_frame.pack(fill='both', expand=True)
# 动态区标题框架
dynamic_header = Frame(dynamic_frame)
dynamic_header.pack(fill='x', padx=5, pady=5)
Label(dynamic_header, text="动态区", font=('微软雅黑', 12, 'bold')).pack(side='left')
# 按钮框架(靠右)
btn_frame = Frame(dynamic_header)
btn_frame.pack(side='right')
Button(btn_frame, text="运行", width=8, command=self._run_current_module).pack(side='left', padx=2)
Button(btn_frame, text="清除", width=8, command=self._clear_dynamic_content).pack(side='left', padx=2)
Button(btn_frame, text="保存", width=8, command=self._save_dynamic_content).pack(side='left', padx=2)
Button(btn_frame, text="刷新", width=8, command=self._refresh_dynamic).pack(side='left', padx=2)
# 模块内容容器
self.module_content_frame = Frame(dynamic_frame)
self.module_content_frame.pack(fill='both', expand=True, padx=5, pady=5)
def _run_current_module(self):
"""运行当前模块"""
if self.current_module:
self._run_module(self.current_module)
def _clear_dynamic_content(self):
"""清除动态区内容"""
if hasattr(self, 'result_text') and self.result_text:
self.result_text.delete(1.0, 'end')
def _save_dynamic_content(self):
"""保存动态区内容"""
if hasattr(self, 'result_text') and self.result_text:
content = self.result_text.get(1.0, 'end')
with open('dynamic_content.txt', 'w', encoding='utf-8') as f:
f.write(content)
messagebox.showinfo("保存成功", "动态区内容已保存")
def _refresh_dynamic(self):
"""刷新动态区"""
if self.current_module:
self._on_module_button_click(self.current_module)
def _setup_right_panel(self):
"""设置右侧号码池布局"""
# 号码池标题
pool_title_frame = Frame(self.right_panel)
pool_title_frame.pack(fill='x', pady=5)
Label(pool_title_frame, text="号码池", font=('微软雅黑', 12, 'bold')).pack(anchor='w')
# 号码池内容区(添加边框和2px内边距)
pool_content = Frame(self.right_panel, bd=1, relief='solid', padx=2, pady=2)
pool_content.pack(fill='both', expand=True, padx=5, pady=5)
# 创建Canvas和Scrollbar
canvas = Canvas(pool_content, highlightthickness=0)
scrollbar = Scrollbar(pool_content, orient="vertical", command=canvas.yview)
scrollable_frame = Frame(canvas)
scrollable_frame.bind(
"<Configure>",
lambda e: canvas.configure(scrollregion=canvas.bbox("all"))
)
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set)
# 号码池项目 - 优化布局和样式(带2px右边距)
for label, var_name, row_id in GlobalConfig.UI_CONFIG:
frame = Frame(scrollable_frame)
frame.grid(row=row_id, column=0, sticky='ew', padx=0, pady=1) # 移除水平padding
# 左侧标签(固定宽度8字符)
lbl = Label(frame, text=label, width=8, anchor='w')
lbl.pack(side='left', padx=(0, 5)) # 标签右侧留5px间距
# 右侧输入框容器(带2px右边距)
entry_container = Frame(frame)
entry_container.pack(side='left', fill='x', expand=True, padx=(0, 2))
var = StringVar()
self.pool_vars[var_name] = var
entry = Entry(entry_container,
textvariable=var,
font=('微软雅黑', 9),
state='readonly',
readonlybackground='#f0f0f0',
relief='sunken',
bd=1)
entry.pack(fill='x', expand=True)
canvas.pack(side="left", fill="both", expand=True)
scrollbar.pack(side="right", fill="y")
# 底部按钮区
btn_frame = Frame(self.right_panel)
btn_frame.pack(fill='x', pady=5)
Button(btn_frame, text="整理", width=10, command=self._organize_data).pack(side='left', padx=5)
Button(btn_frame, text="冻结", width=10, command=self._freeze_data).pack(side='left', padx=5)
Button(btn_frame, text="导出", width=10).pack(side='left', padx=5)
def _organize_data(self):
"""整理号码池数据"""
organize_event = Event(
event_id=int(time.time()),
type=EventType.DATA_ORGANIZE,
source='main_ui',
target='pool'
)
event_center.publish(organize_event)
def _freeze_data(self):
"""冻结号码池数据"""
freeze_event = Event(
event_id=int(time.time()),
type=EventType.DATA_FREEZE,
source='main_ui',
target='pool'
)
event_center.publish(freeze_event)
def _on_module_button_click(self, module: str):
"""完全重构的模块显示方法 - 嵌入主界面动态区"""
self.status_var.set(f"打开 {module} 模块...")
self.current_module = module
# 清除之前的动态内容
if self.dynamic_content:
self.dynamic_content.destroy()
# 创建模块专属容器
self.dynamic_content = Frame(self.module_content_frame)
self.dynamic_content.pack(fill='both', expand=True, padx=5, pady=5)
# 顶部模块标签区
top_label_frame = Frame(self.dynamic_content)
top_label_frame.pack(fill='x', pady=5)
module_labels = {
'input_analysis': '1. 输入分析',
'combination_analysis': '2. 组合分析',
'follow_analysis': '3. 跟随分析',
'trend_analysis': '4. 趋势分析',
'number_generation': '5. 数字生成'
}
Label(top_label_frame,
text=module_labels.get(module, module),
font=('微软雅黑', 14, 'bold')).pack()
# 内容区容器
content_frame = Frame(self.dynamic_content, bd=1, relief='solid')
content_frame.pack(fill='both', expand=True, padx=5, pady=5)
# 根据模块类型创建特定内容
if module == "input_analysis":
self._create_input_analysis_content(content_frame)
elif module == "combination_analysis":
self._create_combination_analysis_content(content_frame)
elif module == "follow_analysis":
self._create_follow_analysis_content(content_frame)
elif module == "trend_analysis":
self._create_trend_analysis_content(content_frame)
elif module == "number_generation":
self._create_number_generation_content(content_frame)
# 底部按钮区
bottom_frame = Frame(self.dynamic_content)
bottom_frame.pack(pady=5, fill='x')
Button(bottom_frame, text="运行",
command=lambda: self._run_module(module)).pack(side='left', padx=5)
Button(bottom_frame, text="清除",
command=lambda: self._clear_module_data(module)).pack(side='left', padx=5)
Button(bottom_frame, text="保存",
command=lambda: self._save_module_data(module)).pack(side='left', padx=5)
Button(bottom_frame, text="刷新",
command=lambda: self._on_module_renovate(module)).pack(side='right', padx=5)
def _create_ui_element(self, parent, label_text):
"""创建统一的UI元素(带右边距2px)"""
frame = Frame(parent)
frame.pack(fill='x', pady=2)
# 标签固定宽度
Label(frame, text=label_text, width=12, anchor='w').pack(side='left')
# 添加容器Frame实现右边距2px
entry_container = Frame(frame)
entry_container.pack(side='left', fill='x', expand=True, padx=(0, 2))
return entry_container
def _create_input_analysis_content(self, parent: Frame):
"""创建输入分析模块的特定内容"""
content_frame = Frame(parent)
content_frame.pack(fill='both', expand=True, padx=10, pady=10)
# 排除号码区
exclude_frame = Frame(content_frame)
exclude_frame.pack(fill='x', pady=5)
# 排除号码标签
Label(exclude_frame, text="排除号码:", font=('微软雅黑', 10, 'bold')).pack(anchor='w', pady=5)
# 前区排除号码
front_exclude_frame = Frame(exclude_frame)
front_exclude_frame.pack(fill='x', pady=2)
Label(front_exclude_frame, text="前区:", width=5, anchor='w').pack(side='left')
self.exclude_front_entry = Entry(front_exclude_frame)
self.exclude_front_entry.pack(side='left', fill='x', expand=True)
# 后区排除号码
back_exclude_frame = Frame(exclude_frame)
back_exclude_frame.pack(fill='x', pady=2)
Label(back_exclude_frame, text="后区:", width=5, anchor='w').pack(side='left')
self.exclude_back_entry = Entry(back_exclude_frame)
self.exclude_back_entry.pack(side='left', fill='x', expand=True)
# 号码输入区
input_frame = Frame(content_frame)
input_frame.pack(fill='x', pady=5)
Label(input_frame, text="输入号码:", font=('微软雅黑', 10, 'bold')).pack(anchor='w', pady=5)
# 前区号码
front_frame = Frame(input_frame)
front_frame.pack(fill='x', pady=2)
Label(front_frame, text="前区:", width=5, anchor='w').pack(side='left')
self.front_entry = Entry(front_frame)
self.front_entry.pack(side='left', fill='x', expand=True)
# 后区号码
back_frame = Frame(input_frame)
back_frame.pack(fill='x', pady=2)
Label(back_frame, text="后区:", width=5, anchor='w').pack(side='left')
self.back_entry = Entry(back_frame)
self.back_entry.pack(side='left', fill='x', expand=True)
# 结果显示区
result_frame = Frame(content_frame)
result_frame.pack(fill='both', expand=True, pady=5)
scrollbar = Scrollbar(result_frame)
scrollbar.pack(side='right', fill='y')
self.result_text = Text(result_frame, yscrollcommand=scrollbar.set, wrap='word')
self.result_text.pack(fill='both', expand=True)
scrollbar.config(command=self.result_text.yview)
def _create_combination_analysis_content(self, parent: Frame):
"""创建组合分析模块的特定内容"""
content_frame = Frame(parent)
content_frame.pack(fill='both', expand=True, padx=10, pady=10)
# 使用预定义的labels
for label in self.labels['combination_analysis']:
frame = Frame(content_frame)
frame.pack(fill='x', pady=2)
Label(frame, text=label, width=12, anchor='w',
font=('微软雅黑', 10, 'bold')).pack(side='left')
entry = Entry(frame, width=30, state='readonly',
readonlybackground='#f0f0f0')
entry.pack(side='left', padx=5)
# 保存对控件的引用
var_name = label.replace(':', '').replace(' ', '_')
setattr(self, f"{var_name}_entry", entry)
# 结果显示区
result_frame = Frame(content_frame)
result_frame.pack(fill='both', expand=True)
scrollbar = Scrollbar(result_frame)
scrollbar.pack(side='right', fill='y')
self.result_text = Text(result_frame, yscrollcommand=scrollbar.set, wrap='word')
self.result_text.pack(fill='both', expand=True)
scrollbar.config(command=self.result_text.yview)
# 保存对控件的引用
self.front_hot_entry = front_hot_entry
self.front_freq_entry = front_freq_entry
self.front_freq_rec_entry = front_freq_rec_entry
self.back_hot_entry = back_hot_entry
self.back_freq_entry = back_freq_entry
self.back_infreq_rec_entry = back_infreq_rec_entry
self.result_text = result_text
def _create_follow_analysis_content(self, parent: Frame):
"""创建跟随分析模块的特定内容"""
content_frame = Frame(parent)
content_frame.pack(fill='both', expand=True, padx=10, pady=10)
# 使用预定义的labels
for label in self.labels['follow_analysis']:
frame = Frame(content_frame)
frame.pack(fill='x', pady=2)
Label(frame, text=label, width=12, anchor='w',
font=('微软雅黑', 10, 'bold')).pack(side='left')
entry = Entry(frame, width=30, state='readonly',
readonlybackground='#f0f0f0')
entry.pack(side='left', padx=5)
var_name = label.replace(':', '').replace(' ', '_')
setattr(self, f"{var_name}_entry", entry)
# 结果显示区
result_frame = Frame(content_frame)
result_frame.pack(fill='both', expand=True)
scrollbar = Scrollbar(result_frame)
scrollbar.pack(side='right', fill='y')
self.result_text = Text(result_frame, yscrollcommand=scrollbar.set, wrap='word')
self.result_text.pack(fill='both', expand=True)
scrollbar.config(command=self.result_text.yview)
# 保存对控件的引用
self.front_more_entry = front_more_entry
self.front_less_entry = front_less_entry
self.back_more_entry = back_more_entry
self.back_less_entry = back_less_entry
self.result_text = result_text
def _create_trend_analysis_content(self, parent: Frame):
"""创建趋势分析模块的特定内容"""
content_frame = Frame(parent)
content_frame.pack(fill='both', expand=True, padx=10, pady=10)
# 使用预定义的labels
for label in self.labels['trend_analysis']:
frame = Frame(content_frame)
frame.pack(fill='x', pady=2)
Label(frame, text=label, width=12, anchor='w',
font=('微软雅黑', 10, 'bold')).pack(side='left')
entry = Entry(frame, width=30, state='readonly',
readonlybackground='#f0f0f0')
entry.pack(side='left', padx=5)
var_name = label.replace(':', '').replace(' ', '_')
setattr(self, f"{var_name}_entry", entry)
# 结果显示区
result_frame = Frame(content_frame)
result_frame.pack(fill='both', expand=True)
scrollbar = Scrollbar(result_frame)
scrollbar.pack(side='right', fill='y')
self.result_text = Text(result_frame, yscrollcommand=scrollbar.set, wrap='word')
self.result_text.pack(fill='both', expand=True)
scrollbar.config(command=self.result_text.yview)
# 保存对控件的引用
self.sum_value_entry = sum_value_entry
self.prime_ratio_entry = prime_ratio_entry
self.odd_even_ratio_entry = odd_even_ratio_entry
self.zone_rec_entry = zone_rec_entry
self.consec_rec_entry = consec_rec_entry
self.hot_cold_rec_entry = hot_cold_rec_entry
self.hot_rec_entry = hot_rec_entry
self.cold_rec_entry = cold_rec_entry
self.trend_rec_entry = trend_rec_entry
self.result_text = result_text
def _create_number_generation_content(self, parent: Frame):
"""创建数字生成模块的动态内容"""
content_frame = Frame(parent)
content_frame.pack(fill='both', expand=True, padx=10, pady=10)
# 胆码输入区
dan_frame = Frame(content_frame)
dan_frame.pack(fill='x', pady=5)
# 前区胆码
front_dan_frame = Frame(dan_frame)
front_dan_frame.pack(fill='x')
Label(front_dan_frame, text="前区胆码:").pack(side='left')
self.front_dan_entries = []
for i in range(5):
entry = Entry(front_dan_frame, width=3)
entry.pack(side='left', padx=2)
self.front_dan_entries.append(entry)
# 后区胆码
back_dan_frame = Frame(dan_frame)
back_dan_frame.pack(fill='x')
Label(back_dan_frame, text="后区胆码:").pack(side='left')
self.back_dan_entries = []
for i in range(5):
entry = Entry(back_dan_frame, width=3)
entry.pack(side='left', padx=2)
self.back_dan_entries.append(entry)
# 生成的号码显示区
generated_frame = Frame(content_frame)
generated_frame.pack(fill='x', pady=5)
Label(generated_frame, text="生成号码:").pack(anchor='w')
self.generated_labels = []
for i in range(1, 6):
frame = Frame(generated_frame)
frame.pack(fill='x')
Label(frame, text=f"{i}.").pack(side='left')
label = Label(frame, text="", width=30, anchor='w')
label.pack(side='left')
self.generated_labels.append(label)
# 结果显示区
result_frame = Frame(content_frame)
result_frame.pack(fill='both', expand=True)
scrollbar = Scrollbar(result_frame)
scrollbar.pack(side='right', fill='y')
self.result_text = Text(result_frame, yscrollcommand=scrollbar.set, wrap='word')
self.result_text.pack(fill='both', expand=True)
scrollbar.config(command=self.result_text.yview)
# 保存对控件的引用
self.front_dan_entry = front_dan_entry
self.back_dan_entry = back_dan_entry
self.result_text = result_text
def _run_module(self, module: str):
"""运行模块"""
if module == "input_analysis":
# 获取排除号码
exclude_front = self.exclude_front_entry.get()
exclude_back = self.exclude_back_entry.get()
# 发布排除号码事件
exclude_event = Event(
event_id=int(time.time()),
type=EventType.EXCLUDE_NUMBERS,
source='main_ui',
target='pool',
data={
'exclude_front': exclude_front,
'exclude_back': exclude_back
}
)
event_center.publish(exclude_event)
# 在结果文本中记录
self.result_text.insert('end', f"已设置排除号码: 前区 {exclude_front}, 后区 {exclude_back}\n")
# 发布模块运行事件
run_event = Event(
event_id=int(time.time()),
type=EventType.MODULE_RUN,
source='main_ui',
target=module
)
event_center.publish(run_event)
def _generate_recommend_numbers(self, exclude_front: str, exclude_back: str):
"""生成推荐号码(示例逻辑)"""
# 实际应用中应调用分析模块生成推荐号码
# 这里简化为生成随机推荐号码
import random
# 前区号码范围1-35
all_front = [str(idx) for idx in range(1, 36)]
exclude_front_list = exclude_front.split() if exclude_front else []
available_front = [num for num in all_front if num not in exclude_front_list]
# 后区号码范围1-12
all_back = [str(idx) for idx in range(1, 13)]
exclude_back_list = exclude_back.split() if exclude_back else []
available_back = [num for num in all_back if num not in exclude_back_list]
# 随机选择5个前区号码
if len(available_front) >= 5:
recommend_front = random.sample(available_front, 5)
else:
recommend_front = random.sample(all_front, 5)
# 随机选择2个后区号码
if len(available_back) >= 2:
recommend_back = random.sample(available_back, 2)
else:
recommend_back = random.sample(all_back, 2)
# 更新推荐号码显示
self.recommend_front_var.set(' '.join(sorted(recommend_front, key=int)))
self.recommend_back_var.set(' '.join(sorted(recommend_back, key=int)))
# 在结果文本中记录
self.result_text.insert('end',
f"生成推荐号码: 前区 {self.recommend_front_var.get()}, 后区 {self.recommend_back_var.get()}\n")
# 更新号码池
self._update_pool_with_recommendations(self.recommend_front_var.get(), self.recommend_back_var.get())
def _update_pool_with_recommendations(self, front: str, back: str):
"""用推荐号码更新号码池"""
# 发布事件更新号码池
update_event = Event(
event_id=int(time.time()),
type=EventType.POOL_UPDATE,
source='input_analysis',
target='pool',
data={
'front_numbers': front,
'back_numbers': back
}
)
event_center.publish(update_event)
# 在结果文本中记录
self.result_text.insert('end', "号码池已更新\n")
def _clear_module_data(self, module: str):
"""清除模块数据"""
if module == "input_analysis":
self.front_entry.delete(0, 'end')
self.back_entry.delete(0, 'end')
self.exclude_front_entry.delete(0, 'end')
self.exclude_back_entry.delete(0, 'end')
self.recommend_front_var.set('')
self.recommend_back_var.set('')
self.result_text.delete(1.0, 'end')
elif module == "combination_analysis":
self.front_hot_entry.delete(0, 'end')
self.front_freq_entry.delete(0, 'end')
self.front_freq_rec_entry.delete(0, 'end')
self.back_hot_entry.delete(0, 'end')
self.back_freq_entry.delete(0, 'end')
self.back_infreq_rec_entry.delete(0, 'end')
self.result_text.delete(1.0, 'end')
# 其他模块清除逻辑类似...
def _save_module_data(self, module: str):
"""保存模块数据"""
try:
data = {}
if module == "input_analysis":
data['front'] = self.front_entry.get()
data['back'] = self.back_entry.get()
data['exclude_front'] = self.exclude_front_entry.get()
data['exclude_back'] = self.exclude_back_entry.get()
data['recommend_front'] = self.recommend_front_var.get()
data['recommend_back'] = self.recommend_back_var.get()
data['result'] = self.result_text.get(1.0, 'end')
elif module == "combination_analysis":
data['front_hot'] = self.front_hot_entry.get()
data['front_freq'] = self.front_freq_entry.get()
data['front_freq_rec'] = self.front_freq_rec_entry.get()
data['back_hot'] = self.back_hot_entry.get()
data['back_freq'] = self.back_freq_entry.get()
data['back_infreq_rec'] = self.back_infreq_rec_entry.get()
data['result'] = self.result_text.get(1.0, 'end')
# 其他模块数据收集...
filename = f"{module}_data.json"
with open(filename, 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
messagebox.showinfo("保存成功", f"数据已保存到{filename}")
except Exception as e:
messagebox.showerror("保存失败", str(e))
logging.error(f"保存数据失败: {str(e)}", exc_info=True)
def _handle_exclude_numbers(self, event: Event):
"""处理排除号码事件"""
if event.data:
exclude_front = event.data.get('exclude_front', '')
exclude_back = event.data.get('exclude_back', '')
# 更新排除号码显示
self.exclude_front_entry.delete(0, 'end')
self.exclude_front_entry.insert(0, exclude_front)
self.exclude_back_entry.delete(0, 'end')
self.exclude_back_entry.insert(0, exclude_back)
# 在结果文本中记录
self.result_text.insert('end', f"收到排除号码: 前区 {exclude_front}, 后区 {exclude_back}\n")
def _handle_module_complete(self, event: Event):
self.status_var.set(f"{event.source} 模块运行完成")
if hasattr(self, 'result_text') and self.result_text:
self.result_text.insert('end', f"\n{event.source} 模块已完成分析\n")
def _on_module_renovate(self, module: str):
"""刷新模块"""
if module == self.current_module:
self._on_module_button_click(module)
def _handle_ui_update(self, event: Event):
"""处理UI更新事件"""
if not event.data or 'update_type' not in event.data:
return
update_type = event.data['update_type']
data = event.data.get('data', {})
# 处理核心变量更新
if update_type == 'organized_data':
# 确保所有核心变量已初始化
if not hasattr(self, 'core_vars'):
self.core_vars = {
'front_area': StringVar(),
'back_area': StringVar(),
'front_hot': StringVar(),
'front_cold': StringVar(),
'back_hot': StringVar(),
'back_cold': StringVar()
}
# 更新界面变量
self.core_vars['front_area'].set(str(data.get('front_numbers', [])))
self.core_vars['back_area'].set(str(data.get('back_numbers', [])))
self.core_vars['front_hot'].set(str(data.get('front_hot', [])))
self.core_vars['front_cold'].set(str(data.get('front_cold', [])))
self.core_vars['back_hot'].set(str(data.get('back_hot', [])))
self.core_vars['back_cold'].set(str(data.get('back_cold', [])))
最新发布