使用withdraw() 后无法再次显示Tkinter 根窗口

Zaxter5

在我的程序中,我从我的根 tkinter 窗口创建一个窗口,并使用 .withdraw() 函数隐藏根。当我尝试通过调用根类再次显示根窗口时,它没有显示并且我的程序退出。这是我描述问题的代码的粗略概述:

 class MainGUI:
    def __init__(self, master):
        self.master = master
        #....Create and .grid() all GUI Widgets....

        # Button for switching to other window
        button = Button(text="CLICKME", command=lambda: self.other_window())

        # Call and define show function at the end of __init__
        self.show()
        def show(self):
            self.master.update()
            self.master.deiconify()

        # Create other window and withdraw self on button click
        def other_window(self):
            OtherGUI(self.master)
            self.master.withdraw()


class OtherGUI:
    def __init__(self, master):
        # Function for returning to main window, calls MainGUI class
        # to create window and withdraws self.
        def main_window():
            MainGUI(self.master)
            self.master.withdraw()

        master = self.master = Toplevel(master)
        #....Create and .grid() all GUI Widgets....

        # Button for switching back to main window
        button = Button(text="CLICKME", command=lambda: self.main_window())

使用 MainGUI 中的打印功能,我能够看到,当尝试切换回主窗口时,实际上调用了 show(),并且似乎确实进入了整个类。

这让我感到困惑,因为我只是从其他论坛帖子中真​​正学会了如何做到这一点,并且使用 root.update() 和 .deiconify() 似乎是大多数人的解决方案,但是我不知道为什么这不是在职的。

有没有人知道我在这里哪里出错了?

迈克 - SMT

由于多种原因,您提供的示例将不起作用。

#really you should build your gui as an inherited class as it makes things much easier to manage in tkinter.
class MainGUI:
    def __init__(self, master):
        self.master = master


        button = Button(text="CLICKME", command=lambda: self.other_window())
        # no need for lambda expressions here.
        # missing geometry layout... grid(), pack() or place()

        self.show()
        # self.show does nothing here because your show method is improperly indented.
        # your other_window method is also not properly indented.

        def show(self):
            self.master.update()
            self.master.deiconify()

        def other_window(self):
            OtherGUI(self.master)
            self.master.withdraw()


class OtherGUI:
    def __init__(self, master):
        # this function should be its own method.
        def main_window():
            MainGUI(self.master)
            self.master.withdraw()

        master = self.master = Toplevel(master)
        # this is not how you should be defining master.

        button = Button(text="CLICKME", command=lambda: self.main_window())
        # missing geometry layout... grid(), pack() or place()
        # your button command is using a lambda to call a class method but your define it as a function instead.

这是您尝试的更简单的版本:

import tkinter as tk


class MainGUI(tk.Tk):
    def __init__(self):
        super().__init__()
        tk.Button(self, text="Open Toplevel", command=self.open_toplevel_window).pack()

    def open_toplevel_window(self):
        OtherGUI(self)
        self.withdraw()


class OtherGUI(tk.Toplevel):
    def __init__(self, master):
        super().__init__()
        tk.Button(self, text="Close top and deiconify main", command=self.main_window).pack()

    def main_window(self):
        self.master.deiconify()
        self.destroy()


MainGUI().mainloop()

正如您在此处看到的,当您从控制主窗口和顶级窗口的 tkinter 类继承时,管理它们变得更容易,并且执行任务的代码更少。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用withdraw vs wm_withdraw隐藏tkinter窗口

来自分类Dev

无法删除 tkinter 根窗口

来自分类Dev

使用ImageMagick在根窗口上显示多个图像

来自分类Dev

Tkinter根窗口不出现

来自分类Dev

显示模式窗口时隐藏Tkinter根窗口

来自分类Dev

使用pyinstaller创建可执行文件后,Tkinter标签将无法显示在窗口中

来自分类Dev

如何使用XCB在根窗口上绘制?

来自分类Dev

如何使用XCB在根窗口上绘制?

来自分类Dev

使用tkinter无法关闭窗口

来自分类Dev

使用tkinter无法关闭窗口

来自分类Dev

如何找到tkinter根窗口进行销毁?

来自分类Dev

如何使用Python的Xlib将文本写入根窗口?

来自分类Dev

无法获取根窗口调整大小事件

来自分类Dev

Tkinter .withdraw()奇怪的行为

来自分类Dev

Tkinter-使用wm_state('normal')函数还原窗口后无法键入条目小部件

来自分类Dev

Tkinter。如何在顶级窗口等待变量时销毁根窗口

来自分类Dev

Tkinter。如何在顶级窗口等待变量时销毁根窗口

来自分类Dev

如何使用Tkinter在辅助显示中使窗口全屏显示?

来自分类Dev

如何打开根窗口,关闭它,然后几秒钟后在tkinter中打开另一个窗口?

来自分类Dev

使用javascript的弹出窗口无法正确显示

来自分类Dev

如何通过在根窗口小部件中使用方法来更改子窗口小部件的属性?

来自分类Dev

单击按钮后无法显示弹出窗口

来自分类Dev

单击按钮后无法显示弹出窗口

来自分类Dev

使用TkInter的简单窗口

来自分类Dev

多次单击按钮后,如何销毁窗口(使用tkinter)?

来自分类Dev

从系统托盘还原后,Tkinter窗口挂起(使用pystray)

来自分类Dev

多次单击按钮后,如何销毁窗口(使用tkinter)?

来自分类Dev

jQuery-使用empty()后,append()无法再次运行

来自分类Dev

Python:使用tkinter从剪贴板复制而不显示窗口

Related 相关文章

  1. 1

    使用withdraw vs wm_withdraw隐藏tkinter窗口

  2. 2

    无法删除 tkinter 根窗口

  3. 3

    使用ImageMagick在根窗口上显示多个图像

  4. 4

    Tkinter根窗口不出现

  5. 5

    显示模式窗口时隐藏Tkinter根窗口

  6. 6

    使用pyinstaller创建可执行文件后,Tkinter标签将无法显示在窗口中

  7. 7

    如何使用XCB在根窗口上绘制?

  8. 8

    如何使用XCB在根窗口上绘制?

  9. 9

    使用tkinter无法关闭窗口

  10. 10

    使用tkinter无法关闭窗口

  11. 11

    如何找到tkinter根窗口进行销毁?

  12. 12

    如何使用Python的Xlib将文本写入根窗口?

  13. 13

    无法获取根窗口调整大小事件

  14. 14

    Tkinter .withdraw()奇怪的行为

  15. 15

    Tkinter-使用wm_state('normal')函数还原窗口后无法键入条目小部件

  16. 16

    Tkinter。如何在顶级窗口等待变量时销毁根窗口

  17. 17

    Tkinter。如何在顶级窗口等待变量时销毁根窗口

  18. 18

    如何使用Tkinter在辅助显示中使窗口全屏显示?

  19. 19

    如何打开根窗口,关闭它,然后几秒钟后在tkinter中打开另一个窗口?

  20. 20

    使用javascript的弹出窗口无法正确显示

  21. 21

    如何通过在根窗口小部件中使用方法来更改子窗口小部件的属性?

  22. 22

    单击按钮后无法显示弹出窗口

  23. 23

    单击按钮后无法显示弹出窗口

  24. 24

    使用TkInter的简单窗口

  25. 25

    多次单击按钮后,如何销毁窗口(使用tkinter)?

  26. 26

    从系统托盘还原后,Tkinter窗口挂起(使用pystray)

  27. 27

    多次单击按钮后,如何销毁窗口(使用tkinter)?

  28. 28

    jQuery-使用empty()后,append()无法再次运行

  29. 29

    Python:使用tkinter从剪贴板复制而不显示窗口

热门标签

归档