简体   繁体   中英

Python tkinter, labels, and function order

This seems so simple but I can't figure out what I need to do to remedy. I have a tkinter project and on a button press, a function runs that takes several seconds. I want a "loading..." type message while the function is running so it's obvious it's actually working and not crashed. I figured a label would be easy enough and on the first line of the function, have label1.set('loading') but I suppose because of the way functions work, the label doesn't set until the function is done running--which is not helpful.

I made a second short function

def update_status(message):
   label1.set(message)

and for the button in tkinter, used command=lambda:[update_status('loading'),search()] in hopes that the update_status() function would run first, alter the label, and then the second search() function that takes upwards of 30 seconds would run. But I get the same effect.

What's the simplest way finish running the update_status() function--thereby updating my label acting as the "status", and THEN run the time consuming search() function?

I'm not opposed to something more complicated like a loading window or something similar, but just wanted something simple (I have not even googled any type of loading window--I'm mostly hung up on how to get 2 functions to run on a button click in a sequential order).

Hey I do not think you need 2 functions to do what you want. You simply have to update your root so that the label is directly updated.

Here is an example:

import tkinter as tk
import time

def update_status(message1, message2):
    var.set(message1)
    root.update()
    time.sleep(5)
    var.set(message2)


if __name__ == '__main__':
    root = tk.Tk()
    root.title("Wait for function")

    var = tk.StringVar()
    var.set('Waiting for input')

    label1 = tk.Label(root, textvariable=var)
    label1.pack()

    Button1 = tk.Button(root, text="Wait", command=lambda:update_status('loading', 'done'))
    Button1.pack()

    root.mainloop()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM