2

我想处理MAXIMIZE事件。最大化时它工作得很好,但是当我想恢复它时甚至没有设置EVT_MAXIMIZE,即使文档说在最大化和恢复时调用了这个事件。我发现这应该是文档中的错误,这里是链接,但是我仍然不知道恢复最大化时设置了哪个事件。

这是我的 .Bind 方法。这是在MyFrame __init__:

self.Bind(wx.EVT_MAXIMIZE, self.onMaximize, self)

这是 onMaximize 函数:

def onMaximize(self, event):

    print "Maximized"                            # Just for checking
    self.fig_panel.fig.tight_layout(w_pad=2.0)
    event.Skip()

任何想法如何处理最大化恢复事件。

4

2 回答 2

1

答案就在您提供 的链接中。

“要了解帧何时恢复,您可以挂钩 EVT_SIZE 事件,因为它将在非最大化过程中至少发送一次。”

self.Bind(wx.EVT_SIZE, self.OnResizeWindow)

def OnResizeWindow(self, event):
    if self.IsMaximized():
            self.maximized = 1
    else:
            self.maximized = 0
    event.Skip() 
于 2014-02-18T08:31:35.493 回答
0

我终于在绑定到wx.EVT_SIZE的 on_resize 函数中使用wx.CallAfter解决了这个问题:

def on_resize(self, evt):
    wx.CallAfter(self.fig_panel.fig.tight_layout, w_pad=2.0)
    evt.Skip()

如果在调整窗口大小时要调用多个函数,则可以执行以下操作:

def on_resize(self, evt):
    wx.CallAfter(self.on_resize_after)
    evt.Skip()

def on_resize_after(self):
    self.fig_panel.fig.tight_layout(w_pad=2.0)
    # add more layout adjustment functions here

这在 Gtk 上的 wxPython Phoenix 3.0.3 上完美运行。它响应最大化/恢复,而不必将函数绑定到 wx.EVT_MAXIMIZE。

于 2016-09-12T15:01:26.737 回答