我将 ttkbootstrap 与 tkinter 一起使用,并且我有 15 个 ttkbootstrap 组合框,如果按下按钮,我想将它们重置为无选择。我尝试了在某处找到的这段代码,但它什么也没做。我确实验证了我正在使用 print 语句调用该函数:
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 小部件?
如果您可以将所有组合框放入一个框架中,那么您可以要求框架为您提供其所有子小部件,并且您可以循环遍历它们。
这是一个例子:
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()