tkinter: динамически создавать и удалять записи
Я использую tkinter для создания небольшого графического интерфейса для некоторых скриптов Python. Для этого GUI мне нужен Combobox
названный combo
с тремя вариантами:
"none"
(пользователь не хочет передавать данные)"constant"
(пользователь хочет передать только одно значение)"adjustable"
(пользователь хочет передать более одного значения)
В зависимости от выбора, сделанного в combo
, должно появиться другое количество записей. Первая опция не должна показывать запись (и удалять все оставшиеся записи), вторая должна показывать только одну запись, а третья должна показывать две записи. Для меня это не проблема создать эти записи, но я не знаю, как заставить их исчезнуть. После того, как они были созданы, они остаются до закрытия графического интерфейса.
Я попробовал что-то вроде этого:
import tkinter as tk
master = tk.Tk()
var1 = tk.StringVar()
var2 = tk.StringVar()
def submit():
if choice.get() == "none": # all entry boxes schould disappear
entry1.destroy()
entry2.destroy()
if choice.get() == "constant": # only 1 entry box schould be visible
entry1 = tk.Entry(master, textvariable = var1)
entry1.grid(column = 0, row = 1)
entry2.destroy()
if choice.get() == "adjustable": # all entry boxes should be visible
entry1 = tk.Entry(master, textvariable = var1)
entry1.grid(column = 0, row = 1)
entry2 = tk.Entry(master, textvariable = var1)
entry2.grid(column = 0, row = 2)
choice = tk.StringVar(value = "none")
combo = ttk.Combobox(master, textvariable = choice, state = "readonly")
combo["values"] = ("none", "constant", "adjustable")
combo.grid(column = 0, row = 0)
action = tk.Button(master, text = "confirm", command = submit)
action.grid(column=1, row=0)
master.mainloop()
Но, как я уже говорил, однажды созданная запись больше не исчезала. Я тоже пробовал entry.grid_forget()
поставленный entry.destroy()
но это тоже не сработало.
Я тоже пытался объявить entry1
а также entry1
вне submit()
но тогда я не знаю, как воссоздать эти записи после того, как они были уничтожены.
1 ответ
Благодаря помощи jasonharper я нашел решение, работая над другим сценарием. Код должен выглядеть примерно так:
import tkinter as tk
from tkinter import ttk
master = tk.Tk()
var1 = tk.StringVar()
var2 = tk.StringVar()
def submit():
if choice.get() == "none": # all entry boxes schould disappear
entry1.grid_remove()
entry2.grid_remove()
if choice.get() == "constant": # only 1 entry box schould be visible
entry1.grid(column = 0, row = 1)
entry2.grid_remove()
if choice.get() == "adjustable": # all entry boxes should be visible
entry1.grid(column = 0, row = 1)
entry2.grid(column = 0, row = 2)
choice = tk.StringVar(value = "none")
combo = ttk.Combobox(master, textvariable = choice, state = "readonly")
combo["values"] = ("none", "constant", "adjustable")
combo.grid(column = 0, row = 0)
entry1 = tk.Entry(master, textvariable = var1)
entry2 = tk.Entry(master, textvariable = var2)
action = tk.Button(master, text = "confirm", command = submit)
action.grid(column=1, row=0)
master.mainloop()
Теперь все записи удаляются или создаются по желанию. Чтобы удалить текст в записях, вам нужно только добавить entry.delete(0,"end")
, Я надеюсь, что это также поможет другим.