Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我在while循环中遇到tkinter Main循环的问题_Python_Tkinter - Fatal编程技术网

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()