晚上好🌙🌙🌙
本答案参考通义千问
要实现“N个显示器显示N个股票软件,联动显示同一只股票”,并且满足以下需求:
- 无需手动输入N次股票代码;
- 单击某一个显示器中的个股时,在该个股下方弹出按钮(仅在点击个股时弹出);
- 点击按钮后,其他显示器同步显示相同个股;
- 设置一个“脚本运行与禁止运行”的按钮;
- 支持不同股票软件之间的联动控制(如通达信、东方财富、同花顺);
- 支持选择性联动(单向或双向);
- 脚本升级免费或不依赖软件版本。
✅ 解决方案概述
我们可以通过以下方式实现这个功能:
一、技术选型
- 编程语言:Python(适合自动化脚本开发)
- 工具/库:
pyautogui:用于模拟鼠标点击和键盘操作tkinter 或 PyQt:用于创建GUI界面time / threading:用于定时任务和多线程处理os / subprocess:用于启动/关闭股票软件
✅ 详细步骤与实现方法
1. 设计主控程序结构
1.1 主程序功能模块
- 股票代码输入模块
- 显示器状态管理模块
- 联动逻辑控制模块
- 按钮弹出逻辑
- GUI界面模块
- 脚本运行开关模块
1.2 程序流程图
+-----------------------------------+
| 主程序启动 |
+-----------------------------------+
| |
+---v---+ |
| 输入股票代码 | <------------+
+-------------+
|
+---v---+
| 显示器配置 | <------------+
+-------------+
|
+---v---+
| 联动逻辑 | <------------+
+-------------+
|
+---v---+
| GUI界面 | <------------+
+-------------+
2. 实现“单击个股后弹出按钮”功能
2.1 检测股票软件窗口位置
使用 pyautogui 获取每个股票软件的窗口坐标,例如:
import pyautogui
# 获取某个股票软件窗口的位置(假设是通达信)
def get_window_position(app_name):
# 这里需要根据实际窗口名称获取坐标
# 可以用 pygetwindow 库来获取窗口信息
return (x, y, width, height)
2.2 在个股下方弹出按钮
当检测到用户点击了某个股票软件中的个股时,在该个股下方绘制一个按钮。可以使用 tkinter 创建弹窗或在主界面上添加按钮。
import tkinter as tk
def show_button():
button = tk.Button(root, text="联动", command=trigger_linkage)
button.pack()
3. 实现“点击按钮后联动所有显示器”
3.1 需要对每个显示器上的股票软件进行操作
使用 pyautogui 模拟键盘输入股票代码,并触发刷新。
def trigger_linkage(stock_code):
for display in displays:
if display.is_active:
pyautogui.click(display.x, display.y) # 点击股票软件窗口
pyautogui.write(stock_code)
pyautogui.press('enter')
4. 实现“脚本运行与禁止运行”按钮
4.1 使用 tkinter 创建按钮
def toggle_script(enable):
global script_running
script_running = enable
if enable:
print("脚本已启用")
else:
print("脚本已禁用")
5. 实现“可选择性联动”功能
5.1 定义显示器之间联动关系
可以用字典或列表保存哪些显示器之间需要联动:
linkage_rules = {
"display_1": ["display_2", "display_3"],
"display_2": ["display_1"],
"display_3": [],
}
5.2 根据规则执行联动
def apply_linkage_rules(stock_code):
for source in linkage_rules:
if source == current_display:
for target in linkage_rules[source]:
perform_linkage(target, stock_code)
6. 兼容不同股票软件
6.1 针对不同软件的定位差异
每种股票软件的窗口布局不同,需要分别定义其坐标和操作方式。
stock_software_config = {
"通达信": {"window_title": "通达信", "input_coords": (100, 200)},
"东方财富": {"window_title": "东方财富", "input_coords": (150, 250)},
"同花顺": {"window_title": "同花顺", "input_coords": (120, 220)},
}
7. 确保脚本兼容性
7.1 不依赖股票软件版本
通过 模拟鼠标键盘操作 来完成联动,不涉及股票软件内部接口,因此不会因软件升级而失效。
✅ 示例代码(简化版)
import pyautogui
import time
import threading
import tkinter as tk
# 假设的显示器配置
displays = [
{"name": "Display 1", "software": "通达信", "coords": (100, 100)},
{"name": "Display 2", "software": "东方财富", "coords": (300, 100)},
{"name": "Display 3", "software": "同花顺", "coords": (500, 100)},
]
script_running = True
def trigger_linkage(stock_code):
if not script_running:
return
for display in displays:
x, y = display["coords"]
pyautogui.click(x, y)
pyautogui.write(stock_code)
pyautogui.press('enter')
def show_button(stock_code):
def on_click():
trigger_linkage(stock_code)
button = tk.Button(root, text="联动", command=on_click)
button.pack()
root = tk.Tk()
root.title("股票联动控制器")
def start_script():
stock_code = entry.get()
show_button(stock_code)
entry = tk.Entry(root)
entry.pack()
button_start = tk.Button(root, text="开始联动", command=start_script)
button_start.pack()
toggle_button = tk.Button(root, text="脚本运行", command=lambda: toggle_script(True))
toggle_button.pack()
root.mainloop()
✅ 总结
关键点总结:
- 无需重复输入股票代码:通过脚本统一控制。
- 弹出按钮机制:基于点击事件触发。
- 联动逻辑:使用
pyautogui 模拟操作,适用于各类股票软件。 - 脚本运行开关:通过 GUI 控制脚本启停。
- 可配置联动关系:支持任意显示器之间的联动。
- 兼容性强:不依赖股票软件版本。
如果你有具体股票软件的窗口截图或坐标信息,我可以进一步优化代码,使其更精准地识别和操作各显示器。是否需要我帮你写一个针对特定显示器的联动脚本?