How do I create an automatically updating GUI using Tkinter?

后端 未结 5 1751
梦如初夏
梦如初夏 2020-11-30 10:40
from Tkinter import *
import time
#Tkinter stuff

class App(object):
    def __init__(self):
        self.root = Tk()

        self.labeltitle = Label(root, text=\"\         


        
相关标签:
5条回答
  • 2020-11-30 11:12

    I wrote an example with Python 3.7

    from tkinter import *
    
    def firstFrame(window):
        global first_frame
        first_frame = Frame(window)
        first_frame.place(in_=window, anchor="c", relx=.5, rely=.5)
        Label(first_frame, text="ATTENTION !").grid(row=1,column=1,columnspan=3)
    
    
    def secondFrame(window):
        global second_frame
        second_frame= Frame(window, highlightbackground=color_green, highlightcolor=color_green, highlightthickness=3)
        second_frame.place(in_=window, anchor="c", relx=.5, rely=.5)
        Label(second_frame, text="This is second frame.").grid(row=1, column=1, columnspan=3, padx=25, pady=(15, 0))
    
    
    window = Tk()
    window.title('Some Title')
    window.attributes("-fullscreen", False)
    window.resizable(width=True, height=True)
    window.geometry('300x200')
    
    
    firstFrame(window)
    secondFrame(window)
    first_frame.tkraise()
    window.after(5000, lambda: first_frame.destroy()) # you can try different things here
    window.mainloop()
    
    0 讨论(0)
  • 2020-11-30 11:23

    If you are using labels, then you can use this:

    label = tk.Label(self.frame, bg="green", text="something")
    label.place(rely=0, relx=0.05, relwidth=0.9, relheight=0.15)
    
    refresh = tk.Button(frame, bg="white", text="Refreshbutton",command=change_text) 
    refresh.pack(rely=0, relx=0.05, relwidth=0.9, relheight=0.15)
    
    def change_text()
       label["text"] = "something else"
    

    Works fine for me, but it is dependent on the need of a button press.

    0 讨论(0)
  • 2020-11-30 11:24

    You can use after() to run function after (for example) 1000 miliseconds (1 second) to do something and update text on labels. This function can run itself after 1000 miliseconds again (and again).

    It is example with current time

    from Tkinter import *
    import datetime
    
    root = Tk()
    
    lab = Label(root)
    lab.pack()
    
    def clock():
        time = datetime.datetime.now().strftime("Time: %H:%M:%S")
        lab.config(text=time)
        #lab['text'] = time
        root.after(1000, clock) # run itself again after 1000 ms
    
    # run first time
    clock()
    
    root.mainloop()
    

    BTW: you could use StringVar as sundar nataraj Сундар suggested

    0 讨论(0)
  • 2020-11-30 11:24

    I added a process bar in my window, and change its value according to randint for every 1 second using the update function:

    from random import randint
    def update():
        mpb["value"] = randint(0, 100) # take process bar for example
        window.after(1000, update)
    update()
    window.mainloop()
    
    0 讨论(0)
  • 2020-11-30 11:33

    if you want to change label dynamically

    self.dynamiclabel=StringVar()
    self.labeltitle = Label(root, text=self.dynamiclabel,  fg="black", font="Helvetica 40 underline bold")
    self.dyanamiclabel.set("this label updates upon change")
    self.labeltitle.pack()
    

    when ever you get new value then just use .set()

    self.dyanamiclabel.set("Hurrray! i got changed")
    

    this apply to all the labels.To know more read this docs

    0 讨论(0)
提交回复
热议问题