Как создать кнопку возврата назад во втором окне с помощью tkinter? - PullRequest
1 голос
/ 23 марта 2019

Я делаю небольшой "Supplementshop" с python 3.7.2 и tkinter.Я хочу использовать кнопку «вернуться в главное окно».Поскольку я создаю новые окна с помощью кнопок и функций, я думаю, что не могу использовать метод .destroy ... После одного полного дня тестирования некоторых кодов мне все еще не удалось получить эту кнопку.Полагаю, сейчас мне нужна помощь.: D

Поскольку в коде уже около 600 строк, я просто сделал из него короткую версию.Надеюсь, этого достаточно.Код:

from tkinter import *
import sys, os


class MainWindow():

    def __init__(self, master, title, size):
        self.master = master
        self.title = title
        self.size = size
        self.master.title(self.title)
        self.master.geometry(self.size)

        self.hitext = Label(self.master,
                            text="some random text,\n to change the previous text lol").pack(fill=X, pady=10)

        self.productButton = Button(self.master,
                                 text="second window",
                                    width=15,
                                    command=self.productButtonClicked).place(x=15, y=55)

        self.quitMainWindow = Button(self.master,
                                     text="exit",
                                     width=15,
                                     command=mainWindow.quit).place(x=170, y=55)

    def productButtonClicked(self):
        productWindow = Toplevel()
        productFenster = ProductMenuWindow(productWindow, "second window", "260x100")


class ProductMenuWindow():

    def __init__(self, master, title, size):
        self.master = master
        self.title = title
        self.size = size
        self.master.geometry(self.size)
        self.master.title(self.title)

        self.text = Label(self.master, text="what do you want to buy?").pack(fill=X, pady=10)

        self.gobackButton = Button(self.master,
                                   text="go back to main window",
                                   width=20,
                                   command="").place(x=55, y=50) #here should be the command for the button


if __name__ == "__main__":
    mainWindow = Tk()
    mainFenster = MainWindow(mainWindow, "root/main/first window", "300x95")
    mainWindow.mainloop()

Если я поставлю command=mainWindow.quit, главное окно, конечно, будет уничтожено, и программа остановится.Так вот в чем суть, я не буду дальше, потому что .destroy здесь не работает ... Также извините за некоторые английские ошибки: P

1 Ответ

0 голосов
/ 23 марта 2019

Я внес некоторые изменения.

Сравните мою версию с вашей.

from tkinter import *
import sys, os

class MainWindow():

    def __init__(self, master, title, size):
        self.master = master
        self.title = title
        self.size = size
        self.master.title(self.title)
        self.master.geometry(self.size)

        self.hitext = Label(self.master,
                        text="some random text,\n to change the previous text lol").pack(fill=X, pady=10)

        self.productButton = Button(self.master,
                             text="second window",
                                width=15,
                                command=self.productButtonClicked).place(x=15, y=55)

        self.quitMainWindow = Button(self.master,
                                 text="exit",
                                 width=15,
                                 command=self.on_cancel).place(x=170, y=55)

    def productButtonClicked(self):
        #productWindow = Toplevel()
        obj = ProductMenuWindow(self, "second window", "260x100")
        #productFenster = ProductMenuWindow(productWindow,)

    def on_cancel(self):
        self.master.destroy()        


class ProductMenuWindow(Toplevel):

    def __init__(self, parent, title, size):
        super().__init__(name='product_main_menu')

        self.parent = parent

        self.title(title)

        self.size = size

        self.geometry(size)

        self.text = Label(self, text="what do you want to buy?").pack(fill=X, pady=10)

        self.gobackButton = Button(self,
                               text="go back to main window",
                               width=20,
                               command=self.on_cancel).place(x=55, y=50) #here should be the command for the button

    def on_cancel(self):
        self.destroy()

 if __name__ == "__main__":
    mainWindow = Tk()
    mainFenster = MainWindow(mainWindow, "root/main/first window", "300x95")
    mainWindow.mainloop()

приписка

super().__init__(name='product_main_menu')

Раньше на вашем ProductMenuWindow.

был синглтон.

Если вы напишите super().__init__(), вы увидите, что можете открыть более одного окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...