function - 在函数中启动 websocket (Binance Websocket)
问题描述
我一直在使用币安 websocket。如果启动/停止命令在主程序中,效果很好。现在我想通过 GUI 启动和停止套接字。所以我将启动/停止命令分别放在一个函数中。但它不起作用。只是调用函数时没有反应。知道有什么问题吗?
这里是我的代码的相关部分(我对 python 很陌生,欢迎对此代码的任何提示):
def start_websocket(conn_key):
bm.start()
def stop_websocket(conn_key):
bm.close()
def process_message(msg):
currentValues['text']= msg['p']
# --- main ---
PUBLIC = '************************'
SECRET = '************************'
client = Client(api_key=PUBLIC, api_secret=SECRET)
bm = BinanceSocketManager(client)
conn_key = bm.start_trade_socket('BNBBTC', process_message)
# create main window and set its title
root = tk.Tk()
root.title('Websocket')
# create variable for displayed time and use it with Label
label = tk.Label(root)
label.grid(column=5, row=0)
#root.geometry('500x500')
bt_start_socket = tk.Button(root, text="Start Websocket", command=start_websocket(conn_key))
bt_start_socket.grid (column=1, row=1)
bt_stop_socket = tk.Button(root, text="Sop Websocket", command=stop_websocket(conn_key))
bt_stop_socket.grid (column=1, row=10)
解决方案
我想出了如何做到这一点。启动和停止命令应该在一个函数中。使用参数调用该函数以启动或停止。有趣的是 conn_key 必须是全局的。否则,如果再次调用该函数进行关闭,则会打开一个新的 Websocket。正如我之前所说:我对 python 很陌生。所以,不能保证这是最好的方法。它刚刚工作;-)
def start_stop_websocket(switch):
global conn_key
if switch == 'on':
bm.start()
print('started')
if switch == 'off':
bm.stop_socket(conn_key)
bm.close()
print('stoped')
推荐阅读
- reactjs - 更新 webpack-dev-server laravel
- android - 如何在 Android 上使用多语言应用程序从 Spinner 获取标准值
- ajax - 在 codeigniter 数据表中显示图像
- c# - 在 Wpf 的 TabControl 中切换到视图时如何摆脱 BindingExceptions
- python - groups.Groups.created_by:(fields.E303)“Groups.created_by”的反向查询名称与字段名称“User.groups”冲突
- reactjs - React Bootstrap - 工具提示未在 OverlayTrigger 中显示 img
- python - 无效参数:在图中未找到在 feed_devices 或 fetch_devices 中指定的参数
- java - 如何将 Angular 6 和 Spring MVC 与单个服务器集成?
- android - 如何在android布局的listview中显示mysql数据库的单行数据?
- jms - 多个 JMS 消费者到同一个 MQ JMS 队列是否保证负载平衡?