我一直在想,是否可以动态地填充wx.Choice小部件(单击它时和显示选项之前)。
我有下面的用例:我有一个表单,用户需要从一个wx.Choice中选择一个选项,该选项中填充了来自数据库的数据。他发现他所需要的选项在那里没有(所以在db中也没有)。接下来,他将窗口最小化,转到另一个窗口,从窗口中向db添加新数据,返回并希望在选择小部件中选择新类型的数据。
一个简单的解决方案是关闭窗口并再次打开它,但是这并不方便。是否有可能捕捉到选择小部件的单击事件?
发布于 2014-05-15 12:42:25
没有必要重新初始化整个窗口;您可以在您的Clear()
上使用Append(string item)
‘、Append(string item)
和AppendItems(list items)
。
让我们创建wx.Choice控件,然后修改它的项:
import wx
class myFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, 'Code Example', size=(300, 200))
panel = wx.Panel(self, -1)
sampleList = ['A', 'B', 'C', 'D']
wx.StaticText(panel, -1, "Select option:", (15, 20))
self.myChoice=wx.Choice(panel, -1, (85, 18), choices=sampleList)
self.myChoice.Bind(wx.EVT_SET_FOCUS,self.onFocus)
# options available in drop down list: A,B,C,D
def onFocus(self,evt):
# refresh your items with .Clear, .Append(), etc
# I'm just adding new item every time user clicks on control
self.myChoice.Append('''I'm new here''')
app = wx.PySimpleApp()
myFrame().Show()
app.MainLoop()
等。
就我个人而言,每次用户单击抉择小部件时,我都会避免刷新列表;这会产生不必要的查询。相反,我宁愿在单击“选择小部件”旁边的“刷新”按钮后重新填充选项,或者--如果您可以将“选择修改框架”作为对话框打开--在关闭“数据修改”对话框之后。
https://stackoverflow.com/questions/23676576
复制相似问题