wxpython EVT_最大化恢复

wxpython EVT_最大化恢复,wxpython,restore,maximize-window,Wxpython,Restore,Maximize Window,我想处理最大化事件。当最大化时,它可以正常工作,但是当我想要恢复时,它甚至没有设置EVT\u MAXIMIZE,即使文档中说在最大化和恢复时调用此事件。我发现这应该是文档中的一个错误,但我仍然不知道在恢复最大化时设置了哪个事件 这是我的.Bind方法,。在MyFrame\uuuu init\uuuu: self.Bind(wx.EVT_MAXIMIZE, self.onMaximize, self) 这是onmax函数: def onMaximize(self, event): pr

我想处理
最大化
事件。当最大化时,它可以正常工作,但是当我想要恢复时,它甚至没有设置
EVT\u MAXIMIZE
,即使文档中说在最大化和恢复时调用此事件。我发现这应该是文档中的一个错误,但我仍然不知道在恢复最大化时设置了哪个事件

这是我的.Bind方法,。在
MyFrame\uuuu init\uuuu:

self.Bind(wx.EVT_MAXIMIZE, self.onMaximize, self)
这是onmax函数:

def onMaximize(self, event):

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

任何关于如何处理最大化还原事件的想法。

答案就在您提供的列表中

“要了解何时恢复帧,您可以 钩住EVT_大小事件,因为它将在执行期间至少发送一次 联合国最大化进程。”


我最终使用绑定到wx.EVT_SIZE的内部on_resize函数解决了这个问题:

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\u MAXIMIZE。

嗨,Jerry\u Y。我看到了答案,但不确定我是否理解它。所以我完全忽略了EVT_?。我还可以使用EVT_绘制来完成此操作吗?EVT_大小和EVT_最大化可以由事件EVT_绘制来替换,该事件是在重新绘制窗口时生成的。因此处理函数保持不变,只需将事件更改为EVT_PAINT。这种解决方案有问题吗?我应该对此有任何疑问吗?@user3176500是的,你可以使用EVT_油漆。但我认为EVT_大小更好,因为它缩小了大小调整操作的范围。如果我使用EVT_大小并具有问题中所述的处理功能,那么调整帧大小并使其最大化会起作用,但从最大化窗口恢复不会起作用。调用该函数,但self.fig_面板.fig.tight_布局(w_pad=2.0)未正确执行。为什么呢?有了EVT_油漆,它就可以正常工作了。你说执行不当是什么意思?
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