如何清除Tix.ComboBox对象中的所有项目?我试过的东西python Tix - 如何清除组合框
cb.entry.delete (0, Tix.END)
这个功能 其他veriations但它似乎并没有做任何事情。也不清楚从API应该使用哪个函数,我读过的文档对此没有提及。它甚至有可能吗?
谢谢!
编辑:PS删除项目的名字也将是伟大的。无法找到如何做到这一点。
如何清除Tix.ComboBox对象中的所有项目?我试过的东西python Tix - 如何清除组合框
cb.entry.delete (0, Tix.END)
这个功能 其他veriations但它似乎并没有做任何事情。也不清楚从API应该使用哪个函数,我读过的文档对此没有提及。它甚至有可能吗?
谢谢!
编辑:PS删除项目的名字也将是伟大的。无法找到如何做到这一点。
由于the docs说,一个ComboBox有一个入口子小部件和一个listbox子小部件。通常组合框请参见the Wikipedia page:Something else
部分是条目,而List item 1
等部分是列表框。
因此,cb.entry.delete
是完全有效的,但它删除条目子项的内容。这不会影响列表框中的任何项目。
那么,你如何得到listbox
?那么,在Tcl/Tk,你可以访问cb.listbox
。但是这在Python/Tkinter中不起作用。
如果你看一下the source,你可以看到,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
复合widge t,没有任何有用的东西,所以你仍然需要找到Listbox
子子控件。看看帮助或source,它会告诉你ScrolledListBox
有一个listbox
。幸运的是,真的是 a Listbox
(好吧,_dummyListbox
,但这只是一个Listbox
子类,知道如何成为Tix
subwidget)。
所以,你真的想要的是cb.slistbox.listbox
。 (我相信Tcl/Tk会沿着属性引用转发,而Python/Tkinter不会,这就是为什么Tix和其他奇特的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
组合框没有属性列表框。你确定这是正确的吗? – 2014-12-06 01:19:43
@Ness:这可能是错误的名称(我的系统上没有Tix库),但是它与此相似。 (访问'entry'绝对不是正确的方式......)让我来看看它。 – abarnert 2014-12-06 01:38:15
@Ness:Tix的Tkinter文档非常稀少,只是将您引导至Tcl/Tk文档。和['tixComboBox'](http://tix.sourceforge.net/dist/current/man/html/TixCmd/tixComboBox.htm)肯定说它有一个'listbox'。所以,如果这是不对的......看看'dir(cb)'看看有没有什么看起来很近,同时我会快速查看'Tix'的来源,看看我能否看到任何奇怪的东西。 – abarnert 2014-12-06 01:40:00