我有一个带有一个收音机框的框架可以全屏切换。当用户单击“最大化”按钮时,框架将全屏显示。但是,如果我使用最大化按钮,则无线电盒将无法恢复窗口。如果我使用收音机框全屏,它将能够恢复窗口。
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
答案 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;因为看起来只有在最大化已经完成后才会触发事件,所以会产生影响。