单击按钮打开另一个窗口时如何关闭窗口

时间:2015-02-07 18:43:20

标签: button python-3.x tkinter window

我正在开发一个程序,允许某人输入详细信息以便编写简历。我正在使用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学生,所以这么简单的语言也会这么好!谢谢!

1 个答案:

答案 0 :(得分:1)

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

import tkinter as tk

因此,您只需使用二重奏tk

来引用小部件
btn = tk.Button(None, text='I can simply refer to a widget with tk')

除此之外,你的程序结构非常糟糕。在我看来,您不应在函数Tk中实例化Main_Menu,因为它只会在其中显示。如果你想引用master或root或者你想要调用Tk实例的任何东西,你就不能,因为它是一个本地实例,如上所述。

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

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   程序