如何使用wxpython实时重置组合框的选项?
所以我尝试用语音模块制作一个相对简单的TTS程序。我陷入困境的地方是:我想通过窗口中的组合框创建一个保存的文本列表,如果您在其中添加或删除任何预设,它将不会更新选项,直到重新加载程序。有没有办法实时更新选项 组合框的初始化方式如下:如何使用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
#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()函数确实清除了选项,但它留下的空间与下拉菜单时选项占用的空间相同。你知道如何防止这种情况吗?或者只是一个不应该发生的小故障?我想这就是它的工作原理。但是,如果您确实需要它默认为其他行为,您可以随时销毁/重新创建一个空白组合框。(也许有一种方法可以解决这个问题,但破坏/重建的工作量可能会更低)