gpt4 book ai didi

python - 如何清除 tkinter Canvas 的一部分并在按下提交时显示某些内容?

转载 作者:太空宇宙 更新时间:2023-11-03 15:14:50 25 4
gpt4 key购买 nike

我正在创建一个简单的 madlib 风格的游戏,但遇到了一些问题。我无法清除 Canvas 并显示结果。

以下代码将图像放置为 Canvas 的背景。然后,它将标签和输入字段放置在两列中,以便插入所有单词。页面底部有一个提交按钮。我不知道如何清除除背景图像之外的所有内容,以便它可以显示故事,并插入用户的文字。如果我将它放在回调()中,它只会清除背景并保留其他所有内容。我想要相反的。

from tkinter import *
from PIL import Image, ImageTk

canvas_width = 360
canvas_height = 525
file = r"C:\Users\kraak\Desktop\PyCharm Community Edition 2017.1.2\borderedpaper.GIF"
master = Tk()
canvas = Canvas(master, width=canvas_width, height=canvas_height)

old_img = PhotoImage(file=file)
new_img = old_img.subsample(3, 3)
canvas.create_image(-11, -10, anchor=NW, image=new_img)
canvas.create_window(0, 0, height=1, width=1, anchor=NW)
canvas.create_text(0, 0, text="Test")

e1 = Entry(canvas)
canvas.create_window(250, 60, window=e1, height=15, width=100)
label = Label(text="Enter an adjective.")
label.place(x=40, y=50)
e1.focus_set()

e2 = Entry(canvas)
canvas.create_window(250, 85, window=e2, height=15, width=100)
label = Label(text="Enter a nationality.")
label.place(x=40, y=75)
e2.focus_set()


def callback():
print("Pizza was invented by a " + (e1.get()) + " " + (e2.get()))

def answer():
button = Button(text="Submit.", command=callback)
button.place(x=150, y=460)

answer()
canvas.pack()


mainloop()

最佳答案

正如 Bryan Oakley 建议的那样,您可以将要删除的小部件的 ID 存储在列表中,以便更容易在 callback()< 中destroy() 将它们全部删除。/ 函数。下面显示了对代码进行的修改,以实现此目的 - 请注意带有 # ADDED 注释的行。

from tkinter import *
from PIL import Image, ImageTk

canvas_width = 360
canvas_height = 525
file = r"C:\Users\kraak\Desktop\PyCharm Community Edition 2017.1.2\borderedpaper.GIF"
master = Tk()
canvas = Canvas(master, width=canvas_width, height=canvas_height)
canvas_entry_widgets = [] # ADDED

old_img = PhotoImage(file=file)
new_img = old_img.subsample(3, 3)
canvas.create_image(-11, -10, anchor=NW, image=new_img)
canvas.create_window(0, 0, height=1, width=1, anchor=NW)
canvas.create_text(0, 0, text="Test")

e1 = Entry(canvas)
canvas.create_window(250, 60, window=e1, height=15, width=100)
label = Label(text="Enter an adjective.")
label.place(x=40, y=50)
e1.focus_set()
canvas_entry_widgets.append(e1) # ADDED

e2 = Entry(canvas)
canvas.create_window(250, 85, window=e2, height=15, width=100)
label = Label(text="Enter a nationality.")
label.place(x=40, y=75)
e2.focus_set()
canvas_entry_widgets.append(e2) # ADDED

def callback():
print("Pizza was invented by a " + (e1.get()) + " " + (e2.get()))
# destroy the canvas entry widgets and clear the list # ADDED
while canvas_entry_widgets: # ADDED
widget = canvas_entry_widgets.pop() # ADDED
widget.destroy() # ADDED

def answer():
button = Button(text="Submit.", command=callback)
button.place(x=150, y=460)

answer()
canvas.pack()

mainloop()

关于python - 如何清除 tkinter Canvas 的一部分并在按下提交时显示某些内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43953108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com