有時(shí)我們只是想要一個(gè)速的工具來(lái)告訴當(dāng)前疫情的情況撵孤,我們只需要最少的數(shù)據(jù)彻消。 使用Python語(yǔ)言和tkinter圖形化顯示數(shù)據(jù)蛔趴。
首先,我們使用?Tkinter?庫(kù)使我們的腳本可以圖形化顯示智玻。
使用?requests?庫(kù)從 丁香園 獲取數(shù)據(jù)遂唧。
然后我們將在這種情況下顯示我們需要的數(shù)據(jù) “當(dāng)前確診人數(shù)”芙代,“總確診人數(shù)”吊奢。
需求和安裝
ssh客戶端為:MobaXterm,因?yàn)樗С諼11-Forwarding
系統(tǒng):Centos8 Minimal
Python版本:Python3.6.8
需要用到的庫(kù):requests,?json,?tkinter,?time
下面來(lái)安裝xorg,用來(lái)在遠(yuǎn)程終端中打開圖形化界面页滚,安裝python3-tkinter來(lái)創(chuàng)建GUI界面:
[root@localhost data]# yum -y install xorg-x11-xauth xorg-x11-utils python3-tkinter
上腳本
下面創(chuàng)建python腳本:
[root@localhost data]# touch gui.py
[root@localhost data]# chmod +x gui.py
[root@localhost data]# vim gui.py
#!/usr/bin/python3
# 導(dǎo)入time, requests, json, tkinter庫(kù)
import time
import requests
import json
from tkinter import *
# 創(chuàng)建一個(gè)窗口
window = Tk()
# 窗口標(biāo)題為“Covid-19”
window.title("Covid-19")
# 窗口大小為600px * 130px
window.geometry('600x130')
# 創(chuàng)建label 1召边,并創(chuàng)建初始信息
lbl = Label(window, text = "The number of confirmed cases in China: ....")
# label窗格占用第1列,第1行裹驰,靠左對(duì)齊隧熙。
lbl.grid(column = 1, row = 0, sticky = W)
# 創(chuàng)建label 2,并創(chuàng)建初始信息
lbl1 = Label(window, text = "Cumulative number of confirmed cases in China: ....")
lbl1.grid(column = 1, row = 1, sticky = W)
# 創(chuàng)建label 3幻林,并創(chuàng)建初始信息贞盯,用來(lái)顯示時(shí)間的。
lbl2 = Label(window, text = "Data update time: ....")
lbl2.grid(column = 1, row = 3, sticky = W)
# 創(chuàng)建label 4沪饺,并創(chuàng)建初始信息躏敢,用來(lái)顯示是否刷新。
lbl3 = Label(window, fg = 'green', text = "")
lbl3.grid(column = 1, row = 4, sticky = W)
# 定義一個(gè)點(diǎn)擊事件
def clicked():
? ? # 制定API接口的地址
? ? url = "https://lab.isaaclin.cn/nCoV/api/overall"
? ? # 獲取url地址
? ? page = requests.get(url)
? ? # 將json數(shù)據(jù)載入內(nèi)存
? ? data = json.loads(page.text)
? ? #下面4個(gè)變量用來(lái)將API中的時(shí)間戳轉(zhuǎn)化為時(shí)間整葡。
? ? tm = data["results"][0]["updateTime"]
? ? timeStamp = float(tm/1000)
? ? timeArray = time.localtime(timeStamp)
? ? updatetime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
? ? # 當(dāng)點(diǎn)擊時(shí)件余,獲取 currentConfirmedCount 的值,因?yàn)閠ext里面只能用str字符串遭居,所以需要將證書類型的數(shù)字轉(zhuǎn)化為字符串啼器。
? ? lbl.configure(text ="The number of confirmed cases in China: " + "%s" %(data["results"][0]["currentConfirmedCount"]))
? ? lbl1.configure(text ="Cumulative number of confirmed cases in China: " + "%s" %(data["results"][0]["confirmedCount"]))
? ? lbl2.configure(text ="Data update time: " + updatetime)
? ? lbl3.configure(text ="State: Refresh")
# 創(chuàng)建一個(gè)按鈕,用來(lái)刷新數(shù)據(jù)俱萍。
btn = Button(window, text ="Refresh", command = clicked)
# 按鈕的位置在第2列端壳,第5行。
btn.grid(column = 2, row = 5)
# 顯示窗口
window.mainloop()
解釋:
sticky =對(duì)齊方式的值有四個(gè)枪蘑,N, S, W, E更哄,代表著東西南北、上下左右腥寇。
執(zhí)行腳本成翩,輸出如下內(nèi)容:
[root@localhost data]# ./gui.py
點(diǎn)擊Refresh之后,會(huì)看到獲取的數(shù)據(jù)啦赦役。