基本上我需要同時運行兩個while循環。原因是我需要一個循環來更新GUI,另一個來檢查程序是否連接到互聯網。所以也許這需要多線程,或者我只是一個網頁去解決我的問題。這裏是我的源代碼:如何製作True:兩個循環在python中同時運行
# -*- coding: utf-8 -*-
import sys
import urllib2
from Tkinter import *
import time
import socket
def daMainProgram():
airid = 'http://www.aviationweather.gov/metar/data?ids={airid}&format=raw&hours=0&taf=off&layout=off&date=0'.format(airid=e1.get())
website = urllib2.urlopen(airid)
website_html = website.read()
data_start = website_html.find("<!-- Data starts here -->")
br1 = data_start + 25
br2 = website_html.find("<br />")
metar_slice = website_html[br1:br2]
print("Here is the undecoded METAR data:\n"+metar_slice)
root2 = Tk()
root2.title("#Conection_Made#")
metar_dat_label = Label(root2, text="Here is the undecoded METAR data:")
metar_dat_label_ln_2 = Label(root2, text=metar_slice)
metar_dat_label.grid(row=0)
metar_dat_label_ln_2.grid(row=1)
def _quit():
sys.exit()
def internet(host="8.8.8.8", port=53, timeout=3):
try:
socket.setdefaulttimeout(timeout)
socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect((host, port))
return True
except Exception:
return False
def tkupdate():
while True:
root1.update()
def internet_loop():
while True:
out = internet()
if out == True:
connetion2internet.configure(text="YOU ARE CONNECTED TO THE INTERNET", fg="green")
if out == False:
connetion2internet.configure(text="YOU ARE NOT CONNECTED TO THE INTERNET", fg="red")
root1 = Tk()
root1.title("Welcome")
warning = Label(root1, text="*********** WARNING REQURIES INTERET TO RUN ***********")
warning.grid(row=0)
connetion2internet = Label(root1, text="")
connetion2internet.grid(row=1)
airport_code = Label(root1,text="Enter Airport Code:")
airport_code.grid(row=2, sticky="W")
e1 = Entry(root1)
e1.grid(row=2, sticky="E")
button1 = Button(root1, text="Contunue", command=daMainProgram).grid(row=3, sticky="W")
button2 = Button(root1, text="Quit", command=_quit)
button2.grid(row=3, sticky="E")
tkupdate()
internet_loop()
你'tkupdate'功能,在本質上,Tkinters'mainloop'是什麼。您應該考慮使用主循環,以及如何使用'after'方法定期檢查互聯網連接。 – SneakyTurtle
是的,我明白了,我通常使用主循環,但在這段代碼中,我希望對tkupdate具有與internet_loop 相同的控制權,如果您可以給出答案,請回答而不是評論 –
當您使用一個GUI庫,真的應該只有**一個主循環。但是,許多庫爲您提供運行代碼的方式,就像它是主循環的一部分一樣。我在一段時間內沒有完成過Tkinter,但是看到[你如何在Tkinter的事件循環旁邊運行你自己的代碼?](https://stackoverflow.com/questions/459083/how-do-you-run-your- own-code-alongside-tkinters-event-loop)。這應該讓你知道你需要做什麼。 –