使用TKinter制作测速小窗口,报错name 'btn' is not defined
import threadingimport tkinter as tk
from tkinter import ttk
import speedtest
root = tk.Tk()
root.geometry("300x233")
#root.iconbitmap("favicon.ico")
root.title("网络测速--森")
frm = tk.LabelFrame(root,text="测试结果")
frm.pack(padx=10, pady=10, fill=tk.X)
lbl_d = tk.Label(frm,text="下载速度:", font=("DS-Digital", 20))
lbl_d.grid(row=0, column=0, sticky=tk.W, padx=10)
lbl_u = tk.Label(frm,text="上传速度:", font=("DS-Digital", 20))
lbl_u.grid(row=1, column=0, sticky=tk.W, padx=10)
lbl_ul = tk.Label(frm,text=":", font=("DS-Digital", 20))
lbl_ul.grid(row=1, column=1, sticky=tk.W, padx=10)
def start_text():
def action():
sen = speedtest.Speedtest()
sen.get_servers()
pb.pack(padx = 10, pady = 10)
pb.start()
dl = sen.download()
ul = sen.upload()
lbl_dl.config(text=f"{dl/1024/1024:.2f}Mbits")
lbl_ul.config(text=f"{ul/1024/1024:.2f}Mbits")
btn.config(state=tk.NORMAL)
btn.config(state=tk.DISABLED)
threading.Thread(target=action).start()
pb = ttk.Progressbar(root,test="开始测速", height=2, command=start_text)
btn.pack(padx=5,pady=5,fill=tk.X,expand=True)
root.mainloop()
这段代码有一些语法错误和逻辑错误。以下是我做了一些修改后的代码:
import threading
import tkinter as tk
from tkinter import ttk
import speedtest
root = tk.Tk()
root.geometry("300x233")
#root.iconbitmap("favicon.ico")
root.title("网络测速--森")
frm = tk.LabelFrame(root,text="测试结果")
frm.pack(padx=10, pady=10, fill=tk.X)
lbl_d = tk.Label(frm,text="下载速度:", font=("DS-Digital", 20))
lbl_d.grid(row=0, column=0, sticky=tk.W, padx=10)
lbl_u = tk.Label(frm,text="上传速度:", font=("DS-Digital", 20))
lbl_u.grid(row=1, column=0, sticky=tk.W, padx=10)
lbl_dl = tk.Label(frm,text="", font=("DS-Digital", 20))
lbl_dl.grid(row=0, column=1, sticky=tk.W, padx=10)
lbl_ul = tk.Label(frm,text="", font=("DS-Digital", 20))
lbl_ul.grid(row=1, column=1, sticky=tk.W, padx=10)
def start_test():
def action():
sen = speedtest.Speedtest()
sen.get_servers()
pb.start()
dl = sen.download()
ul = sen.upload()
pb.stop()
lbl_dl.config(text=f"{dl/1024/1024:.2f} Mbits")
lbl_ul.config(text=f"{ul/1024/1024:.2f} Mbits")
btn.config(state=tk.NORMAL)
btn.config(state=tk.DISABLED)
threading.Thread(target=action).start()
pb = ttk.Progressbar(root, mode='indeterminate', length=280)
pb.pack(padx=10, pady=10)
btn = ttk.Button(root, text="开始测速", command=start_test)
btn.pack(padx=5,pady=5,fill=tk.X,expand=True)
root.mainloop()
修改的内容包括:
将start_text()改为start_test(),以便与按钮命令一致。
将pb的test参数改为mode参数,并将command参数从start_text()改为start_test()。
在action()函数中,加入pb.stop()以停止进度条的动画。
将下载速度和上传速度的显示标签(lbl_dl和lbl_ul)中的文本格式化字符串更正为正确的格式。
将按钮启用和禁用的语句放入start_test()函数中,以确保在测速时禁用按钮,在测速完成后启用按钮。
注意,由于speedtest模块需要访问互联网,因此在运行此代码之前,确保您的计算机已连接到互联网。
有用请设置最佳答案
页:
[1]