Открытие и закрытие GUI с использованием концепции классов - PullRequest
0 голосов
/ 11 марта 2019

У меня в основном есть два сценария Python Test_A и Test_B.Оба эти интерфейса основаны на tkinter.Я пытаюсь открыть один графический интерфейс с помощью другого.У меня есть кнопка в каждом из GUI, который открывает другой, и функция, которая соответствует кнопке, разрушает текущий GUI.К сожалению, я не могу уничтожить объект TK (), созданный с использованием одного класса в другом.Есть ли способ обойти эту проблему?Например, когда я запускаю Test_A.py и нажимаю « кнопка открытия GUI 2 », открывается второй графический интерфейс, теперь, когда я нажимаю кнопку « Open GUI 1» "первый не открывается и говорит, что NameError: имя« window2 »не определено.

Мои два сценария следующие:

from tkinter import *
from Test_B import *


class Test_A_class(Frame):

    def F1(self):
        Window1.destroy()
        Window2 = Tk()
        Tool = Test_B_class(Window2)
        Window2.mainloop()

    def widgets(self):
        self.Button = Button(self, command=self.F1, text="Open GUI 2", width=15)
        self.Button.pack()        

    def __init__(self, initial):
        super().__init__()
        self.pack()
        self.widgets()

if __name__ == "__main__":

    Window1 = Tk()
    Tool = Test_A_class(Window1)
    Window1.mainloop()

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

from tkinter import *
from Test_A import *


class Test_B_class(Frame):

    def F2(self):
        Window2.destroy()
        Window1 = Tk()
        Tool = Test_A_class(Window1)
        Window1.mainloop()

    def widgets(self):
        self.Button = Button(self, command=self.F2, text="Open GUI 1", width=15)
        self.Button.pack()        

    def __init__(self, initial):
        super().__init__()
        self.pack()
        self.widgets()

if __name__ == "__main__":    
    Window2 = Tk()
    Tool = Test_B_class(Window2)
    Window2.mainloop()

Ошибка следующая:

Window2.destroy()
NameError: name 'Window2' is not defined

1 Ответ

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

Подумав, я нашел решение.Теперь я объявил переменные Tk () внутри метода «____init____» соответствующих классов.Это позволяет мне не давать аргумент классу всякий раз, когда он выполняется.Затем я использовал функцию импорта после уничтожения текущего графического интерфейса для вызова другого класса.Всякий раз, когда вызывается новый класс, его функция ____init____ автоматически объявляет Tk ().Ранее Windows объявлялась за пределами класса, и, следовательно, они не имели области видимости в классе.Надеюсь, что это помогает некоторым людям.Я разместил обновленный код здесь.Дайте мне знать, если мы сможем улучшить это.

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