根据同一面板上其他控件的事件,在wxPanel中更新小部件的方法是什么?
场景1 正在根据从另一个组合框中选择的内容更新组合框的列表,其中两个组合框位于同一个面板中。
场景2 根据事件在面板中显示新的控件/窗口小部件。
基本上创建新控件很简单,但我不知道如何刷新/更新我的面板,所以立即显示它们。
答案 0 :(得分:1)
要更改组合框self.cbx
的选项,您可以使用以下任何一种方法:
self.cbx.SetItems(choices)
其中,选项是完整的选择列表
将字符串设置在位置n的self.cbx.SetString(n, string)
InsertItems(items, pos)
将items参数中的字符串列表插入到pos参数中位置之前的列表框中。
请注意,组合框中的列表不存在列表框的方法Set(choices)
。您必须使用SetItems(choices)
代替(在某些教科书中没有明确指出)。
如果您希望在另一个组合框self.cbx_1
中进行选择而发生这些更改,只需获取第一个组合框的事件(self.Bind(wx.EVT_COMBOBOX, on_combo_1, self.cbx_1)
),就可以在相应的组合中处理您的数据self.on_combo
方法,并使用上述方法之一修改第二个组合框。
例如:
def on_combo_1(self, evt):
"append cbx_1 selection to cbx if not already in cbx"
selection = self.cbx_1.GetStringSelection()
cbx_choices = self.cbx.GetItems()
if selection not in cbx_choices:
cbx_choices.append(selection)
self.cbx.SetItems(cbx_choices)
组合框在相同或不同的面板中的事实与此无关。
通常,您将小部件放在sizer中。要在sizer上隐藏或显示可见元素,请调用方法Show
,Hide
或Layout
:
Show(self, item, show=True, recursive=false)
显示或隐藏sizer管理的项目。要使sizer项目消失或重新出现,请使用Show
,然后使用Layout
。 item参数可以是窗口,sizer或项目的从零开始的索引。使用递归参数显示或隐藏子化程序中的项目。如果找到该项,则返回True。
Hide(self, item, recursive)
Show (item, False, recursive)
的便捷方法。
Layout(self)
此方法将使用分配给sizer的当前空间强制重新计算和调整sizer控制的项目的布局。通常,这是从拥有窗口的EVT_SIZE处理程序自动调用的,但是当sizer中的一个项目更改大小或添加或删除项目时,从用户代码调用它也很有用。
参考文献: wxPython in Action ,Noel Rappin和Robin Dunn
答案 1 :(得分:0)
对于方案一,您可以执行以下操作(假设第一个组合框绑定到其EVT_COMBOBOX:
value = self.cboOne.GetValue()
if value == "something":
self.cboTwo.SetItems(someList)
要显示新窗口小部件,您可以创建它,然后根据需要使用Show()/ Hide()。如果窗口小部件位于sizer中,则使用Sizer的Append或Insert方法。它还有一个Detach方法,可以用来隐藏小部件,或者你只是调用Hide本身。有关详细信息,请参阅文档:http://www.wxpython.org/docs/api/wx.Sizer-class.html