You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Tkinter中实现标签5秒后自动消失?——骰子投掷程序开发求助

How to Make Your Dice Result Label Disappear After 5 Seconds in Tkinter

Hey there! Nice work on your dice roller so far—adding auto-disappearing results will make the UI feel much cleaner. The fix is actually pretty straightforward using Tkinter's built-in after() method, which lets you schedule a function to run after a set amount of time.

Here's what you need to do:

Quick Fix for Single Use

In your buttonFunction1, right after creating the result label L, add this line:

L.after(5000, L.destroy)

This tells Tkinter: "Wait 5000 milliseconds (that's 5 seconds), then call L.destroy() to remove this label from the window."

Better Fix for Multiple Button Clicks

If a user clicks the dice button multiple times before the 5 seconds are up, your current code will create multiple overlapping labels. To avoid that, we can keep a reference to the result label and destroy any existing one before creating a new one.

Here's the updated full code with this improvement:

from tkinter import *
import random

root=Tk()
root.geometry('700x500')
root.title("Dice roller")
bg = PhotoImage(file = "background.png")
Label1 = Label(root, image = bg)
Label1.place (x = 0, y=0)
l = Label(root, text="Welcome to the dice roller, select the dice you want to roll!",bg = "gold",fg = "goldenrod4", relief = "raised", font=("Arial Bold",12))
l.pack()

# Initialize a variable to track the result label
result_label = None

def buttonFunction1():
    global result_label
    # Destroy any existing result label first
    if result_label is not None:
        result_label.destroy()
    
    r1 = random.randint(1, 6)
    result_label = Label(root, text= r1, bg = "red", relief = "solid", cursor = "target", font = ("Arial Bold", 10))
    result_label.place(relx = 0.8, rely = 0.14, anchor = 'sw')
    # Schedule the label to destroy after 5 seconds
    result_label.after(5000, result_label.destroy)

b = Button(root, text="cube dice", command= buttonFunction1)
b.pack()

root.mainloop() # Don't forget this line to start the Tkinter event loop!

I added a couple of key things here:

  • A global result_label variable to keep track of the current result label
  • A check to destroy any existing label before creating a new one (so no overlaps)
  • Used result_label instead of L to make the code clearer
  • Added root.mainloop() at the end (I noticed your original code was missing this—without it, the window won't actually run!)

How It Works

  • after(delay_ms, function): This Tkinter method schedules the given function to run after delay_ms milliseconds. We use 5000 here for 5 seconds.
  • destroy(): This method removes the widget from the window and frees up its resources.

That should do the trick! Your dice result will now pop up and automatically vanish after 5 seconds, even if the user rolls multiple times.

内容的提问来源于stack exchange,提问作者printUnilateralValue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 14:27:44