Jul-29-2020, 04:35 PM
I got it right! Sort of.
Here's a shorter example that demonstrates the problem:
You need to rewrite you code so it only creates one entry widget for each frame.
Here's a shorter example that demonstrates the problem:
import tkinter as tk class Win1: def __init__(self, master): self.master = master self.master.title("Gap Assessment") self.topFrame = tk.Frame(self.master) self.topFrame.grid(row=0, column=0, sticky='news', ipady = 5) self.A_GapFrame = tk.Frame(self.master) # Create a Tkinter variable self.gapType = tk.StringVar(self.master) # Dictionary with options self.choiceGap = ['AFrame'] # self.choiceGap = sorted(self.choiceGap) self.gapType.set('') # set the default option self.ctngMenu = tk.OptionMenu(self.topFrame, self.gapType, *self.choiceGap, command=self.chioseGap_handle) self.ctngMenu.grid(row = 1, column =2) def chioseGap_handle(self, selected): self.A_GapFrame.tkraise() self.subframe_AGap() self.A_GapFrame.grid(row=2, column=0, sticky='news') def subframe_AGap(self): self.jobNameA_text = tk.StringVar() self.jobNameA_entry = tk.Entry(self.A_GapFrame, textvariable = self.jobNameA_text) self.jobNameA_entry.grid(row=1, column=0, sticky='news') print('A', self.jobNameA_entry) root = tk.Tk() root.geometry("+50+50") app = Win1(root) root.mainloop()When I run this and make selections from the combo box I see this in the console:
Output:A .!frame2.!entry
A .!frame2.!entry2
A .!frame2.!entry3
A .!frame2.!entry4
Each time I select a frame it creates a new Entry widget. Even if this didn't cause the old Entry widget to be deleted it would still cause previously entered text to disappear behind the new Entry widget that is drawn over the top.You need to rewrite you code so it only creates one entry widget for each frame.