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 イベントにフックできます。EVT_SIZE イベントは、最大化解除プロセス中に少なくとも 1 回送信されるからです。」

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 に答える