Приложение Tkinter не запускается после назначения метки переменной с помощью метода .config - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь написать простой биткойн-тикер с помощью модуля coinmarketcap.

Когда я запускаю следующий код, приложение tkinter не загружается.Ошибки не выдаются.Я думаю, что я вызываю все правильно, но не уверен, что еще может быть ошибка.

код:

from coinmarketcap import Market
import time
from tkinter import *
from tkinter import ttk
import tkinter as tk

def btc_ticker():
    while True:
        coinmarketcap = Market()
        btc_tick = coinmarketcap.ticker(1, convert ='GBP')
        btc_price = btc_tick['data']['quotes']['GBP']['price']
        #print(btc_price)
        time.sleep(2)
        btc_p.config(text = str(btc_price))
        root.after(2, btc_ticker)

root = Tk()
root.configure(background='black')

btc_p = Label(root, font=('consolas', 20, 'bold'), text="0",width =10, bg='black', fg='white')
btc_p.grid(row=0, column =0)

btc_ticker()

root.mainloop()

Я могу вывести переменную 'btc_price', чтобы присвоение этого btc_p черезметод .configure не должен быть проблемой.

1 Ответ

0 голосов
/ 28 ноября 2018

Проблема с вашим кодом заключалась в том, что у вас был цикл while True до root.mainlop(), который не мог его выполнить.Способ обработки постоянных обновлений с помощью tkinter состоит в использовании root.after(), который вы реализовали, но не правильно.Я удалил цикл while и оставил root.after в конце вашей функции, чтобы выполнить mainloop().Также обратите внимание, что первый аргумент root.after - это время в миллисекундах, поэтому чтобы ваша программа ждала 2 секунды, этот аргумент должен быть 2000.

from coinmarketcap import Market
from tkinter import *

def btc_ticker():
    coinmarketcap = Market()
    btc_tick = coinmarketcap.ticker(1, convert ='GBP')
    btc_price = btc_tick['data']['quotes']['GBP']['price']
    #print(btc_price)
    btc_p.config(text = str(btc_price))
    root.after(2000, btc_ticker)

root = Tk()
root.configure(background='black')

btc_p = Label(root, font=('consolas', 20, 'bold'), text="0",width =10, bg='black', fg='white')
btc_p.grid(row=0, column =0)

btc_ticker()
root.mainloop()
...