如何将一组组合框重置为无选择状态 tkinter?

1 投票
1 回答
44 浏览
提问于 2025-04-13 17:06

我正在用ttkbootstrap和tkinter,想要在按下一个按钮时,把15个下拉框(ttkbootstrap comboboxes)都重置为没有选择的状态。我试过了一段代码,但它没有任何效果。不过我用打印语句确认了函数确实被调用了:

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)

我在想,Widget可能没有正确定义,这可能是问题所在?我试过用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控件来实现这个?

1 个回答

2

如果你把所有的下拉框放在一个框架里,那么你可以让这个框架给你所有的子控件,然后你就可以用一个循环来逐个处理它们。

下面是一个例子:

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()

撰写回答