You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter Entry输入未更新变量 加密交易机器人开发问题求助

Tkinter Entry变量不同步问题修复方案

问题根因

  1. 变量赋值时机错误:你在Entry组件初始化完成后就立即执行了sym = crypto.get()+'USDT'、qty = OrderAmt.get(),这两行代码仅在程序启动时运行一次,读取的是Entry的默认值,后续用户修改输入内容不会主动触发这两个变量更新。
  2. 变量作用域错误:confirm()函数内定义的sym、qty是函数局部变量,赋值后仅在函数内部生效,不会修改全局的sym、qty变量,点击Confirm按钮也无法更新全局参数。

修复步骤

步骤1:删除无效的初始化赋值

删掉程序初始化阶段的两行全局变量赋值代码:

# 删掉以下两行
sym = crypto.get()+'USDT'
qty = OrderAmt.get()

步骤2:修正confirm函数的作用域声明

给confirm函数添加全局变量声明,确保修改的是全局可用的参数,同时增加基础校验避免读取到占位符:

def confirm():
    # 声明要修改全局变量
    global sym, qty
    # 加strip()避免用户输入前后空格
    input_sym = crypto.get().strip()
    input_qty = OrderAmt.get().strip()
    # 校验避免读取到占位符文本
    if input_sym == "Crypto Symbol" or input_sym == "":
        print("请输入有效加密货币符号")
        return
    if input_qty == "Order Amount (Coins)" or input_qty == "":
        print("请输入有效下单数量")
        return
    sym = input_sym + 'USDT'
    qty = float(input_qty)
    print(f"参数已更新:交易对{sym},下单数量{qty}")

步骤3:修正Trade按钮逻辑(二选一即可)

方案A:点击Trade时直接读取最新输入(无需提前点击Confirm)

Trade = tk.Button(root, text='Trade', padx=10, pady=5, fg='white', bg='black', command = lambda: print(crypto.get().strip()+'USDT') )
# 后续要调用交易策略的话改成:
# Trade = tk.Button(root, text='Trade', padx=10, pady=5, fg='white', bg='black', command = lambda: strategyTest(crypto.get().strip()+'USDT', float(OrderAmt.get().strip())) )

方案B:点击Confirm确认参数后才允许Trade执行

保留现有Trade逻辑即可,点击Confirm后参数就会更新到全局变量,Trade点击时读取的就是最新值。

额外注意事项

调用Binance API时,下单数量qty需要为数值类型,不能直接传入Entry读取的字符串,需要提前做float()/int()转换,同时要符合交易对的下单精度要求,避免API报错。


内容的提问来源于stack exchange,提问作者Reckliss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:45:03