我最近一直在与Tkinter一起玩,试图执行一个可以自己工作的python脚本。我浏览了论坛上的其他帖子,但似乎找不到解决方法。
以下脚本,我没有问题,这很正常。
import os
os.system('clear')
def check_ping():
hostname = "8.8.8.8"
# ping host once
response = os.system("ping -c 1 " + hostname)
# check the response...
if response == 0:
pingstatus = "\nYou are connected to the Internet. " + hostname + " is reachable"
else:
pingstatus = "\nNetwork Error - You are NOT connected to the Internet."
return pingstatus
pingstatus = check_ping()
print(pingstatus)
在Tkinter根窗口上,我放置了一个标签和两个按钮,我希望该标签显示连接的状态,或使用os.system命令发送的ping结果。
我的问题是,当它在启动时运行时,标签会更新得很好,单击调用该函数的按钮时,它不会更新或返回我期望的结果。下面是我的代码:
import os
from tkinter import *
root = Tk()
root.title('Ping Checker')
def check_ping():
hostname = "8.8.8.8"
response = os.system("ping -c 1 " + hostname)
# check the response...
if response == 0:
pingstatus = "Internet Connected."
icon = Label(root, text='Internet status: ' + pingstatus, bd=1)
else:
pingstatus = "Network Error - NOT connected."
icon = Label(root, text='Internet status: ' + pingstatus, bd=1)
return pingstatus
pingstatus = check_ping()
icon = Label(root, text='Internet status: ' + pingstatus, bd=1)
button_check = Button(root, text='Check Connection', command=check_ping)
button_quit = Button(root, text='Exit Program', command=root.quit)
icon.pack()
button_check.pack()
button_quit.pack()
root.mainloop()
我正在尝试创建一个GUI界面来检查与不同服务器的连接,最终我希望将其放在计时器上,以便它可以自动更新。请问有人向我指出正确的方向,或解释一下为什么它在启动时起作用一次,而不是在单击按钮时起作用。
谢谢您的时间。
Jozek
问题是,当您尝试更改标签的值时,您只是在更改变量图标的实际含义,而没有将其打包到窗口中。
一个简单的解决方法是,您可以使用.config()
方法来更改tkinter小部件的详细信息,而不是重新定义图标,而不是重新定义图标。
例如
def check_ping():
hostname = "8.8.8.8"
response = os.system("ping -c 1 " + hostname)
# check the response...
if response == 0:
pingstatus = "Internet Connected."
icon.config(text='Internet status: ' + pingstatus)
else:
pingstatus = "Network Error - NOT connected."
icon.config(text='Internet status: ' + pingstatus)
return pingstatus
这应该可以解决您遇到的问题。
祝你好运,
本