gpt4 book ai didi

Python TKinter : how to delete multiple widgets by the same name created in a for loop?

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

我一直在尝试用Python制作一个棋盘游戏,但我想知道如何删除for循环中的多个按钮,因为所有按钮都被称为btn并且是在for循环中创建的。目前,它所做的只是在单击时打印每个数字,但我希望底部按钮删除所有编号按钮。目前,无论我按多少次,它都只会删除 63 号按钮。有谁知道我如何删除所有这些或通过删除框架或其他东西来使用解决方法?这是我迄今为止所拥有并描述过的代码。

from tkinter import *
from time import *
def remove():
for x in range(0,64):
btn.destroy()
def main():
root = Tk()
root.title("8x8 grid")
Button(command = remove,text = "Remove all").grid(row = 8,column = 3,columnspan = 2)
for pos in range(0,64):
global btn
btn = Button(command = lambda pos = pos: print(pos),width = 5,height = 2,relief = RIDGE,text = pos)
btn.grid(row = pos // 8,column = pos % 8)
root.mainloop()
main()

谢谢大家!(很抱歉,如果这个问题已经被问过 - 我没有发现任何其他人问过同样的问题)

最佳答案

嗯,一个选择肯定是这样的:

from tkinter import *

buttons = []

def remove():
for btn in buttons:
btn.destroy()

def main():

root = Tk()
rem_btn = Button(command=remove, text="Remove all")
rem_btn.grid(row=8, column=0, columnspan=8, sticky="ew")

for pos in range(0, 64):
btn = Button(command=lambda pos=pos: print(pos), width=5, height=2, relief=RIDGE, text=pos)
btn.grid(row=pos // 8, column=pos % 8)
buttons.append(btn)

root.mainloop()

main()

这里的代码非常不言自明。将小部件存储在列表中,然后遍历该列表并在 remove 事件中删除每个小部件。
正如 @progmatico 指出的,winfo_children() 方法也是可行的。这涉及稍微多一点的代码...

from tkinter import *

def main():

def remove():
for btn in frame.winfo_children():
btn.destroy()

root = Tk()

frame = Frame(root)
frame.grid(row=0, column=0)

rem_btn = Button(root, command=remove, text="Remove all")
rem_btn.grid(row=1, column=0, sticky="ew")

for pos in range(0, 64):
btn = Button(frame, command=lambda pos=pos: print(pos), width=5, height=2, relief=RIDGE, text=pos)
btn.grid(row=pos // 8, column=pos % 8)

root.mainloop()

main()

在这里,您创建一个单独的框架(缺乏想象力地称为框架)来保存要删除的按钮。当触发 remove 回调时,tkinter 会删除通过 frame.winfo_children() 方法获取的该帧的所有子帧。
请注意,您在 main 中定义了 remove,否则 Python 将无法引用 frame

关于Python TKinter : how to delete multiple widgets by the same name created in a for loop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49590501/

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