我有一个框架和一个单选框来切换全屏。当用户单击最大化按钮时,框架将全屏显示。但是,如果我使用最大化按钮,则单选框将无法恢复窗口。如果我使用单选框全屏显示,它将能够恢复窗口。
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),单选按钮就会起作用。问题是,窗口会先恢复,然后才会全屏显示,这很难看。有什么解决方案吗?另外,如果可能的话,请解释为什么会发生这种情况。
在32位Window 7专业版上运行Python2.7.9、WxPython 3.0.2
发布于 2015-07-20 00:24:19
似乎ShowFullScreen没有设置某些标志,因此事情变得不同步。
如果我只是使用最大化/恢复,那么对我来说一切都很好,也就是对你的代码做如下修改。
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行的注释。
你正在处理一个“最大化”的事件,大多数时候你希望默认行为也会发生,这就是为什么我在OnMaximize处理程序中添加了Event.Skip -在这种情况下,它没有什么不同,因为它看起来只有在最大化已经完成之后才会触发。
https://stackoverflow.com/questions/31489606
复制相似问题