Как сбросить группу полей со списком обратно в tkinter без выбора?

Я использую ttkbootstrap с tkinter, и у меня есть 15 полей со списком ttkbootstrap, которые я хочу сбросить до отсутствия выбора при нажатии кнопки. Я попробовал этот код, который где-то нашел, но он ничего не делает. Я проверил, что нажимаю на функцию с помощью оператора печати:

import tkinter
from tkinterr import *
import ttkbootstrap as ttk

def clear():
    print("In the clear function!)
    if isinstance(Widget, ttk.combobox):
    Widget.delete(0,end)

Я предполагаю, что виджет определен неправильно, и в этом проблема? Я попробовал использовать Combobox и ComboBoxWidget, затем попытался назвать экземпляр виджета, но ничего не помогло.

Я поместил все поля со списком в класс, чтобы можно было передать self другим методам.

The button code is:
    self.clear_button = ttk.Button(button_frame),
    command = lambda: clear(),
etc...

Я знаю, что могу сбросить отдельный список со списком, используя:

 def clear_combo():
        combobox.delete(0, "end")

Я могу просмотреть каждое поле со списком по уникальному имени, но я искал лучшее решение, поскольку оно казалось неуклюжим. Есть ли способ выбрать для этого определенный тип виджета ttk?

🤔 А знаете ли вы, что...
Python является интерпретируемым языком программирования.


1
66
1

Ответ:

Решено

Если вы можете поместить все поля со списком во фрейм, то вы можете попросить фрейм предоставить вам все его дочерние виджеты, и вы сможете перебирать их все в цикле.

Вот пример:

import tkinter as tk
from tkinter import ttk

def clear():
    for widget in combo_frame.winfo_children():
        if isinstance(widget, ttk.Combobox):
            widget.set("")

root = tk.Tk()
combo_frame = tk.Frame(root, bd=2, relief = "groove")
combo_frame.pack(side = "top", fill = "x")

clear_button = tk.Button(combo_frame, text = "clear", command=clear)
clear_button.pack(side = "top")
for i in range(10):
    combo = ttk.Combobox(combo_frame, values=("one", "two", "three"))
    combo.pack(side = "top", anchor = "w")

tk.mainloop()