Python 我在while循环中遇到tkinter Main循环的问题
当我关闭Python 我在while循环中遇到tkinter Main循环的问题,python,tkinter,Python,Tkinter,当我关闭Tkinter窗口时,while循环工作。使用root.mainloop我能做什么?您想通过显示赫尔辛基芬兰天气,但这是一种糟糕的方法,您只需在每个循环中将应用程序冻结10秒 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time from tkinter import * while True: selain = webdriver.Chrom
Tkinter
窗口时,while循环工作。使用root.mainloop
我能做什么?您想通过显示赫尔辛基芬兰天气,但这是一种糟糕的方法,您只需在每个循环中将应用程序冻结10秒
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from tkinter import *
while True:
selain = webdriver.Chrome()
selain.get("https://m.kellonaika.fi")
kello = selain.find_element_by_id("clock-time")
selain.get("https://www.foreca.fi/Finland/Salo")
sää = selain.find_element_by_class_name("l")
sää1 = selain.find_element_by_class_name("r")
print(sää.text)
print(sää1.text)
root = Tk()
myLabel1 = Label(root, text="sää salossa nyt")
myLabel3 = Label(root, text=sää.text)
myLabel4 = Label(root, text=sää1.text)
myLabel1.grid(row=0, column=2)
myLabel3.grid(row=2, column=1)
myLabel4.grid(row=3, column=1)
selain.close()
time.sleep(10)
root.mainloop()
消除while循环,改为使用root.mainloop()
,然后应用程序保持运行,直到用户单击x按钮关闭应用程序
但是您应该使用线程来更新Tkinter表单,以保持更新和刷新数据。比如:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from tkinter import *
selain = webdriver.Chrome()
selain.get("https://m.kellonaika.fi")
kello = selain.find_element_by_id("clock-time")
selain.get("https://www.foreca.fi/Finland/Salo")
sää = selain.find_element_by_class_name("l")
sää1 = selain.find_element_by_class_name("r")
print(sää.text)
print(sää1.text)
root = Tk()
myLabel1 = Label(root, text="sää salossa nyt")
myLabel3 = Label(root, text=sää.text)
myLabel4 = Label(root, text=sää1.text)
myLabel1.grid(row=0, column=2)
myLabel3.grid(row=2, column=1)
myLabel4.grid(row=3, column=1)
selain.close()
root.mainloop()
哪个
refresh\u data()
是一个函数您应该将tkinter代码移出while循环,并在线程中运行while循环:
从selenium导入webdriver
#从selenium.webdriver.common.keys导入密钥
从selenium.webdriver.chrome.options导入选项
导入时间
从tkinter进口*
从线程导入线程
root=Tk()
#结果的标签
myLabel1=标签(根,text=“säsalossa nyt”)
myLabel3=标签(根,justify='left')
myLabel4=标签(根,justify='left')
myLabel1.grid(行=0,列=0)
myLabel3.grid(行=2,列=1,粘性=w')
myLabel4.grid(行=3,列=1,粘性=w')
def get_data():
#使用无头模式
选项=选项()
选项。添加参数(“--headless”)
selain=webdriver.Chrome(选项=options)
尽管如此:
selain.得到(“https://m.kellonaika.fi")
#kello=selain.按id(“时钟时间”)查找元素
selain.得到(“https://www.foreca.fi/Finland/Salo")
sää=selain.通过类名称(“l”)查找元素
sä1=selain.通过类名称(“r”)查找元素
#显示结果
myLabel3.config(text=sä.text)
myLabel4.config(text=sä1.text)
打印(sätext)
打印(sä1.文本)
时间。睡眠(10)
selain.close()
#在线程中运行while循环
线程(target=get_data,daemon=True)
root.mainloop()
这将冻结您的GUI 10秒钟,然后显示您的GUI什么是daemon=True
意思/作用?@CoolCloud请参阅官方。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from tkinter import *
selain = webdriver.Chrome()
selain.get("https://m.kellonaika.fi")
kello = selain.find_element_by_id("clock-time")
selain.get("https://www.foreca.fi/Finland/Salo")
sää = selain.find_element_by_class_name("l")
sää1 = selain.find_element_by_class_name("r")
print(sää.text)
print(sää1.text)
root = Tk()
myLabel1 = Label(root, text="sää salossa nyt")
myLabel3 = Label(root, text=sää.text)
myLabel4 = Label(root, text=sää1.text)
myLabel1.grid(row=0, column=2)
myLabel3.grid(row=2, column=1)
myLabel4.grid(row=3, column=1)
selain.close()
root.mainloop()
# run the while loop in a thread
Thread(target=refresh_data, daemon=True).start()