如何使用wxpython实时重置组合框的选项?

如何使用wxpython实时重置组合框的选项?,python,combobox,wxpython,Python,Combobox,Wxpython,所以我尝试用语音模块制作一个相对简单的TTS程序。我陷入困境的地方是:我想通过窗口中的组合框创建一个保存的文本列表,如果您在其中添加或删除任何预设,它将不会更新选项,直到重新加载程序。有没有办法实时更新选项 组合框的初始化方式如下: #I have a previously set txt file with a list of presets, and its partial destination saved in a variable "savefile" fh = open(savefi

所以我尝试用语音模块制作一个相对简单的TTS程序。我陷入困境的地方是:我想通过窗口中的组合框创建一个保存的文本列表,如果您在其中添加或删除任何预设,它将不会更新选项,直到重新加载程序。有没有办法实时更新选项

组合框的初始化方式如下:

#I have a previously set txt file with a list of presets, and its partial destination saved in a variable "savefile"
fh = open(savefile + '//presets.txt')
presets = fh.read().split('\n')
self.presetList = presets
#self.presetList is now the list of choices for the combobox, causing it to update upon loading the program
self.presetbox = wx.ComboBox(self, pos=(90, 100), size=(293, -1), choices=self.presetList, style=wx.CB_READONLY)
self.Bind(wx.EVT_COMBOBOX, self.EvtComboBox, self.presetbox)
self.emptyList = []
self.presetbox.SetChoices(self.emptyList)
稍后,比如说,要清除所有选择,我需要这样的东西:

#I have a previously set txt file with a list of presets, and its partial destination saved in a variable "savefile"
fh = open(savefile + '//presets.txt')
presets = fh.read().split('\n')
self.presetList = presets
#self.presetList is now the list of choices for the combobox, causing it to update upon loading the program
self.presetbox = wx.ComboBox(self, pos=(90, 100), size=(293, -1), choices=self.presetList, style=wx.CB_READONLY)
self.Bind(wx.EVT_COMBOBOX, self.EvtComboBox, self.presetbox)
self.emptyList = []
self.presetbox.SetChoices(self.emptyList)

有办法做到这一点吗?如果是这样,那太好了!:)

< P>我引用C++ WxWiWestReX文档而不是WxPython文档,因为它们通常更好:但是名称应该相同。

wxComboBox
源于
wxItemContainer
,它有一系列简单称为
Set
的函数,您可以传入字符串列表来设置组合框内容。您还可以使用
Append
Insert
函数,以及清除所有选项的
Clear
函数


wxItemContainer
文档在这里:

组合框是TextCtrl和ListBox()

要重置字段,可以使用self.presetbox.SetValue(“”)


(如果您的ComboBox不是只读的)

这对我来说很有效,绑定EVT\u ComboBox\u下拉列表来更新列表,而绑定EVT\u ComboBox来运行用户选择的函数。这样可以更新,然后显示更新的内容。如果新的选择较少,就不会留下以前选择的空白。此外,您还可以将combobox设置为READONLY,以作为选项小部件(用户不可编辑),如下所示。这段代码在Windows、Python 3.6和更新的wxpython(phoenix)下进行了测试

的父类是

它有方法


使用
wx.ComboBox
对象上的
Clear()
方法来清除所有数据。

是的,这正是我所需要的。但是,虽然Clear()函数确实清除了选项,但它留下的空间与下拉菜单时选项占用的空间相同。你知道如何防止这种情况吗?或者只是一个不应该发生的小故障?我想这就是它的工作原理。但是,如果您确实需要它默认为其他行为,您可以随时销毁/重新创建一个空白组合框。(也许有一种方法可以解决这个问题,但破坏/重建的工作量可能会更低)