面板的设置大小不会更新其单击区域WX

问题描述 投票:0回答:1

我有一些看起来像这样的代码:

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()之前也是如此。

wxpython wxwidgets
1个回答
0
投票

我解决了这个问题。我以前使用的是嵌套面板,因为我以前的UI设计主要是使用HTML。设置GridBagSizer后,此操作将按预期工作。我以前一直在避免这种情况,因为当我期望它们扩展时,没有一个元素在扩展。 sizer.AddGrowableRow()做到了。

© www.soinside.com 2019 - 2024. All rights reserved.