`mainloop` muß man auch aufrufen.
Statt time.localtime benutzt man datetime.datetime.now.
Alles was eine Funktion braucht, muß sie über ihre Argumente bekommen.
Langlaufende Funktionen darf es bei GUIs nicht geben, weshalb man Funktionen zeitgesteuert immer wieder aufrufen muß.
Code: Alles auswählen
import tkinter.scrolledtext
import datetime
from functools import partial
def xshow(text_field):
now = datetime.datetime.now()
text = f"Uhrzeit: {now:%H:%M:%S}\n"
text_field.insert("end", text)
text_field.after(30000, xshow, text_field)
def main():
root = tkinter.Tk()
text_field = tkinter.scrolledtext.ScrolledText(root, width=40, height=10)
text_field.pack()
button_show=tkinter.Button(root, text="Starten", command=partial(xshow, text_field))
button_show.pack()
root.mainloop()
if __name__ == '__main__':
main()
Wenn man dann noch einen Code hat, der tatsächlich rechenintensiv ist, braucht man einen eigenen Thread, in dem die Rechnung läuft und Statusmeldungen per Queue an die GUI übergibt.
Diese Frage kommt alle zwei Wochen hier im Forum. Einfach ein bißchen suchen.