wx.EVT_MAXIMIZE阻止退出全屏

时间:2015-07-18 09:12:09

标签: python wxpython

我有一个带有一个收音机框的框架可以全屏切换。当用户单击“最大化”按钮时,框架将全屏显示。但是,如果我使用最大化按钮,则无线电盒将无法恢复窗口。如果我使用收音机框全屏,它将能够恢复窗口。

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.ShowFullScreen(True)之前添加self.Restore()或self.Maximize(False),就像我对上面的源代码进行了评论一样,单选按钮就可以了。问题是,在全屏显示丑陋之前,窗口将首先恢复。对此有何解决方案?如果可能的话,请解释为什么会发生这种情况。

在Window 7 Professional 32位上运行Python 2.7.9,WxPython 3.0.2

1 个答案:

答案 0 :(得分: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线。

您正在处理事件&#34;最大化&#34;,大多数情况下您也希望发生默认行为,这就是为什么我将Event.Skip添加到OnMaximize处理程序 - 在这种情况下它没有&#39;因为看起来只有在最大化已经完成后才会触发事件,所以会产生影响。