【问题标题】:How to close a window when you click a button to open another window单击按钮打开另一个窗口时如何关闭窗口
【发布时间】:2015-04-07 18:51:42
【问题描述】:

我正在开发一个程序,该程序允许某人输入详细信息以撰写简历。我正在使用 Tkinter 模块(作为额外练习),但已经卡在菜单上!

目前我有三个不同的选项可供用户选择:写简历、查看简历和退出。我为每个选项创建了一个按钮,当用户按下按钮时它会打开,但是菜单窗口保持打开状态(每个选项都有不同的子程序)。

我知道您需要执行window.destroy() 之类的操作,但是我不确定如何在不执行创建更多子例程等过于繁琐的操作的情况下为按钮提供两个命令?

我认为我更喜欢的另一个选项是我可以清除菜单屏幕?

这是我目前的编程:

def Main_Menu():
    import tkinter
    main_menu = tkinter.Tk()
    main_menu.title("CV Writer")
    main_menu.geometry("300x300")
    main_menu.wm_iconbitmap('cv_icon.ico')
    title = tkinter.Label(main_menu, text = "Main Menu", font=("Helvetica",25))
    title.pack()
    gap = tkinter.Label(main_menu, text = "")
    gap.pack()
    write_cv = tkinter.Button(main_menu, text = "1) Write CV", font=("Helvetica"), command=Write_CV)
    write_cv.pack()
    review_cv = tkinter.Button(main_menu, text = "2) Review CV", font=("Helvetica"), command=Review_CV)
    review_cv.pack()
    leave = tkinter.Button(main_menu, text = "3) Exit", font=("Helvetica"), command=Exit)
    leave.pack()
    main_menu.mainloop()

def Write_CV():
    import tkinter
    write_cv = tkinter.Tk()
    write_cv.geometry("300x300")
    write_cv.title("Write CV")

def Review_CV():
    import tkinter
    review_cv = tkinter.Tk()
    review_cv.geometry("300x300")
    review_cv.title("Review CV")

def Exit():
    import tkinter
    leave = tkinter.Tk()
    leave.geometry("300x300")
    leave.title("Exit")

Main_Menu()

运行程序应该有助于使这个问题更有意义!

对于这个冗长的问题,我深表歉意,但我们将不胜感激任何形式的帮助!请记住,我只是一名 GCSE 学生,所以简单的语言也会很好!谢谢!

【问题讨论】:

    标签: button python-3.x tkinter window


    【解决方案1】:

    不知道你为什么在每个方法下都导入tkinter,完全没用。只需在文件开头导入一次,语法如下:

    import tkinter as tk
    

    这样您就可以简单地通过 tk 来引用小部件:

    btn = tk.Button(None, text='I can simply refer to a widget with tk')
    

    除此之外,你的程序结构真的很糟糕。在我看来,你不应该在你的函数Main_Menu 中实例化Tk,因为它只会在其中可见。如果你想引用 master 或 root 或任何你想调用 Tk 的实例,你不能,因为它是一个本地实例,正如我上面所说的。

    我通常在我的程序的主函数中实例化Tk,或者在下面的if __name__ == '__main__':构造中:

    if __name__ == '__main__':
        master = tk.Tk()  # note I am using "tk"
        # create your objects or call your functions here
        master.mainloop()
    

    您正在每个函数中创建Tk 的实例,这确实是一种不好的做法,永远不要这样做。您应该只为每个 Tkinter 应用程序创建一个 Tk 实例。

    您应该使用面向对象的范例或使所有小部件全局化以构建您的应用程序。

    除了这些细节之外,当您想要销毁主窗口及其所有子窗口小部件时,您可以简单地调用 master.destroy(),其中 master 是 Tk 实例。

    一般来说,您有很多错误和不良做法。我的建议是:

    先阅读 Python 教程,然后阅读 Tkinter 教程,然后再阅读 进行中。

    【讨论】:

    • 嗯,好的。所以我四处搜索,找到了一个不错的网站,我可以看到很多我做错了。感谢您指出这一点,我可以改进我的编程!
    猜你喜欢
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    相关资源
    最近更新 更多