how do i make tkinter update

Question:

I have an entry field that stores my list to a text file
when i press the button to store the info, it gets stored but i have to restart the app to see it on the options menu
How do i make the app update without having to restart it?
`

from tkinter import *
from tkinter import messagebox

root = Tk()
root.title("test tool") #App Title
root.iconbitmap("D:\Software\GigaPixel Frames\Dump\New folder\imgs\Logo.ico")
root.geometry("1600x800") #App Dimensions

DropDownvar = StringVar(value="Select an option")
DropDownvar.set("Select an option")

my_list = open("Characters.txt").readlines()
DropDownMenu = OptionMenu(root, DropDownvar, *my_list)
DropDownMenu.pack()

inputBox = Entry(root)
inputBox.pack()

def ButtonFun():
  InputBoxEntry = inputBox.get()
  with open("Characters.txt", "a") as text_file:
      text_file.write(InputBoxEntry + "n")
  root.update()
inputBoxButton = Button(root, text="Input", command=ButtonFun)
inputBoxButton.pack()







root.mainloop()

`

could not find answer

Asked By: BragonGod

||

Answers:

You should re-read and update your list after you put input and added line. You should avoid using my_list = open("Characters.txt") as you may forget to close it. Or sometimes it gives an error and stay unclosed which you cannot perform anything over it.

from tkinter import *
from tkinter import messagebox

root = Tk()
root.title("test tool") #App Title
root.geometry("1600x800") #App Dimensions

DropDownvar = StringVar(value="Select an option")
DropDownvar.set("Select an option")


DropDownMenu = OptionMenu(root, DropDownvar," ")
DropDownMenu.pack()

inputBox = Entry(root)
inputBox.pack()

def fillOptionMenu():
    with open("characters.txt","r") as f:
        my_list = f.readlines()

    DropDownMenu["menu"].delete(0,"end")
    # DropDownMenu.set_menu(my_list)
    for i in my_list:
        DropDownMenu["menu"].add_command(label=i, command=lambda value=i: DropDownvar.set(i))

def ButtonFun():
    InputBoxEntry = inputBox.get()
    with open("Characters.txt", "a") as text_file:
        text_file.write(InputBoxEntry + "n")
    root.update()

    fillOptionMenu()


inputBoxButton = Button(root, text="Input", command=ButtonFun)
inputBoxButton.pack()

fillOptionMenu()

root.mainloop()

You need to add the input item to the dropdown manually inside ButtonFun().

Also using .readlines() will not strip out the trailing newline 'n' from each line in the file, better use .read().splitlines() instead:

...
with open("Characters.txt") as f:
    my_list = f.read().splitlines()
DropDownMenu = OptionMenu(root, DropDownvar, *my_list)
DropDownMenu.pack()
...
def ButtonFun():
  InputBoxEntry = inputBox.get()
  with open("Characters.txt", "a") as text_file:
      text_file.write(InputBoxEntry + "n")
  # add the input item to dropdown
  DropDownMenu["menu"].add_command(label=InputBoxEntry, command=lambda: DropDownvar.set(InputBoxEntry))
...
Answered By: acw1668
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.