Tsinter从os.system命令返回GUI的结果

问题描述 投票:0回答:1

我最近一直在与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

python function button tkinter os.system
1个回答
0
投票

问题是,当您尝试更改标签的值时,您只是在更改变量图标的实际含义,而没有将其打包到窗口中。

一个简单的解决方法是,您可以使用.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

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

祝你好运,

© www.soinside.com 2019 - 2024. All rights reserved.