Выполнение бесконечного цикла без прерывания дальнейшего кода
import tkinter as tk
from tkinter import messagebox
import pyowm.commons.exceptions
from pyowm import OWM
from pyowm.utils.config import get_default_config
import psutil
config_dict = get_default_config()
config_dict['language'] = 'ru'
owm = OWM('3e8f1734c31354d3ae9df9282e1ba7fa')
root = tk.Tk()
root.title('Lenovo Live')
root.resizable(width=False, height=False)
# Создали canvas под размер окна
canvas = tk.Canvas(root, width=350, height=200, borderwidth=0)
# Заранее заготовили изображение
image = tk.PhotoImage(file='bg.png')
canvas.grid(column=0, row=0)
def build():
# Очищаем на случай, если на холсте уже что то есть
canvas.delete('all')
canvas.create_image((-250, 0), anchor=tk.NW, image=image) # Фон
mgr = owm.weather_manager()
try:
observation = mgr.weather_at_place('Saint Petersburg, RU')
w = observation.weather
wind = w.wind()['speed']
temperature = w.temperature('celsius')['temp']
temperature_reformat = round(temperature, 1)
# Добавление текста
canvas.create_text(170, 20, font='Intro 15', fill='white',
text=f'Температура: {temperature_reformat} °С')
canvas.create_text(170, 50, font='Intro 11', fill='white',
text=f' Погода: {str.capitalize(w.detailed_status)}')
canvas.create_text(180, 80, font='Intro 13', fill='white', text=f'Ветер: {wind} м/с')
canvas.create_text(180, 110, font='Intro 12', fill='white',
text=f'Заряд батареи: {psutil.sensors_battery().percent}%')
# canvas.create_text(180, 140, font='Intro 12', fill='white', text=f'Источник питания: {power}')
# except на случай, если нет Интернета
except pyowm.commons.exceptions.InvalidSSLCertificateError:
tk.messagebox.showerror(title='Ошибка', message='Отсутствует подключение к Интернету, \n'
' данные о погоде недоступны!')
canvas.create_text(170, 20, font='Intro 15', fill='white',
text='Температура: ??? °С')
canvas.create_text(170, 50, font='Intro 11', fill='white',
text=' Погода: ???')
canvas.create_text(180, 80, font='Intro 13', fill='white', text='Ветер: ??? м/с')
canvas.create_text(180, 110, font='Intro 12', fill='white',
text=f'Заряд батареи: {psutil.sensors_battery().percent}%')
build()
root.mainloop()
Мне нужно, чтобы программа постоянно смотрела, подключен ли АС источник питания, независимо от потока общего кода. Бесконечный цикл while True обрывает всю дальнейшую писанину, и программа не запускается (л-логика)
Источник: Stack Overflow на русском