我有一些看起来像这样的代码:
class Test():
def __init__(self, parent_panel):
sizer = wx.BoxSizer(wx.VERTICAL)
vbox = wx.Panel(parent_panel)
vbox.SetSizer(sizer)
self.panel = wx.Panel(vbox)
sizer.Add(self.panel)
self.panel.Bind(wx.EVT_SIZE, self.size)
self.panel.Bind(wx.EVT_LEFT_DOWN, self.click)
def size(self, event):
width = self.panel.GetSize().GetWidth()
self.panel.SetSize((width, width))
def click(self, event):
print("Click received!")
面板的默认大小是(50,200)。因此,当我将其大小调整为(200,200)时,我希望整个面板都会更改大小。仅当我单击面板的原始部分时,才会收到click事件。有什么方法可以使整个面板接收到click事件?
该面板还与EVT_PAINT一起使用,因此我必须调用dc.DestroyClippingRegion()
才能绘制整个面板。在检查器中,轮廓始终围绕整个面板,即使在调用dc.DestroyClippingRegion()
之前也是如此。
我解决了这个问题。我以前使用的是嵌套面板,因为我以前的UI设计主要是使用HTML。设置GridBagSizer后,此操作将按预期工作。我以前一直在避免这种情况,因为当我期望它们扩展时,没有一个元素在扩展。 sizer.AddGrowableRow()
做到了。