【问题标题】:How do I make the background of a tkinter label transparent so only the text is seen?如何使 tkinter 标签的背景透明,以便只看到文本?
【发布时间】:2019-08-15 21:32:42
【问题描述】:

我正在为一个事件创建一个倒计时应用程序,并且我已经设法让所有东西都启动并运行,除了标签。我不能让他们的背景透明,所以只显示文本。我有办法做到这一点吗?

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

【问题讨论】:

    标签: python user-interface tkinter label transparent


    【解决方案1】:

    我认为你不能让标签透明。

    不过你可以create text on a Canvas,这个文本默认没有背景:

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

    请注意,这还需要对文本的位置以及如何更新它进行一些更改。我试图让事情尽可能接近你的例子。请注意,没有文本背景可能无法提供您想要的可读性:

    【讨论】:

    • 我如何去除图像周围的白色边框?
    • highlightthickness=0添加到画布的创建中
    猜你喜欢
    • 2012-05-14
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多