2014-02-18 5 views
2

Я хочу обработать событие MAXIMIZE. Когда его максимизация работает, это нормально, но когда я хочу восстановить его, он даже не устанавливает EVT_MAXIMIZE, хотя в документации говорится, что это событие вызывается при максимизации и восстановлении. Я обнаружил, что это ошибка в документации, вот link, но я до сих пор не знаю, какое событие задано при восстановлении максимизации.wxpython 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() 

Любые идеи, как обрабатывать максимизация восстановить события.

ответ

1

Ответ здесь есть в link, который вы предоставляете.

«Для того, чтобы выяснить, когда кадр восстанавливается вы можете крючок в случае 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() 
+0

Hi Jerry_Y. Я видел ответ, но не уверен, что понимаю. Поэтому я полностью опускаю EVT_MAXIMIZE?. Могу ли я использовать EVT_PAINT для этого? – user3176500

+0

EVT_SIZE и EVT_MAXIMIZE могут быть заменены событием EVT_PAINT, которое создается при перерисовании окна. Таким образом, функция обработки остается неизменной, только событие должно быть изменено на EVT_PAINT. Есть ли проблема для такого решения? Должны ли я сомневаться в этом? – user3176500

+0

@ user3176500 Да, вы можете использовать EVT_PAINT. Но я думаю, что EVT_SIZE лучше, потому что он сужается, чтобы изменить размер операции. –

0

я, наконец, решить его с помощью wx.CallAfter внутри моей функции on_resize обязан wx.EVT_SIZE:

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 

Это прекрасно работает на WxPython Phoenix 3.0.3 на Gtk. Он реагирует на максимизацию/восстановление без привязки функции к wx.EVT_MAXIMIZE.

 Смежные вопросы

  • Нет связанных вопросов^_^