Label() без серого фона Python

Рейтинг: 0Ответов: 1Опубликовано: 02.07.2023

Мне нужно, чтобы текст в Label() был без серого фона, при этом чтобы картинка-градиент осталась.

Текст должен быть без фона

ну и вот вам пачка говнокода на python 3.11:

from tkinter import *
from pyowm import OWM
from pyowm.utils.config import get_default_config
from PIL import Image, ImageTk

config_dict = get_default_config()
config_dict['language'] = 'ru'
owm = OWM('3e8f1734c31354d3ae9df9282e1ba7fa')

root = Tk()
root.title('KryoWeather')
root.geometry('300x300')
root.resizable(width=False, height=False)
root.rowconfigure(300)
root.columnconfigure(300)
img = PhotoImage(file='bg.png')
Label(image=img).pack()


def build():
    mgr = owm.weather_manager()
    observation = mgr.weather_at_place('Saint Petersburg, RU')
    w = observation.weather
    temperature = w.temperature('celsius')['temp']
    temperature_reformat = round(temperature, 1)
    Label(text=f'Погода:{str.capitalize(w.detailed_status)}').place(x=55, y=35)
    Label(text=f'Температура: {temperature_reformat} °С').place(x=90, y=5)



build()
root.mainloop()

Ответы

▲ 3Принят

Label не поддерживает прозрачность фона, поэтому мы не можем его использовать. Вместо этого применим виджет Canvas - холст, на который можно наносить нужные нам объекты. В нашем случае это изображение и текст.

Параметр anchor=tk.NW устанавливает отсчет координат от левого верхнего угла, а не от центра. Также, я не совсем понял зачем нужны row- и columnconfigure для фиксированного окна с единственным объектом. Комментарии разъясняют код по шагам:

from pyowm import OWM
from pyowm.utils.config import get_default_config

config_dict = get_default_config()
config_dict['language'] = 'ru'
owm = OWM('3e8f1734c31354d3ae9df9282e1ba7fa')

root = tk.Tk()
root.title('KryoWeather')
root.resizable(width=False, height=False)

# Создали canvas под размер окна
canvas = tk.Canvas(root, width=300, height=300)
# Заранее заготовили изображение
image = tk.PhotoImage(file='bg.png')
canvas.grid(column=0, row=0)


def build():
    # Очищаем на случай, если на холсте уже что то есть
    canvas.delete('all')
    canvas.create_image((0, 0), anchor=tk.NW, image=image) # Фон

    mgr = owm.weather_manager()
    observation = mgr.weather_at_place('Saint Petersburg, RU')
    w = observation.weather
    temperature = w.temperature('celsius')['temp']
    temperature_reformat = round(temperature, 1)

    # Добавление текста
    canvas.create_text(55, 35, anchor=tk.NW, text=f'Погода: {str.capitalize(w.detailed_status)}')
    canvas.create_text(90, 5, anchor=tk.NW, text=f'Температура: {temperature_reformat} °С')


build()
root.mainloop()