2016-12-05 403 views
0

我想让我的程序的top_panel只进入全屏,我希望有一个按钮可以做到这一点,我面临的问题是我不知道如何让面板进入全屏自己而不用强制全帧进入全屏使用ShowFullscreen(真)wxpython面板全屏?

我希望你能帮助我

class top_panel(wx.Panel): 

def __init__(self, parent): 
    wx.Panel.__init__(self, parent=parent, size=(400,175)) 
    self.SetBackgroundColour('BLACK') 
    self.ofullscreen = wx.Button(self, -1, "Fullscreen", (10,30)) 
    self.ofullscreen.Bind(wx.EVT_BUTTON, self.onfullscreen, self.ofullscreen) 
    self.gbs = wx.GridBagSizer(2,2) 
    self.Bind(wx.EVT_KEY_DOWN, self.onKey) 
    wx.Frame.ShowFullScreen(True) 
#---------------------------------------------------------------------- 
def onKey(self, event): 
    """ 
    Check for ESC key press and exit is ESC is pressed 
    """ 
    key_code = event.GetKeyCode() 
    if key_code == wx.WXK_ESCAPE: 
     self.GetParent().Close() 
    else: 
     event.Skip() 

def onfullscreen(self): 
    print "hola" 
    #self.fullscreen????? 
+0

你有一个主框架,然后在某些事件你显示面板,并希望它成为一个全屏?你尝试过吗?你有什么问题?也许这个功能只适用于TLW?请通过运行脚本发布回溯。 – Igor

回答

0

你不能表现出一个子窗口,如面板,全屏。只有顶级框架可以全屏显示,但当然,这应该不是问题,因为绝对没有任何东西阻止您创建仅包含面板的框架,然后显示此框架的全屏完全等同于显示面板全屏。

+0

谢谢你,我会先试试这个,并会回复它如何去掉 – Complexity

+0

我已经试过了,它没有工作,因为我想我决定创建一个全新的.py包含一个新的框架等,只执行一次可识别的文件扩展名仅适用于视频 – Complexity

0

我已经在我的博客上写过关于此主题的内容。这里是一个例子:

import wx 


class MyPanel(wx.Panel): 
    """""" 

    def __init__(self, parent): 
     """Constructor""" 
     wx.Panel.__init__(self, parent) 

     self.Bind(wx.EVT_KEY_DOWN, self.onKey) 

    def onKey(self, event): 
     """ 
     Check for ESC key press and exit is ESC is pressed 
     """ 
     key_code = event.GetKeyCode() 
     if key_code == wx.WXK_ESCAPE: 
      self.GetParent().Close() 
     else: 
      event.Skip() 


class MyFrame(wx.Frame): 
    """""" 

    def __init__(self): 
     """Constructor""" 
     wx.Frame.__init__(self, None, title="Test FullScreen") 
     panel = MyPanel(self) 
     self.ShowFullScreen(True) 


if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MyFrame() 
    app.MainLoop() 

我注意到,这段代码似乎不适用于Mac。

+0

我确实碰巧看到了您的帖子,但问题是我只想让一个单一面板全屏显示,因为我的框架中有3个,而我只希望它在执行一次后,双击左键点击 – Complexity

+1

然后,我会将双击事件绑定到该面板。当有人双击它时,您可以全屏打开一个新框架。它不会是同一个面板,但看起来会是这样。 –

+0

是的,我最终创建了一个新的.py文件,并创建了一个新的框架和面板,因此一旦选择了一个视频文件,新的.py文件就会打开,并且在新面板中,我已经设置了一个函数,如果它是全屏显示,并将其设置为相应的设置。只是我在面板上进行了一个绑定,它在双击左键单击,然后将其链接到我在新帧中创建的parent.onFullScreen函数 – Complexity

0

使用Mike Driscoll的示例代码,当使用多个面板时,有一种伪造面板全屏的方法。目前这有点破绽,但它应该给你它的要点。使用SetMinSizeSendSizeEvent
单击彩色面板进行对焦,然后按F1,F2或F3切换面板进出“全屏”或恢复到相同尺寸。

import wx 

class MyPanel(wx.Panel): 
    """""" 

    def __init__(self, parent): 
     """Constructor""" 
     wx.Panel.__init__(self, parent) 

     self.Bind(wx.EVT_KEY_DOWN, self.onKey) 

    def onKey(self, event): 
     """ 
     Check for ESC key press and exit is ESC is pressed 
     F1 panel 1 is full screen 
     F2 panel 2 is full screen 
     F3 panels revert to equal sizes 
     """ 
     key_code = event.GetKeyCode() 
     parent = self.GetParent() 
     width, height = wx.GetDisplaySize() 
     if key_code == wx.WXK_ESCAPE: 
      self.GetParent().Close() 
     elif key_code == wx.WXK_F1: 
      parent.panel1.SetMinSize((1,1)) 
      parent.panel2.SetMinSize((width,height)) 
      parent.SendSizeEvent() 
      parent.Layout() 
      parent.Fit() 
     elif key_code == wx.WXK_F2: 
      parent.panel2.SetMinSize((1,1)) 
      parent.panel1.SetMinSize((width,height)) 
      parent.SendSizeEvent() 
      parent.Layout() 
      parent.Fit() 
     elif key_code == wx.WXK_F3: 
      parent.panel2.SetMinSize((120,70)) 
      parent.panel1.SetMinSize((120,70)) 
      parent.SendSizeEvent() 
      parent.Layout() 
      parent.Fit() 
     else: 
      event.Skip() 

class MyFrame(wx.Frame): 
    """""" 

    def __init__(self): 
     """Constructor""" 
     wx.Frame.__init__(self, None, title="Test FullScreen") 
     self.panel1 = MyPanel(self) 
     self.panel2 = MyPanel(self) 
     self.panel1.SetBackgroundColour(wx.GREEN) 
     self.panel2.SetBackgroundColour(wx.BLUE) 
     vbox = wx.BoxSizer(wx.VERTICAL) 
     vbox.Add(self.panel1) 
     vbox.Add(self.panel2) 
     self.SetSizer(vbox) 
     self.Show() 

if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MyFrame() 
    app.MainLoop() 

注意:你的情况,你会不会想真正进入全屏模式,因为你可能需要仍然可以访问一些控制按钮,所以只是扣除您从全屏幕大小所需要的量。