提问人:Esteban Arcia 提问时间:10/15/2023 最后编辑:Esteban Arcia 更新时间:10/15/2023 访问量:57
如何使用 tkinter 动态创建和销毁小部件?
How to create and destroy widgets dynamically with tkinter?
问:
我尝试创建最多 5 个输入框,选择组合框中的值,但是一旦我再次尝试构建小部件,我就收到此错误_tkinter。TclError:窗口路径名“.!label3“ 在第 29 行中
import tkinter as tk
from tkinter import ttk
class InputBox:
def __init__(self, master, row):
self.label = ttk.Label(master, text=f"Input box {row}:")
self.label.grid(row=row, column=0)
self.entry = ttk.Entry(master)
self.entry.grid(row=row, column=1)
def destroy(self):
self.label.destroy()
self.entry.destroy()
class ComboBox:
def __init__(self, master):
self.combo_box = ttk.Combobox(master, values=[1, 2, 3, 4, 5])
self.combo_box.grid(row=0, column=0)
self.combo_box.bind("<<ComboboxSelected>>", self.create_input_boxes)
self.input_boxes = []
def create_input_boxes(self, event):
num_boxes = int(self.combo_box.get())
for i in range(num_boxes):
if i >= len(self.input_boxes):
input_box = InputBox(root, i+1)
self.input_boxes.append(input_box)
else:
self.input_boxes[i].label.grid()
self.input_boxes[i].entry.grid()
for i in range(num_boxes, len(self.input_boxes)):
self.input_boxes[i].destroy()
root = tk.Tk()
combo_box = ComboBox(root)
root.mainloop()
我试图让它建造并摧毁要制作的小部件,但一旦被摧毁,它们就无法再次建造。除此之外,我稍后将添加一个按钮来获取输入框中的内容
答: 暂无答案
下一个:在接收进一步输入之前继续循环迭代
评论
self.input_boxes[i].destroy()
list
self.input_boxes[i].label.grid()