когда вы открываете новый фрейм, а затем возвращаетесь на домашнюю страницу, домашняя страница портится

#python #tkinter

Вопрос:

когда я в знак, что все в порядке и он берет меня на главную страницу, когда я нажимаю на меню Вид, а затем щелкните кнопки «Назад» возвращает меня на домашнюю страницу, все нормально и так, как я хочу , однако, когда я нажимаю на меню, а затем нажмите кнопку назад, чтобы вернуться к домашней странице моей домашней странице плошал и я вижу частях «функция:» функция, как я могу это исправить?
Извините, если код немного длинноват, я уже вырезал большую часть ненужного кода (или пытался это сделать). Спасибо вам за вашу помощь

из импорта tkinter* из PIL импортируйте изображение, ImageTk импортируйте tkinter как tk

 root = Tk()
root.geometry('670x466')

accounts = []
food = ['Pizza','Burger','Nachos', 'French Toast']
foodprice=['20','9.50','7.50', '17']
drinks = ['Pepsi','Lemonade','Tea', 'Aperitivo Spritz']
drinksprice = ['3','4','3', '15.50']

class Goode_brothers:


def __init__(self, parent):

    self.myFrame = Frame(parent)
    self.myFrame.pack()


    self.load = Image.open('new-dip-project\food.jpg')
    self.render = ImageTk.PhotoImage(self.load)
    self.img = Label(parent, image = self.render)
    self.img.place(x = -26, y =0)

    self.img_login = PhotoImage(file = 'new-dip-project\button (3).png')
    self.b1 = Button(parent,image = self.img_login, command = self.read_info, bd = 0, bg = '#3b353b', activebackground = '#3b353b')
    self.b1.place(x = 275, y = 340)



    self.img_register = PhotoImage(file = 'new-dip-project\register.png')
    self.b2 = Button(parent,image = self.img_register, command = self.openNewWindow, bd = 0, bg = '#3b353b', activebackground = '#3b353b')
    self.b2.place(x = 265, y = 400)

    self.canvas = Canvas(parent, width = 400, height = 120)
    self.canvas.pack()
    self.img4 = ImageTk.PhotoImage(Image.open('new-dip-project\goode.png'))
    self.canvas.create_image(20, 20, anchor=NW, image=self.img4)



    self.email = Entry(parent)
    self.email.place(x = 340, y = 180)

    self.password = Entry(parent)
    self.password.place(x = 354, y = 250)

    self.img_label = PhotoImage(file = 'new-dip-project\label-image.png')
    self.name = Label(parent, image = self.img_label, text = "Email:", bg = '#3c3a3b').place(x = 197,y = 178)

    self.img_label_pass = PhotoImage(file = 'new-dip-project\label_pass.png')
    self.name = Label(parent, image = self.img_label_pass, text = "Password:", bg = '#3c3a3b').place(x = 177,y = 245)




def openMenu(self):

    for wid in root.winfo_children():
        wid.destroy()
    self.myFrame.destroy()

    self.myFrame2 = Frame(root, bg = '')
    self.myFrame2.pack(fill = "both", expand = 1)


    self.img77 = PhotoImage(file = 'new-dip-project\goode.png')
    self.name77 = Label(self.myFrame2, image = self.img77).pack()

    self.img_menu = PhotoImage(file = 'new-dip-project\menu_button.png')
    self.b6 = Button(self.myFrame2,image = self.img_menu, command = self.view_menu, bd  = 0)
    self.b6.place(x = 246, y = 140)

    self.img_order = PhotoImage(file = 'new-dip-project\order_button.png')
    self.b7 = Button(self.myFrame2,image = self.img_order, command = self.order_menu, bd  = 0)
    self.b7.place(x = 239, y = 228)

    self.img_checkout = PhotoImage(file = 'new-dip-project\checkout.png')
    self.b8 = Button(self.myFrame2,image = self.img_checkout, bd  = 0)
    self.b8.place(x = 250, y = 316)



def view_menu(self):

    self.myFrame2.destroy()
    self.myFrame3 = LabelFrame(root, height = 700)
    self.myFrame3.pack()

    self.myFrame3.columnconfigure(0, weight=1)
    self.myFrame3.columnconfigure(1, weight=2)

    self.food_title = Label(self.myFrame3, font=("Impact", "23"), text = 'Food').grid(row = 0, column = 4)
    self.food_space = Label(self.myFrame3, text = '').grid(row = 1, column = 4)
    self.drinks_title = Label(self.myFrame3, font=("Impact", "23"), text = 'Drinks').grid(row = 8, column = 4)

    self.price = Label(self.myFrame3, font=("Impact", "23"), text = 'Price($)').grid(row = 0, column = 8)


    for x in range (len(food)):
        self.foodop = Label(self.myFrame3, font=("Impact", "15"), text = food[x]).grid(row = 3 x, column = 4) #A created label defining where it is positioned
        self.fprice = Label(self.myFrame3, font=("Impact", "15"), text = foodprice[x]).grid(row = 3 x, column = 8)

    for x in range (len(drinks)):
        self.drinksop = Label(self.myFrame3, font=("Impact", "15"), text = drinks[x]).grid(row = 5 (len(food)) x, column = 4)
        self.drinksp = Label(self.myFrame3, font=("Impact", "15"), text = drinksprice[x]).grid(row = 5 (len(food)) x, column = 8)


    self.img_back = PhotoImage(file = 'new-dip-project\back_button.png')
    self.b10 = Button(self.myFrame3,image = self.img_back, command = self.openMenu, bd  = 0)
    self.b10.grid(row = 38, column = 7)



def order_menu(self):
    for wid2 in root.winfo_children():
        wid2.destroy()
    self.myFrame2.destroy()
    self.myFrame4 = Frame(root)
    self.myFrame4.pack(fill = "both", expand = 1)

    self.tkvar = StringVar(self.myFrame4)
    self.tkvar.set("Food")

    self.tkvar2 = StringVar(self.myFrame4)
    self.tkvar2.set("Drinks")

    self.img_odmenu = PhotoImage(file = 'new-dip-project\od_menu.png')
    self.order_menu_message = Label(self.myFrame4, image = self.img_odmenu).place(x = 220)

    self.foodMenu = OptionMenu(self.myFrame4, self.tkvar, *food)
    self.foodMenu.place(x = 160, y = 110)

    self.Foodlabel = Label(self.myFrame4, text="Choose Your Food", font=("Courier New","12"))
    self.Foodlabel.place(x = 145, y = 83)

    self.drinklabel = Label(self.myFrame4, text="Choose Your Drink", font=("Courier New","12"))
    self.drinklabel.place(x = 370, y = 83)

    self.drinkMenu = OptionMenu(self.myFrame4, self.tkvar2, *drinks)
    self.drinkMenu.place(x = 385, y = 110)

    self.pricelabel = Label(self.myFrame4, text = "Total price", font=("Courier New","12"))
    self.pricelabel.place(x = 289, y = 208)

    self.order_btn78 = PhotoImage(file = 'new-dip-project\orderb.png')
    self.order_btn = Button(self.myFrame4, image = self.order_btn78, bd = 0)
    self.order_btn.place(x = 302, y = 160)

    self.check_btn = PhotoImage(file = 'new-dip-project\checkpay.png')
    self.checkout_btn = Button(self.myFrame4, image = self.check_btn, bd = 0)
    self.checkout_btn.place(x = 267, y = 410)

    self.img_odmenu = PhotoImage(file = 'new-dip-project\od_menu.png')
    self.order_menu_message = Label(self.myFrame4, image = self.img_odmenu).place(x = 220)

    self.foodMenu = OptionMenu(self.myFrame4, self.tkvar, *food)
    self.foodMenu.place(x = 160, y = 110)

    self.Foodlabel = Label(self.myFrame4, text="Choose Your Food", font=("Courier New","12"))
    self.Foodlabel.place(x = 145, y = 83)

    self.drinklabel = Label(self.myFrame4, text="Choose Your Drink", font=("Courier New","12"))
    self.drinklabel.place(x = 370, y = 83)

    self.drinkMenu = OptionMenu(self.myFrame4, self.tkvar2, *drinks)
    self.drinkMenu.place(x = 385, y = 110)

    self.pricelabel = Label(self.myFrame4, text = "Total price", font=("Courier New","12"))
    self.pricelabel.place(x = 289, y = 208)

    self.order_btn78 = PhotoImage(file = 'new-dip-project\orderb.png')
    self.order_btn = Button(self.myFrame4, image = self.order_btn78, bd = 0)
    self.order_btn.place(x = 302, y = 160)

    self.check_btn = PhotoImage(file = 'new-dip-project\checkpay.png')
    self.checkout_btn = Button(self.myFrame4, image = self.check_btn, bd = 0)
    self.checkout_btn.place(x = 267, y = 410)

    self.back_menu = PhotoImage(file = 'new-dip-project\bbutton.png')
    self.back_button2 = Button(self.myFrame4, image = self.back_menu, command = self.openMenu, bd  = 0)
    self.back_button2.place(x = 30, y = 410)




if __name__ == "__main__":
    e = Goode_brothers(root)
    root.title('Goode brothers')
    root.mainloop()
 

Комментарии:

1. Я предлагаю следующее: если вы хотите вернуться на главную страницу, то вам не следует уничтожать рамку или виджеты, вместо этого вы должны скрыть рамку с помощью place_forget() или pack_forget() или grid_forget() , если вы использовали .place , .pack или .grid соответственно

2. Вы не предоставили back_menu

3. я хочу, чтобы функция «def openMenu(self):» запускалась при нажатии этой кнопки «self.back_button2 = Кнопка(self.myFrame4, изображение = self.back_menu, команда = self.openMenu, bd = 0)» разве я этого еще не сделал? это работает и возвращает меня на домашнюю страницу, но внешний вид домашней страницы выглядит как 3-я фотография, которую я отправил в своем посте, я хочу, чтобы она выглядела как 1-я фотография.

4. Я не понимаю, зачем ты разрушаешь рамку. Вы должны использовать pack_forget() вместо for widget in root.winfo_children() и widget.destroy() , а затем frame.destroy()

5. Удалить bg = '' из self.self.myFrame2 = Frame(root, bg = '') .

Ответ №1:

Вы должны указать отступы в методах класса Goode Brothers