#python #tkinter
#python #tkinter
Вопрос:
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 работает, если я закрываю Tkinter
окно. Что я могу сделать root.mainloop
?
Комментарии:
1. Это просто заморозит ваш графический интерфейс на 10 секунд, прежде чем показывать ваш графический интерфейс
Ответ №1:
Вы хотите отобразить погоду в Хельсинки-Финляндия через www.foreca.com , но это плохой подход, вы просто замораживаете свое приложение на 10 секунд в каждом цикле.
time.sleep(10) # freeze for 10 secs
Устраните цикл while и используйте root.mainloop()
вместо него, тогда ваше приложение останется запущенным, пока пользователь не закроет приложение, нажав на xкнопку.
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()
Но вы должны использовать потоковую обработку для обновления формы Tkinter, чтобы постоянно обновлять и обновлять данные. Нравится:
# run the while loop in a thread
Thread(target=refresh_data, daemon=True).start()
Какая refresh_data()
функция
Ответ №2:
Вы должны переместить код tkinter из цикла while и запустить цикл while в потоке:
from selenium import webdriver
#from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import time
from tkinter import *
from threading import Thread
root = Tk()
# labels for the result
myLabel1 = Label(root, text="sää salossa nyt")
myLabel3 = Label(root, justify='left')
myLabel4 = Label(root, justify='left')
myLabel1.grid(row=0, column=0)
myLabel3.grid(row=2, column=1, sticky='w')
myLabel4.grid(row=3, column=1, sticky='w')
def get_data():
# using headless mode
options = Options()
options.add_argument("--headless")
selain = webdriver.Chrome(options=options)
while True:
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")
# show the result
myLabel3.config(text=sää.text)
myLabel4.config(text=sää1.text)
print(sää.text)
print(sää1.text)
time.sleep(10)
selain.close()
# run the while loop in a thread
Thread(target=get_data, daemon=True).start()
root.mainloop()
Комментарии:
1. Что
daemon=True
означает / делает?2. @CoolCloud Смотрите Официальный документ .