首页 > 解决方案 > Tkinter 在使用多个文件销毁窗口后继续执行

问题描述

我正在尝试使用 Tkinter 将数据从顶层窗口获取到完整的 Tk 窗口中。

我有包含 Start 类的开始菜单 Start.py。开始菜单有一个按钮,可通向另一个窗口中的地图编辑器

self.config_4 = tk.Radiobutton(self.gamemode, text="Custom", value = 4, variable = val, command = self.set_custom)

这导致

def set_custom(self):
    self.editor = Editor(self.menu)
    self.board = self.editor.getBoard()
    self.board = Board(BoardType.CLASSIC)

编辑器是另一个打开顶层窗口的文件,它包含我想在 Start.py 中接收的属性 self.board

destroy 函数停止执行的其余部分,并退出。我尝试使用 grab_set 并等待窗口,但没有 mainloop,编辑器无法正常工作。

所以基本上我唯一想要的就是将 self.board 从 Editor 到 Start,然后从 Start 到 main。这两者都是同一个破坏问题。

谢谢 !

#First.py
import tkinter as tk
from Test import Second


class First:
    def __init__(self):
        self.window = tk.Tk()
        self.test = tk.Button(self.window, command = self.popup, text="Test me").pack()
        self.stop = tk.Button(self.window, command = self.window.destroy, text="Quit").pack()

        self.window.mainloop()

    def popup(self):
        a = Second()
        self.one = a.get_one()

    def get_one(self):
        return self.one


if __name__ == '__main__':
     var = First()
     print(var.get_one())

#######################
#Test.py
import tkinter as tk

class Second:
    def __init__(self):
        self.popup = tk.Toplevel()
        myvar = tk.IntVar()
        self.one = tk.Radiobutton(self.popup, text="one", value = 1, variable = myvar, command = self.set_one)
        self.two = tk.Radiobutton(self.popup, text="two", value = 2, variable = myvar, command = self.set_two)
        self.done = tk.Button(self.popup, command = self.popup.destroy, text = "Bye")

        self.one.grid(row = 0, column = 0)
        self.two.grid(row = 0, column = 1)
        self.done.grid(row = 1, column = 0, columnspan = 2)

    def set_one(self):
        self.one = "Hi"

    def set_two(self):
        self.one = "Bye"

    def get_one(self):
        return self.one

标签: pythontkinterdestroy

解决方案


推荐阅读