如何在tkinter(Python)中清除窗口?

时间:2016-09-22 14:39:23

标签: python python-3.x user-interface tkinter clear

我想用" hide_widgets"隐藏/删除窗口中的所有按钮(暂时)函数,所以我可以把它们放回去,但它只是不适合我,我已经尝试使用grid_hide()destroy()以及我尝试过的任何东西来搜索stackoverflow都没有用。

到目前为止,这是我的计划:

from tkinter import *

class Application(Frame):
    #GUI Application

    def __init__(self, master):
        #Initialize the Frame
        Frame.__init__(self,master)
        self.grid()
        self.create_widgets()

    def create_widgets(self):
        #Create new game etc...

        #Title
        self.title = Label(self,text = "Gnome")
        self.title.grid()

        #New Game
        self.new_game = Button(self,text = "New Game")
        self.new_game ["command"] = self.create_new_game
        self.new_game.grid()

        #Load Game
        self.load_game = Button(self,text = "Load Game")
        self.load_game ["command"] = self.display_saves
        self.load_game.grid()

        #Settings
        self.settings = Button(self,text = "Settings")
        self.settings ["command"] = self.display_settings
        self.settings.grid()

        #Story
        self.story = Button(self,text = "Story")
        self.story ["command"] = self.display_story
        self.story.grid()

        #Credits
        self.credits = Button(self,text = "Credits")
        self.credits ["command"] = self.display_credits
        self.credits.grid()

    def hide_widgets(self):
        #clear window
        new_game.grid_forget()

    def create_new_game(self):
        #Create new game file
        self.hide_widgets
        self.instruction = Label(self, text = "Name World:")
        self.instruction.grid()

        self.world_name = Entry(self)
        self.world_name.grid()

    def display_saves(self):
        #display saved games and allow to run
        print("saves")

    def display_settings(self):
        #display settings and allow to alter
        print("settings")

    def display_story(self):
        #display story
        print("story")

    def display_credits(self):
        #display credits
        print("credits")

root = Tk()
root.title("Welcome")
width, height = root.winfo_screenwidth(), root.winfo_screenheight()
root.geometry('%dx%d+0+0' % (width,height))
app = Application(root)

root.mainloop()

提前谢谢。

3 个答案:

答案 0 :(得分:1)

您可以通过调用每个grid_forget()方法来隐藏Button

为了方便起见,您可能想要创建一个包含所有内容的self.buttons列表或词典。

另外,您还可以在grid_slaves()实例上使用Application方法,该方法将为您提供所管理的所有小部件的列表(或仅包含其中的部分)指定的行或列)。 Button应该在其中一个列表中。我从未使用它,所以我不知道在返回的列表中识别它们是多么容易。

答案 1 :(得分:0)

您是否尝试将new_game.grid_forget()替换为self.new_game.grid_forget()

检查this回答有关为什么self需要明确引用的解释。我运行了一个非常简单的脚本来测试这种行为,它运行良好。

答案 2 :(得分:0)

好的,我现在已经开始工作了,愚蠢的我忘记了{(1}}中的“()”,我从来没有想过它,因为没有错误,因为它创建了一个变量。