2015-07-18 3 views
0

У меня есть рамка с одним радио-ящиком для переключения полного экрана. Рамка должна перейти в полноэкранный режим, когда пользователь нажимает кнопку «Максимизировать». Однако, если я использую кнопку максимизации, радиокассет не сможет восстановить окно. Если я использую радиоканал для полноэкранного просмотра, он сможет восстановить окно.wx.EVT_MAXIMIZE предотвратили выход из полноэкранного режима

import wx 


class FSWindow(wx.Frame): 
    def __init__(self, *args, **kwargs): 
    wx.Frame.__init__(self, *args, **kwargs) 
    self.SetSize((800, 600)) 
    self.RadioFullScreen = wx.RadioBox(self, -1, "Display", choices=["Windowed","Full Screen"]) 
    self.RadioFullScreen.Bind(wx.EVT_RADIOBOX, self.FS) 
    self.Bind(wx.EVT_MAXIMIZE, self.OnMaximize) 
    self.Sizer = None 
    self.Show() 

def FS(self, Event): 
    if self.RadioFullScreen.GetSelection(): 
    self.ShowFullScreen(True) 
    else: 
    self.ShowFullScreen(False) 

def OnMaximize(self, Event): 
    self.ShowFullScreen(True) # <-- Add self.Restore() or self.Maximize(False) here 
    self.RadioFullScreen.SetSelection(1) 


App = wx.App() 
frame =FSWindow(None, -1, "MainWindow") 
App.MainLoop() 

Однако, если добавить self.Restore() или self.Maximize (False) перед self.ShowFullScreen (True), как я прокомментировал исходный код выше, кнопки радио будет работать. Проблема в том, что окно будет восстановлено первым, прежде чем переходить в полноэкранный режим, что является уродливым. Любое решение для этого? Также объясните, почему это произошло, если это возможно.

Запуск Python 2.7.9, 3.0.2 WxPython на Window 7 Professional 32-битном

ответ

0

Кажется, что ShowFullScreen не устанавливает какой-то флаг, так что все рассинхронизации.

Если я просто использую Maximize/Restore, все будет хорошо работать для меня, то есть после внесения изменений в ваш код.

def FS(self, Event): 
    if self.RadioFullScreen.GetSelection(): 
     self.Maximize() 
     #self.ShowFullScreen(True, style=wx.FULLSCREEN_ALL) 
     print('done fs true') 
    else: 
     #self.ShowFullScreen(False, style=wx.FULLSCREEN_ALL) 
     self.Restore() 
     print('done fs false') 


def OnMaximize(self, Event): 
    Event.Skip() 
    self.RadioFullScreen.SetSelection(1) 
    print('done max') 

Если вы не хотите, чтобы панель меню и т.д., когда экран максимизируется затем раскомментировать ShowFullScreen линии.

Вы обрабатываете событие «Максимизировать», большую часть времени вы хотите, чтобы поведение по умолчанию также происходило, поэтому я добавил Event.Skip в обработчик OnMaximize - в этом случае это не имеет никакого значения, поскольку оно похоже, что событие запускается только после того, как максимизация уже выполнена.

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