【问题标题】:wx.Panel in a wx.Panelwx.Panel 中的 wx.Panel
【发布时间】:2014-02-20 04:07:34
【问题描述】:

当我将wx.Panel 嵌入另一个wx.Panel(这里ChildPanel 嵌入MyPanel)时,默认情况下,此 ChildPanel 不使用父级的 full 大小。为什么?

ChildPanel 应该使用MyPanel 的全部空间有什么技巧吗? 没有BoxSizer 可以吗?

import wx

class MyPanel(wx.Panel):
   def __init__(self, *args, **kwargs):
        wx.Panel.__init__(self, *args, **kwargs)
        self.SetBackgroundColour('#00f8f8')

        # ChildPanel
        self.ChildPanel = wx.Panel(self)
        self.ChildPanel.SetBackgroundColour('#000000')

class DrawFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        MyPanel(self)
        self.Show()        

app = wx.App(False)
F = DrawFrame(None, title="Test", size=(500,500))
app.MainLoop() 

【问题讨论】:

  • 你需要把它放在一个带有 wx.GROW 或 wx.EXPAND 作为其标志之一的sizer中......或者如果它不能调整大小,则从 kwargs 手动设置大小..mypanel 可能也没有填充框架,因为它没有添加到 sizer 并且您没有将 size 参数传递给构造函数......这个问题真的让我感到困惑.. 如果你希望面板填充框架或当前面板,为什么不设置尺寸或尺寸器?
  • 没有sizer 就不可能吗?我认为子面板默认情况下可以填充框架或面板,而不使用大小。
  • 例如:默认情况下,wx.Panel 填充父wx.Frame 而不使用sizer。
  • 不,它不...不是通常...它们可能都具有相同的默认大小(因此,如果您不传递大小参数,它们将是相同的大小)或者如果您冒泡大小参数到面板...你为什么不直接使用尺寸器或手动设置尺寸?
  • 确实如此:试试这里的代码,创建MyPanel 时没有size 参数。然而MyPanel 填充了父DrawFrame 的100%,即使没有sizer,对吧?

标签: python wxpython panel wxwidgets


【解决方案1】:

wxFrame 是一种特殊情况,是唯一一个调整其only子级以完全填满其客户区的窗口。包括wxPanel 在内的其他窗口不这样做,因此您需要使用大小调整器——或者在wxEVT_SIZE 处理程序中手动定位子面板。

当然,如果您仔细考虑一下,这是有道理的:虽然 wxPanel 完全覆盖 wxFrame 是很常见的,但很少有 wxPanelwxWindow 作为唯一另一个wxPanel 的孩子,因为这样做根本没有任何意义,你只是在白白浪费一个窗口(而且窗口是一个相对较重的资源,所以你不应该这样做)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2011-01-22
    • 2013-08-13
    • 2017-08-11
    • 2010-11-16
    相关资源
    最近更新 更多