Python: Is it possible to create an tkinter label which has a dynamic string when a function is running in background?

后端 未结 2 653
面向向阳花
面向向阳花 2020-12-18 11:17

I have created a tkinter GUI for my python script. When I run the script, I want a dynamic string in one of the Label widgets on the GUI window, which will display:

2条回答
  •  执念已碎
    2020-12-18 11:22

    I wrote two simple scripts to help demonstrate how to do what you want. The first is using the label:

    import tkinter as tk
    
    root = tk.Tk()
    
    status = tk.Label(root, text="Working")
    status.grid()
    
    def update_status():
    
        # Get the current message
        current_status = status["text"]
    
        # If the message is "Working...", start over with "Working"
        if current_status.endswith("..."): current_status = "Working"
    
        # If not, then just add a "." on the end
        else: current_status += "."
    
        # Update the message
        status["text"] = current_status
    
        # After 1 second, update the status
        root.after(1000, update_status)
    
    # Launch the status message after 1 millisecond (when the window is loaded)
    root.after(1, update_status)
    
    root.mainloop()
    

    The next one is using a progressbar:

    import tkinter as tk
    
    # You will need the ttk module for this
    from tkinter import ttk
    
    def update_status(step):
    
        # Step here is how much to increment the progressbar by.
        # It is in relation to the progressbar's length.
        # Since I made the length 100 and I am increasing by 10 each time,
        # there will be 10 times it increases before it restarts
        progress.step(step)
    
        # You can call 'update_status' whenever you want in your script
        # to increase the progressbar by whatever amount you want.
        root.after(1000, lambda: update_status(10))
    
    root = tk.Tk()
    
    progress = ttk.Progressbar(root, length=100)
    progress.pack()
    
    progress.after(1, lambda: update_status(10))
    
    root.mainloop()
    

    Note however that I couldn't do too much with the progressbar script because progressbars are a little tricky and need to be customized to your script exactly. I just wrote it to maybe shed a little light on the subject. The main part of my answer though is the label script.

提交回复
热议问题