2016-12-05 2 views
0

Я пытаюсь сделать мой top_panel моей программы включенным только в полноэкранный режим, я надеюсь, что у вас будет кнопка, которая будет делать это, проблема, с которой я столкнулся, - я не знаю, как заставить панель войти в полноэкранный режим без принуждения весь кадр, чтобы перейти в полноэкранный режим, используя ShowFullscreen (истинный)wxpython panel fullscreen?

я надеюсь, что вы можете мне помочь

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? пожалуйста, отправьте backtrace из запуска вашего скрипта. – 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

Используя пример кода Майка Дрисколла, есть способ подделать полный экран панели, если используется более одной панели. В данный момент это немного взломать, но это должно дать вам суть.
Использовать SetMinSize и SendSizeEvent.
Нажмите на цветную панель для фокусировки, а затем нажмите 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() 

Примечание: для вашего случая вы не хотите, чтобы действительно перейти на полный экран, как вы, вероятно, нужно еще получить доступ к некоторым кнопки управления, так что просто вычесть сумму, которую нужно от полного размера экрана.