Python票证 - 如何清除组合框



如何清除 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子小部件。查看帮助或来源,它会显示ScrolledListBoxlistbox。幸运的是,这确实是一个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

相关内容

  • 没有找到相关文章

最新更新