Tkinter - Tk 和 TOPLEVEL Window-Mainloops 冲突

问题描述

我又遇到了一个问题,我不知道为什么......所有需要的代码都总结在这个屏幕截图中: Code

“pixela_brain.py”中两个打印语句所在的部分是问题区域:

  • print("Before opening UIcreateuser") 按预期显示
  • “create_user.py”中的打印(“x 被点击”)也按预期显示
  • 但是在“create_user.py”中的“self.destroy()”之后,print("After Closing UIcreateuser") 应该也打印出来,但它没有。
  • 只有在关闭 Main Tk 窗口后,第二个打印语句才会执行。

这是为什么?我希望在从 UIcreateuser Toplevel-Window 杀死主循环后,方法“create_user(self)”应该执行到最后。

这是用于复制/粘贴目的的代码

main.py

from ui_root import UiRoot
app = UiRoot()

pixela_brain.py

from popup_windows.create_user import Uicreateuser

class PixelaBrain:
    def __init__(self):
        pass

    def create_user(self):
        print("Before opening UIcreateuser")
        self.new_user = Uicreateuser()
        print("After Closing UIcreateuser")

ui_root.py

from tkinter import Tk,Button
from pixela_brain import PixelaBrain


class UiRoot(Tk):

    def __init__(self):
        super().__init__()
        self.brain = PixelaBrain()

        self.button = Button(self,text="Button",command=self.click)
        self.button.pack()

        self.mainloop()

    def click(self):
        self.brain.create_user()

create_user.py

from tkinter import Toplevel


class Uicreateuser(Toplevel):
    def __init__(self):
        super().__init__()
        self.protocol("WM_DELETE_WINDOW",self.click_x)
        self.grab_set()
        self.mainloop()

    def click_x(self):
        print("x is clicked")
        self.destroy()

非常感谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)