質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.48%

bitflyerAPIでコインの最新値段を取得し、1000msごとに更新してラベルとして表示したい

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 166

score 0

前提・実現したいこと

tkinterで定期実行をさせる

発生している問題・エラーメッセージ

bitflyerAPIでコインの最新値段を取得し、1000msごとに更新してラベルとして表示したいが
取得はできるものの二枚目、三枚目のように違う場所に連続で表示されてしまう
理想は、左側の79.15の部分に常に表示したい。

該当のソースコード

        #倍率設定
        up_mag = tkinter.LabelFrame(self.master,text=u'倍率設定', foreground='gray85')
        up_mag.pack(side=tkinter.LEFT,anchor=tkinter.NW)

        up_mag_ju = tkinter.LabelFrame(up_mag,text='BTC_JPY')
        up_mag_ju.pack()
        locale.setlocale(locale.LC_CTYPE, "Japanese_Japan.932")
        #api_key
        api_key_main = secret_coin.api_key
        #api_secret
        api_secret_main = secret_coin.api_secret
        #実際にapiを叩く
        api = pybitflyer.API(api_key=api_key_main, api_secret=api_secret_main)

        #直近のxrp取引価格
        base_price = api.ticker(product_code="XRP_JPY")["ltp"]


        def equal():
            btc_buy_equal.delete(0, tkinter.END)
            ii = float(btc_buy_price.cget('text'))
            uu = float(btc_buy_mag.get())
            a = ii * uu
            btc_buy_equal.insert(tkinter.END,a)

        def start_button():
            self.master.after(1000,price_load)
        def price_load():
            btc_buy_price = tkinter.Label(up_mag_ju,text=base_price)
            btc_buy_price.pack(anchor=tkinter.NW,side=tkinter.LEFT,ipadx=5)

            self.master.after(1000,start_button)
        start_button_1 = tkinter.Button(self.master,text='Start',command=start_button,width=10,height=10)
        start_button_1.place(x=600,y=600)



        btc_buy_price = tkinter.Label(up_mag_ju,text=base_price)
        btc_buy_price.pack(side=tkinter.LEFT,ipadx=5)
        btc_buy_1 = tkinter.Label(up_mag_ju,text='×')
        btc_buy_1.pack(side=tkinter.LEFT,ipadx=5)
        btc_buy_mag = tkinter.Entry(up_mag_ju,width=5)
        btc_buy_mag.pack(side=tkinter.LEFT,padx=5)
        btc_buy_2 = tkinter.Button(up_mag_ju,text='=',command=equal,width=5)
        btc_buy_2.pack(side=tkinter.LEFT,padx=5, pady=40)
        btc_buy_equal = tkinter.Entry(up_mag_ju,width=5)
        btc_buy_equal.pack(side=tkinter.LEFT,padx=5)

試したこと

pythonの勉強を始めて3日目なので、コードの文法や書き方のミスについては大目に見てほしいです(´;ω;`)
mainloop()のコードはこの下に書いてあります!イメージ説明

補足情報(FW/ツールのバージョンなど)

python3.8.9

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

問題は、タイマー内で毎回ラベルを生成している為に起こります。
ラベル生成を一度のみにして、表示を更新することで意図通りの挙動になるはずです。

前後のコードが省略されてるので、対処方法についてはこの通りに行かないかもしれませんが、
self.master ~がある事から、クラスが使われていると仮定し

        def price_load():
            self.btc_buy_price.config(text=base_price)  # (2) 既存のラベルの表示を変更
            self.master.after(1000,start_button)

        ... # 略

        btc_buy_price = tkinter.Label(up_mag_ju,text=base_price)
        btc_buy_price.pack(side=tkinter.LEFT,ipadx=5)

        self.btc_buy_price  = btc_buy_price  # (1) インスタンス変数へ代入しておく

インスタンス変数でうまく行かない場合は、掲載された部分以外の前後のコードの情報が必要です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る