2015-04-30 2 views
0

хороших вечеринок, у меня в последнее время возникают проблемы с окнами tkinter. У меня есть программа, в которой пользователи могут «покупать» вещи из магазинов, после добавления желаемых продуктов в корзину, кнопка возвращает их к «окончательному» просмотру заказа, в котором они могут удалять элементы, которые они не хотят , проблема в том, что мне нужно уничтожить это окно, отобразить информационное окно, в котором говорится, что «элемент, который вы не хотели, был удален из вашей корзины», и снова запустите «окончательный предварительный просмотр» (с новыми данными, AKA без нежелательный элемент). Проблема в том, уничтожив окно, ошибка появляется, говоря:tkinter Toplevel objext не называется

TypeError: 'Toplevel' object is not callable 

Структура моего кода что-то вроде этого:

def reviewwindow(*previous window*,cartlist): 
    previuswindow.destroy() 
    reviewwindow=Toplevel(gui) 
    reviewwindow.title("cart review") 
    reviewwindow.geometry("450x450") 
    #code about the stuff I need to do# 
    botonb= Button(reviewwindow, text = "Delete items",command=lambda:  deleteitems(reviewwindow,*previous window*,cartlist,delete), width=7) 
botonb.grid(row=8,column=1) 

def deleteitems(reviewwindow,*previous window*,cartlist,delete): 
    reviewwindow.destroy() 
    deleteitems=Toplevel(gui) 
    deleteitems.title("delete") 
    deleteitems.geometry("300x300") 

#code##code# 
boton= Button(deleteitems, text = "go back",command=lambda:reviewwindow(*previous window*,new_cartlist), width=9) 
boton.grid(row=2,column=1) 

Я не знаю, если я сделал моя проблема достаточно ясно, Мне нужно больше объяснений или что-то, что я с удовольствием предоставит больше.

+0

Что такое '* предыдущее окно *'? Имеет ли он собственное имя в вашем фактическом коде? – TigerhawkT3

+0

да, у меня есть тонна окон в коде, в этом окне есть кнопка, которая вызывает это окно, я просто импортирую имя окна ради уничтожения, когда появляется новое окно. – Twhite1195

ответ

1

Проблема заключается в том, что у вас есть функция reviewwindow, но затем вы назначаете Toplevel(gui) на номер reviewwindow. То же самое касается deleteitems. Когда вы вызываете эти функции, программа пытается вызвать объект Toplevel, и они не подлежат вызову. Выберите уникальные имена для каждого уникального значения.

+0

ohhh Я вижу, я думал, что он был единственным способом создать новое окно в другом окне. – Twhite1195

+0

Это не имеет никакого отношения к тому, как вы создаете новые окна верхнего уровня, это связано с тем, как вы их назвали. Вы определили функции с определенными именами, а затем присвоили им новые значения. После этого они будут указывать на новые объекты, а не на функции. Когда вы пытаетесь рассматривать эти объекты как функции (вызывая их), он терпит неудачу. – TigerhawkT3