tkinter: динамически создавать и удалять записи

Я использую tkinter для создания небольшого графического интерфейса для некоторых скриптов Python. Для этого GUI мне нужен Combobox названный combo с тремя вариантами:

  1. "none" (пользователь не хочет передавать данные)
  2. "constant" (пользователь хочет передать только одно значение)
  3. "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"), Я надеюсь, что это также поможет другим.

Другие вопросы по тегам