2016-12-05 83 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() 

注意:你的情況,你會不會想真正進入全屏模式,因爲你可能需要仍然可以訪問一些控制按鈕,所以只是扣除您從全屏幕大小所需要的量。