GUIでリアルタイムレートを表示するサンプルスクリプト[Python][Tkinter]

こんにちわ、ニッケルメッキです。
GUIで裁量ツールを作成しようと思い、Tkinterというライブラリを使用してスクリプトを組んでみました。
サンプルでは、仮想通貨取引所BitMEXのBitMEXWebsocket(pip install bitmex_ws)というライブラリから価格を取得、Tkinterから生成されるウィンドウに表示しています。
GUIは需要なさそうですが、何かの参考になれば幸いです。

以下コード

import sys
import concurrent.futures
import time
import tkinter as tk
from bitmex_websocket import BitMEXWebsocket


endpoint = "https://www.bitmex.com/api/v1"
api_key = ""
api_secret = ""
symbol = "XBTUSD"

quit = False
ticker = []

# GUI
# ------------------------------------------------------------------------------
def run_tk():
   # ウィンドウクローズイベント
   def on_close():
       global quit
       quit = True
       root.destroy()

   # ティッカー更新
   def update_price_box():
       global ticker
       if len(ticker) > 0:
           price_box.delete(0, tk.END)
           price_box.insert(tk.END, ticker['last'])
           price_box.pack()
       price_box.after(1000, update_price_box)

   # ルート要素
   root = tk.Tk()
   root.title("価格")
   root.geometry("200x40")
   root.protocol("WM_DELETE_WINDOW", on_close)

   # インプットフレーム
   input_price_frame = tk.Frame(root)
   input_price_frame.pack(padx=5, pady=5)

   # 価格入力ラベル/ボックス
   global symbol
   price_box_label = tk.Label(input_price_frame, text=symbol, font=("", 15))
   price_box_label.pack(side=tk.LEFT)
   price_box = tk.Entry(input_price_frame, width=8, font=("", 15))
   price_box.pack(side=tk.LEFT, padx=5, pady=5)
   price_box.after(1000, update_price_box)

   # メインループ開始
   root.mainloop()

# BitMEXWebsocket
# ------------------------------------------------------------------------------
def run_ws():
   global endpoint
   global api_key
   global api_secret
   global symbol

   global quit
   global ticker

   ws = BitMEXWebsocket(endpoint=endpoint, symbol=symbol, api_key=api_key,
                        api_secret=api_secret)
   ws.get_instrument()

   try:
       while not quit and ws.ws.sock.connected:
           ticker = ws.get_ticker()
           time.sleep(0.1)

   except Exception as e:
       print(e)

def setup():
   executor = concurrent.futures.ThreadPoolExecutor(max_workers=5)
   future1 = executor.submit(run_ws)
   future2 = executor.submit(run_tk)
   future1.result()
   future2.result()

   while (not (future1.done() and future2.done())):
       time.sleep(1)

if __name__ == "__main__":
   try:
       setup()

   except KeyboardInterrupt:
       quit = True

[Tkinterを使用した裁量補助ツールのサンプル画像]


この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

17

ニッケルメッキ

相場好きです!それだけ。
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。