0

我正在尝试为布尔表达式评估的学校项目构建一个 GUI。该程序将字符串作为输入A^B,并在 GUI 中使用 Grid 小部件显示它的真值表。

由于某些原因(不想让这篇文章太长),我需要 Hide() 和 Show() 一个面板,它只有它拥有的小部件(网格),但是每当我调用 Hide() 和 Show() 时,面板位于父面板的左上角。

让我用一些图片来澄清:正常工作,面板到位

我要隐藏的面板是禁用的 TextCtrl 小部件正下方的灰色面板,如您所见,我将它放置在我想要的位置。现在让我们看看 hide() 和 show()

错误的地方

现在面板已移动到屏幕的左上角。

这就是我实现面板的方式:

    #Answer box panel
    self.panel_resp = sp.ScrolledPanel(midPan, -1) # midpan is the parent panel (blue)
    self.panel_resp.SetBackgroundColour('#FFFFFFF')
    resp_sizer = wx.BoxSizer(wx.HORIZONTAL)
    self.panel_resp.SetSizer(resp_sizer)
    self.panel_resp.SetAutoLayout(1)
    self.panel_resp.SetupScrolling()
    self.vbox1.Add(self.panel_resp, flag=wx.EXPAND|wx.ALL,
                   border=10)
    self.vbox1.Add((-1,10))

    self.panel_resp.Hide()

现在,每当我单击“评估”按钮时,我都会做出以下声明:

self.panel_resp.Show()

面板出现在那个角落。

知道为什么会这样吗?

我不想用我的代码填写这篇文章,因为它非常庞大,但我很乐意回答有关它的任何问题,我只是发布了那部分,因为我认为这是唯一重要的部分。

4

1 回答 1

0

我认为 Show() 只是使隐藏的组件可见。假设 self.vbox1 是 midpan 的 sizer,尝试self.vbox1.Layout()手动执行以告诉它手动将所有内容移动到正确的位置。

于 2013-10-21T14:25:06.593 回答