Как мне сделать фон метки tkinter прозрачным, чтобы был виден только текст?

#python #user-interface #tkinter #label #transparent

#python #пользовательский интерфейс #tkinter #метка #прозрачный

Вопрос:

Я создаю приложение обратного отсчета для события, и мне удалось запустить все, кроме меток. Я не могу сделать их фон прозрачным, чтобы отображался только текст. Есть ли у меня способ сделать это?

 import datetime
import tkinter as tk


def round_time(dt, round_to):
    seconds = (dt - dt.min).seconds
    rounding = (seconds   round_to / 2) // round_to * round_to
    return dt   datetime.timedelta(0, rounding - seconds, -dt.microsecond)


def ct(label):
    def count():
        now = round_time(datetime.datetime.now(), round_to=1)
        eh = datetime.datetime(2019, 3, 31, 20, 30)
        tte = eh - now
        label.config(text=str(tte))
        label.after(50, count)

    count()


root = tk.Tk()
root.title("Earth Hour Countdown!")
now = round_time(datetime.datetime.now(), round_to=1)
eh = datetime.datetime(2019, 3, 31, 20, 30)
tte = eh - now
frame = tk.Frame(root, bg="#486068")
frame.place(relwidth=1, relheight=1)

canvas = tk.Canvas(root, height=200, width=500)
canvas.place(relwidth=1, relheight=1)

bg_img = tk.PhotoImage(file="C:/Users/bmg/Desktop/eh1.gif")
bg_label = tk.Label(canvas, image=bg_img)
bg_label.place(relwidth=1, relheight=1)

label_msg = tk.Label(root, text="Earth Hour Countdown:", font="MSGothic 50 bold", bg="black", fg="#652828", bd=1)
label_msg.place(relx=0.035, rely=0.1)

label_cd = tk.Label(root, text=str(tte), font="MSGothic 50 bold", bg="black", fg="#652828", bd=1)
label_cd.place(relx=0.590, rely=0.1)

ehtime_label = tk.Label(root, text=("Earth Hour:"   eh.strftime("%d-%m-%Y %H:%M:%S")), font="MSGothic 50 bold", bg="black", fg="#652828", bd=1)
ehtime_label.place(relx=0.13, rely=0.3)

ct(label_cd)

root.mainloop()
  

Пример вывода метки:https://imgur.com/97DkJBa

Ответ №1:

Я не думаю, что вы можете сделать метку прозрачной.

Вы можете создать текст на холсте, хотя у этого текста по умолчанию нет фона:

 import datetime
import tkinter as tk


def round_time(dt, round_to):
    seconds = (dt - dt.min).seconds
    rounding = (seconds   round_to / 2) // round_to * round_to
    return dt   datetime.timedelta(0, rounding - seconds, -dt.microsecond)


def ct():
    def count():
        now = round_time(datetime.datetime.now(), round_to=1)
        eh = datetime.datetime(2019, 3, 31, 20, 30)
        tte = eh - now
        canvas.itemconfig(label_cd, text=str(tte))
        root.after(50, count)

    count()


root = tk.Tk()
root.title("Earth Hour Countdown!")
now = round_time(datetime.datetime.now(), round_to=1)
eh = datetime.datetime(2019, 3, 31, 20, 30)
tte = eh - now

canvas = tk.Canvas(root, height=360, width=1333)
canvas.pack()

bg_img = tk.PhotoImage(file="C:/Users/bmg/Desktop/eh1.gif")
bg_label = canvas.create_image((0,0), image=bg_img, anchor=tk.N tk.W)

label_msg = canvas.create_text((410, 120), text="Earth Hour Countdown:", font="MSGothic 50 bold", fill="#652828")

label_cd = canvas.create_text((1030,120), text=str(tte), font="MSGothic 50 bold", fill="#652828")

ehtime_label = canvas.create_text((650,240), text=("Earth Hour:"   eh.strftime("%d-%m-%Y %H:%M:%S")), font="MSGothic 50 bold", fill="#652828")

ct()

root.mainloop()
  

Обратите внимание, что это также требует некоторых изменений в размещении текста и способах его обновления. Я постарался максимально приблизить все к вашему примеру. Обратите внимание, что отсутствие фона для вашего текста может не обеспечить желаемой читаемости:

введите описание изображения здесь

Комментарии:

1. Но как мне избавиться от белых границ вокруг изображения?

2. Добавить highlightthickness=0 к созданию холста