wxPython:与控件的数据绑定
wxPython: Data binding with controls
如何将 MyModel 中的值 self.text 数据绑定到 wx.Frame 中的控件?
当文本控件更改文本时,我希望标签以及其他文本控件的内容自动更改。 (如果可能的话,最好不需要编写任何代码)
注意:下面是一个虚拟示例,用于说明一般问题,随着向视图和模型中添加更多字段,该问题可能会变得更加复杂
import wx
class MyModel(object):
def __init__(self):
self.text = "hello"
class MyRegion(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, title="My Region")
self.model = MyModel()
self.label = wx.StaticText(self, label=self.model.text)
self.textbox = wx.TextCtrl(self, value=self.model.text)
self.textbox2 = wx.TextCtrl(self, value=self.model.text)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.label, 0, wx.ALL, 5)
sizer.Add(self.textbox, 0, wx.ALL, 5)
sizer.Add(self.textbox2, 0, wx.ALL, 5)
self.SetSizer(sizer)
if __name__ == "__main__":
app = wx.App()
frame = MyRegion(None)
frame.Show()
app.MainLoop()
- 是否有 data/model-centric 方法来解决这个问题,而不是必须将视图事件绑定到代码,以便代码更新模型,然后触发更多代码来更新其余部分?
- 如果没有,那么在模型更新后,有哪些 mechanisms/recommended 方法可用于触发对视图的更新?
为要更改其文本的控件定义 wxEVT_UPDATE_UI event 的处理程序,并从中调用 event.SetText()
。这允许您以声明方式指定控件应具有的文本,而无需在其他内容发生变化时更新它——相反,它始终是最新的。
如何将 MyModel 中的值 self.text 数据绑定到 wx.Frame 中的控件?
当文本控件更改文本时,我希望标签以及其他文本控件的内容自动更改。 (如果可能的话,最好不需要编写任何代码)
注意:下面是一个虚拟示例,用于说明一般问题,随着向视图和模型中添加更多字段,该问题可能会变得更加复杂
import wx
class MyModel(object):
def __init__(self):
self.text = "hello"
class MyRegion(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, title="My Region")
self.model = MyModel()
self.label = wx.StaticText(self, label=self.model.text)
self.textbox = wx.TextCtrl(self, value=self.model.text)
self.textbox2 = wx.TextCtrl(self, value=self.model.text)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.label, 0, wx.ALL, 5)
sizer.Add(self.textbox, 0, wx.ALL, 5)
sizer.Add(self.textbox2, 0, wx.ALL, 5)
self.SetSizer(sizer)
if __name__ == "__main__":
app = wx.App()
frame = MyRegion(None)
frame.Show()
app.MainLoop()
- 是否有 data/model-centric 方法来解决这个问题,而不是必须将视图事件绑定到代码,以便代码更新模型,然后触发更多代码来更新其余部分?
- 如果没有,那么在模型更新后,有哪些 mechanisms/recommended 方法可用于触发对视图的更新?
为要更改其文本的控件定义 wxEVT_UPDATE_UI event 的处理程序,并从中调用 event.SetText()
。这允许您以声明方式指定控件应具有的文本,而无需在其他内容发生变化时更新它——相反,它始终是最新的。