tkinter.TclError: bad window path name - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: GUI (https://python-forum.io/forum-10.html) +--- Thread: tkinter.TclError: bad window path name (/thread-26268.html) |
tkinter.TclError: bad window path name - kenwatts275 - Apr-25-2020 Hi all, I am getting the error _tkinter.TclError: bad window path name ".!toplevel.!frame.!combobox When I click on the "Columns" button the first time, it opens up a new window no problem. When I click on the "Exit" button to close out the window and click on the "Columns" button again, I get the bad window error. It is failing on line 19: column_values[i][j].grid(row=i,column= j) Below is the code. Any help would be appreciated. Thanks in advance. from tkinter import * from tkinter import ttk import tkinter.font as font def get_columns(field_names): new_window = Toplevel(mw) new_window.wm_title("Select Columns") new_window.geometry('900x500+250+150') frame3 = Frame(new_window) framebot = Frame(new_window) frame3.pack(side=TOP,fill=X) framebot.pack(side=BOTTOM,fill=X) for i in range(0,max_columns): column_values.append([]) j = 0 column_values[i].append(ttk.Combobox(frame3,values=field_names)) column_values[i][j].grid(row=i,column= j) exit_button = Button(framebot,text='Exit',font=("Times",16),command=new_window.destroy).pack(side="right") # Start the main program here if __name__ == "__main__": current_file = __file__ mw=Tk() mw.geometry('900x500+200+150') mw.title(current_file) frame1 = Frame(mw) framebot = Frame(mw) frame1.pack(side=TOP,fill=X) framebot.pack(side=BOTTOM,fill=X) w1 = Label(frame1, text="Database Name: ",font=("Times",16)).pack(side="left") dbase = StringVar() a1 = ttk.Combobox(frame1,width=40,font=("Times",16),textvar=dbase) a1.pack(side="left") field_names = ["A.a","B.b","C.c"] max_columns = 10 column_values = [] btn2 = Button(framebot,text='Columns',font=("Times",16),command=lambda: get_columns(field_names)).pack(side="left") btn6 = Button(framebot,text='Exit',font=("Times",16),command=mw.quit).pack(side="right") mw.mainloop() RE: tkinter.TclError: bad window path name - Larz60+ - Apr-25-2020 Please post complete unaltered error traceback. It contains information that is very useful in determining cause of error. RE: tkinter.TclError: bad window path name - deanhystad - Apr-25-2020 The problem is caused by you making a new window each time the Columns button is pressed. Though wasteful and potentially confusing, this would work if you also reset the column_values array. I added some comments below to point out the problem spots. def get_columns(field_names): new_window = Toplevel(mw) new_window.wm_title("Select Columns") new_window.geometry('900x500+250+150') frame3 = Frame(new_window) framebot = Frame(new_window) frame3.pack(side=TOP,fill=X) framebot.pack(side=BOTTOM,fill=X) for i in range(0,max_columns): column_values.append([]) # 2nd time around column_values is not empty j = 0 # 2nd time around column_values[0] holds two combo boxes, one which doesn't exist # anymore because you deleted it. column_values[i].append(ttk.Combobox(frame3,values=field_names)) # column_values[0][0] is the deleted combo box column_values[i][j].grid(row=i,column= j) exit_button = Button(framebot,text='Exit',font=("Times",16),command=new_window.destroy).pack(side="right") RE: tkinter.TclError: bad window path name - kenwatts275 - Apr-26-2020 Thanks for your responses. I added "column_values.clear()" before the for loop and that seems to have fixed the problem. Thanks. |