Tkinter return 来自 GUI 的 os.system 命令

Tkinter return result from os.system command for GUI

我最近一直在研究 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 root 上 window 我放置了一个标签和两个按钮,我希望标签显示连接状态,或者使用 os.system 发送的 ping 结果命令。

我遇到的问题是,当它在启动时运行时,标签更新正常, 单击调用该函数的按钮时,它不会更新或 return 我所期望的。 下面是我的代码:

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 界面来检查与不同服务器的连接,最终我想在计时器上设置它,以便它可以自动更新。 有人能给我指出正确的方向吗,或者解释一下为什么它在启动时起作用,而不是在单击按钮时起作用。

感谢您的宝贵时间。

约泽克

问题是当您尝试更改标签的值时,您只是在更改变量图标的实际内容,而不是将其打包到您的 window。

您可以为此做一个简单的解决方法,而不是重新定义您的图标,您可以使用 .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

这应该可以解决您遇到的问题。

祝你好运,