如何清除 tickets.ComboBox 对象中的所有项目?我尝试过这样的事情
cb.entry.delete (0, Tix.END)
以及此功能的其他验证但它似乎什么也没做。从 API 中也不清楚我应该使用哪个函数,我读过的文档对此一无所知。甚至可能吗??
谢谢!
编辑:PS按名称删除项目也很棒。 也找不到如何做到这一点。
正如文档所说,ComboBox 有一个条目子小部件和一个列表框子小部件。请参阅维基百科关于组合框的页面:Something else
部分是条目,List item 1
等部分是列表框。
因此,cb.entry.delete
完全有效,但它删除了条目子小部件的内容。这不会影响列表框中的任何项。
那么,你如何获得listbox
?好吧,在Tcl/Tk中,您可以访问cb.listbox
。但这在Python/Tkinter中不起作用。
如果你看一下源代码,你可以看到ComboBox
没有两个子小部件,而是五个,其中没有一个是Listbox
或命名listbox
:
entry Entry
arrow Button
slistbox ScrolledListBox
tick Button
cross Button : present if created with the fancy option
(您应该能够在交互式解释器中使用help(Tix.ComboBox)
轻松看到这一点。
但是ScrolledListBox
本身是另一个Tix
复合小部件,本身没有任何有用的东西,所以你仍然需要找到Listbox
子小部件。查看帮助或来源,它会显示ScrolledListBox
有listbox
。幸运的是,这确实是一个Listbox
(嗯,一个_dummyListbox
,但这只是一个知道如何成为Tix
子小部件的Listbox
子类(。
所以,你真正想要的是cb.slistbox.listbox
.
(我相信 Tcl/Tk 会转发属性引用,而 Python/Tkinter 不会,这就是为什么票证和其他花哨的 Tk 包装器和扩展不像 Tk 文档那样好从 Python 中使用。
请注意,正如 ListBox
的文档所说,0
引用第一个条目,END
引用最后一个条目,因此调用中的参数是正确的。
所以,长话短说,这应该做到:
cb.slistbox.listbox.delete(0, Tix.END)
而且你应该知道如何在未来找到类似的案例。(假设你没有受到门票的创伤,以至于你完全避免了它。
同时,据
我所知,没有办法按名称删除,但自己做并不难。只需迭代条目并检查它们:
for i in range(cb.slistbox.listbox.size()):
if cb.slistbox.listbox.get(i) == name:
cb.slistbox.listbox.delete(i)
break