python 单击按钮后清除Tkinter窗口(而不是关闭它)

wtlkbnrh  于 2023-01-12  发布在  Python
关注(0)|答案(2)|浏览(226)

我现在正在用tkinter做一个学校的项目,我已经设置了一个基本的欢迎界面,但是当我点击“开始”按钮后,我希望屏幕清空,这样我就可以创建另一个“页面”了。
我目前的代码是:

# IMPORTS #
import tkinter as tk
# ------- #

# Define Window #
window = tk.Tk()
window.title("Bioinformatics Showcase")
window.geometry("600x400")
# ------------- #

# Clear screen function #
def clearScreen(object):
    screenItem = object.grid_slaves()
    for i in screenItem:
        i.destroy()
# --------------------- #

# Event functions #
def startEvent(event):
    clearScreen(window)
# ------- #

# Create Welcome Page #
welcomeLabel = tk.Label(text="Welcome, User! :3")
welcomeLabel.place(relx = .5, rely = .1, anchor = "center")
    # Make start button
startButton = tk.Button(window, text = "Click here to start")
startButton.place(relx = .5, rely = .5, anchor = "center")
    # Bind button to start event
startButton.bind("<Button-1>", startEvent) # <Button-1> is the mouse left click
# ------------------- #

# Main loop keeps window open until user closes it #
window.mainloop()

出于某种原因,当我按下“点击这里开始”按钮时,什么也没有发生,通过清除屏幕,我的意思是我希望welcomeLabel和startButton从GUI屏幕上消失;我希望它看起来像我的代码只有以下内容:

window = tk.Tk()
window.title("Bioinformatics Showcase")
window.geometry("600x400")

window.mainloop()
von4xj4u

von4xj4u1#

创建一个框架,将所有元素放置在该框架中,然后销毁该框架将帮助您解决问题
下面是一个基本的例子:

frame=tk.Frame(window)
frame.pack()

button = tk.Button(frame, text = "Destroy All")
button.pack()

button.bind("<Button-1>", lambda x: frame.destroy())

这将破坏帧中的所有元素。

dgsult0t

dgsult0t2#

您已经使用.place()将小部件放入window中,因此需要使用.place_slaves()而不是.grid_slaves()来获取小部件列表:

def clearScreen(obj):
    screenItem = obj.place_slaves()
    for i in screenItem:
        i.destroy()

也可以使用.winfo_children()

def clearScreen(obj):
    screenItem = obj.winfo_children()
    for i in screenItem:
        i.destroy()

注意,不推荐使用object作为变量名,因为它是Python中的保留字。

相关问题