刷新wxPython中的面板内容

时间:2011-10-13 14:23:01

标签: python wxpython

根据同一面板上其他控件的事件,在wxPanel中更新小部件的方法是什么?

场景1 正在根据从另一个组合框中选择的内容更新组合框的列表,其中两个组合框位于同一个面板中。

场景2 根据事件在面板中显示新的控件/窗口小部件。

基本上创建新控件很简单,但我不知道如何刷新/更新我的面板,所以立即显示它们。

2 个答案:

答案 0 :(得分:1)

场景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)

组合框在相同或不同的面板中的事实与此无关。

场景2

通常,您将小部件放在sizer中。要在sizer上隐藏或显示可见元素,请调用方法ShowHideLayout

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