专栏名称: Python中文社区
致力于成为国内最好的Python开发者学习交流平台,这里有关于Python的国内外最新消息,每日推送有趣有料的技术干货和社区动态。 官方网站:www.python-cn.com
目录
相关文章推荐
Python开发者  ·  o3-mini 碾压 DeepSeek ... ·  3 天前  
Python开发者  ·  请立即拿下软考证书(政策风口) ·  2 天前  
Python爱好者社区  ·  推荐我的抖音变现俱乐部! ·  2 天前  
Python爱好者社区  ·  120道Python面试题.pdf ... ·  5 天前  
Python爱好者社区  ·  DeepSeek薪资曝光! ·  3 天前  
51好读  ›  专栏  ›  Python中文社区

用 Python 打造加密货币实时价格追踪器

Python中文社区  · 公众号  · Python  · 2024-12-18 08:08

正文

加密货币市场素来以波动剧烈著称,每一次价格的细微变化,或许都隐藏着巨大的机会或风险。对于交易者而言,能够实时监控市场动态,及时捕捉行情,是制胜的关键。遗憾的是,市面上现有的工具大多价格不菲,功能复杂,甚至无法自定义,用户体验并不友好。因此,今天我将分享如何使用 Pythonccxttkinter,从零开始构建一款功能简洁但强大的实时加密货币价格追踪器
这款工具可以实时同步各大交易所的数据,动态更新选定交易对的买入价和卖出价,并通过颜色变化来直观呈现价格涨跌。更重要的是,它还具备事件日志记录功能,一旦网络连接中断或恢复,系统都会自动记录下来,并附上精准的时间戳,帮助你清晰回溯市场运行情况。此外,工具提供的动态交易对选择功能,用户只需选定交易所,系统便会自动加载可用的币对,无需繁琐输入,一键便可完成切换

接下来,我将逐步展示代码实现与功能逻辑。文末获取本文完整源码

一、项目初始化与库导入

首先,我们需要导入项目所需的基础库,包括 tkinter 用于 GUI 开发,ccxt 负责数据获取,threading 处理后台任务。
开发这款工具所依赖的技术栈并不复杂。Python 作为应用的核心语言,负责处理数据逻辑和任务调度;ccxt 库提供了与全球主流交易所的对接接口,能够高效地获取实时数据;而 tkinter 则承担起用户界面开发的任务,使整个应用的操作更加直观、简单。此外,为了解决数据更新时界面卡顿的问题,我们通过 Threading 模块实现了后台任务的处理,使得前端界面始终保持流畅
import tkinter as tk  from tkinter import ttk, messagebox  import ccxt  import threading  import time  from datetime import datetime

tkinter:Python 内置的图形界面库,简单易用。 

ccxt:提供与多家交易所 API 对接的接口,轻松获取实时数据。 

threading:用于实现后台任务,避免 GUI 界面卡顿。

二、构建应用主框架

接下来,我们搭建应用的基本结构,包括交易所初始化、价格记录和用户界面布局。
classCryptoPriceApp:  def __init__(self, root):  self.root = root  self.root.title("实时加密货币价格追踪器")  self.root.geometry("900x700")  self.root.resizable(False, False)  
# 初始化支持的交易所 self.exchanges = ["binance", "kraken", "bitfinex", "okx", "kucoin", "gateio"] self.exchange_instances = {name: getattr(ccxt, name)() for name inself.exchanges}
# 存储交易对和历史价格 self.symbol_map = {} self.previous_prices = {}
# 创建用户界面 self.create_widgets()
# 启动后台任务 self.start_exchange_threads() self.start_connection_check_thread()

exchanges:支持的交易所列表。通过ccxt库自动初始化对应实例。 

symbol_mapprevious_prices:用于存储监控的交易对及其历史价格。 

create_widgets:负责创建图形界面。 

start_exchange_threadsstart_connection_check_thread:分别启动价格更新和网络监控线程。  

三、创建用户界面

应用的界面布局清晰而合理,主要分为三个部分:控制面板、实时价格表和日志区域。在控制面板中,用户可以通过下拉菜单快速选择交易所和交易对,系统会自动加载所选交易所的币对,减少手动输入的麻烦。你还可以通过按钮添加或删除监控的交易对,随时调整需要重点关注的市场数据。
def create_widgets(self):  # 控制面板      control_frame = tk.Frame(self.root, pady=10)      control_frame.pack(fill="x", padx=20)  
tk.Label(control_frame, text="选择交易所:", font=("Helvetica", 12)).grid(row=0, column=0, padx=10) self.exchange_var = tk.StringVar(value=self.exchanges[0]) self.exchange_dropdown = ttk.Combobox(control_frame, textvariable=self.exchange_var, values=self.exchanges, state="readonly", width=20) self.exchange_dropdown.grid(row=0, column=1, padx=10)
tk.Label(control_frame, text="选择交易对:", font=("Helvetica", 12)).grid(row=1, column=0, padx=10) self.symbol_var = tk.StringVar() self.symbol_dropdown = ttk.Combobox(control_frame, textvariable=self.symbol_var, state="readonly", width=30) self.symbol_dropdown.grid(row=1, column=1, padx=10)
# 添加和删除按钮 button_frame = tk.Frame(control_frame) button_frame.grid(row=0, column=2, rowspan=2, padx=20) ttk.Button(button_frame, text="添加", command=self.add_to_table).pack(side="top", pady=5) ttk.Button(button_frame, text="删除", command=self.delete_selected).pack(side="top", pady=5)
# 实时价格表 table_frame = tk.Frame(self.root) table_frame.pack(fill="both", expand=True, padx=20, pady=10) self.tree = ttk.Treeview(table_frame, columns=("交易所", "交易对", "买入价", "卖出价", "更新时间"), show="headings", height=15) for col inself.tree["columns"]: self.tree.heading(col, text=col) self.tree.column(col, anchor="center") self.tree.pack(fill="both", expand=True)
# 日志区域 log_frame = tk.Frame(self.root, pady=10) log_frame.pack(fill="x", padx=20) tk.Label(log_frame, text="日志", font=("Helvetica", 12, "bold")).pack(anchor="w") self.log_text = tk.Text(log_frame, height=10, state="disabled", wrap="word", bg="#f0f0f0") self.log_text.pack(fill="x", padx=5, pady=5)

控制面板:用于选择交易所和交易对,添加或删除监控目标。 

实时价格表:展示价格数据,动态更新买入价、卖出价及更新时间。 

日志区域:记录网络状态及异常事件,方便用户追踪。

四、后台线程:价格实时更新与网络状态检测

实时价格表是整个应用的核心区域,这里会动态展示每个交易对的买入价、卖出价以及最后更新时间。当价格发生波动时,系统会自动用颜色进行标识:价格上涨时,数据会变为绿色;价格下跌时,则会显示为红色。这种设计能够让用户第一时间捕捉到市场的细微变化,确保不会错失重要行情。
def update_prices_for_exchange(self, exchange_name):  whileTrue:  for
                            

                            





请到「今天看啥」查看全文