Как закрыть окно, если tk.Toplevel находится в другом файле - PullRequest
0 голосов
/ 16 ноября 2018

как закрыть текущее окно, если я не вижу tk.Toplevel (root) из метода, в котором я нахожусь?

Вот небольшой пример того, что я имею в виду:

file1.py:

import Tkinter as tk
import file2
class ExampleMain:
    def __init__(self, root):
        self.mainFrame = tk.Frame(root)
        ...
        tk.Button(self.mainFrame, command=self.button_pressed)
        ...

    def button_pressed(self):
        self.whatever = tk.Toplevel(root)
        self.app = file2.ExampleNotMain(self.whatever)

if __name__ == '__main__':
    root = tk.Tk()
    app = ExampleMain(root)
    root.mainloop()

file2.py:

import tkinter as tk
class ExampleNotMain:
    def __init__(self, root):
        self.frame = tk.Frame(root)
        ...
        tk.Button(self.frame, command=self.close_window)
        ...

    def close_window(self):
        =>  missing_command_here

В этом примере я хотел бы закрыть второе созданное окно (и сохранить первое).

Если весь код находится в одном файле, что-то вроде

self.whatever.destroy()

сделает это.Моя проблема в том, что я не вижу объект из первого файла, а команда находится во втором файле.

Я нашел что-то вроде

execfile("file2.py") 

, но мне не нравится это решение.

Есть ли лучший способ решить мою проблему?

Я бы очень хотел помочь вам.Заранее спасибо.

1 Ответ

0 голосов
/ 16 ноября 2018

Когда вы создаете ExampleNotMain, вы передаете 2-й уровень Toplevel. В ExampleNotMain.__init__ он связывается с root. (master или parent будет лучшим именем параметра). В __init__ добавьте self.top = root (or whatever you call the passed-in toplevel). In close_window , add self.top.destroy () `.

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