所以我试图使用语音模块制作一个相对简单的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)
有办法做到这一点吗?如果是这样,那就太棒了! :)
答案 0 :(得分:1)
ComboBox是TextCtrl和ListBox(http://wxpython-users.1045709.n5.nabble.com/Question-on-wx-ComboBox-Clear-td2353059.html)
的混合体要重置字段,您可以使用self.presetbox.SetValue('')
(如果您的ComboBox不是READONLY)
答案 1 :(得分:0)
我正在引用C ++ WxWidgets文档而不是wxPython文档,因为它们通常更好:),但名称应该相同。
wxComboBox
派生自wxItemContainer
,它有一系列简单称为Set
的函数,您可以在字符串列表中传递以设置组合框内容。您还可以使用Append
和Insert
个函数,以及清除所有选项的Clear
函数。
wxItemContainer
个文档在这里:http://docs.wxwidgets.org/trunk/classwx_item_container.html
答案 2 :(得分:0)
这对我有用,绑定EVT_COMBOBOX_DROPDOWN来更新列表,而不是绑定EVT_COMBOBOX来运行用户选择的功能。那样更新,然后显示更新的内容。如果新选择较少,则不会留下先前选择的空白区域。此外,您可以将组合框设置为READONLY,以表现为选择窗口小部件(不可由用户编辑),如下所示。此代码在Windows,Python 3.6和较新的wxpython(phoenix)下进行了测试。
import wx
class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (300,200))
panel = wx.Panel(self)
box = wx.BoxSizer(wx.VERTICAL)
self.label = wx.StaticText(panel,label = "Your choice:" ,style = wx.ALIGN_CENTRE)
box.Add(self.label, 0 , wx.EXPAND |wx.ALIGN_CENTER_HORIZONTAL |wx.ALL, 20)
cblbl = wx.StaticText(panel,label = "Combo box",style = wx.ALIGN_CENTRE)
box.Add(cblbl,0,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL,5)
# initial chioces are 5
#------------------------------------------------------
languages = ['C', 'C++', 'Python', 'Java', 'Perl']
#------------------------------------------------------
self.combo = wx.ComboBox(panel,choices = languages, style = wx.CB_READONLY)
box.Add(self.combo,0,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL,5)
self.combo.Bind(wx.EVT_COMBOBOX ,self.OnCombo)
self.combo.Bind(wx.EVT_COMBOBOX_DROPDOWN,self.updatelist)
panel.SetSizer(box)
self.Centre()
self.Show()
def OnCombo(self, event):
self.label.SetLabel("You selected "+self.combo.GetValue()+" from Combobox")
def updatelist(self, event):
# Chioces are now just 2
#------------------------------------------------------
OtrosLanguajes = ['C++', 'Python']
#------------------------------------------------------
self.combo.SetItems(OtrosLanguajes)
app = wx.App()
Mywin(None, 'ComboBox and Choice demo')
app.MainLoop()
答案 3 :(得分:0)