Home > Enterprise >  Tkinter reading a file only once in loop when it needs to fo it infinitely many times
Tkinter reading a file only once in loop when it needs to fo it infinitely many times

Time:11-05

I am trying to make a script that reads constantly and updates it on a Tkinter GUI, with a simple button to refresh, but I can't seem to make it work. I have used the while True to loop to read the file but that doesn't work, it only reads once and then it probably ends with the root.mainloop() line. Any solutions for me?

Code I have written so far:

from tkinter import *

root = Tk()

root.geometry("400x400")

while True:

   with open('door1.txt', 'r') as f:
           f_contents = f.read()
           f.close

           

   def something():
       global my_label
       my_label.config(text=f_contents)
       

   my_label = Label(root, text="this is my first text")
   my_label.pack(pady=10)

   my_buttton = Button(root, text="C",command=something)
   my_buttton.pack(pady=10)



   root.mainloop() 

CodePudding user response:

Remove the while loop,
place the reading part in the something function,
remove f.close() because that is what context manager does automatically when exiting it.
Don't use * when importing modules, import what you need or import module (where module is the module name you need to import).
You don't need to use global my_label, it is already a globally accessible name and you are not changing what the name refers to.
Also you may want to put the function outside of the GUI parts so that they are kept separate and the code is more readable.

from tkinter import Tk, Label, Button


def something():
    with open('door1.txt', 'r') as f:
        f_contents = f.read()
    my_label.config(text=f_contents)


root = Tk()
root.geometry("400x400")

my_label = Label(root, text="this is my first text")
my_label.pack(pady=10)

my_buttton = Button(root, text="C", command=something)
my_buttton.pack(pady=10)

root.mainloop() 

CodePudding user response:

#try this

from tkinter import *

root = Tk()

root.geometry("400x400")

#don't change e unless you want to stop the loop
e=1
while e==1:

   with open('door1.txt', 'r') as f:
           f_contents = f.read()
           f.close

       

   def something():
       global my_label
       my_label.config(text=f_contents)
   

   my_label = Label(root, text="this is my first text")
   my_label.pack(pady=10)

  my_buttton = Button(root, text="C",command=something)
  my_buttton.pack(pady=10)

oh btw you misspelled button

  • Related