使用.config方法为标签分配变量后,Tkinter应用无法启动

时间:2018-11-28 13:11:10

标签: python tkinter ticker

我正在尝试使用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',因此通过.configure方法将其分配给btc_p应该不成问题。

1 个答案:

答案 0 :(得分:3)

您的代码存在的问题是,您在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()