2013-12-06 3 views
0

Я хотел бы знать, как сохранить дочерние кадры поверх родительского кадра, не будучи модальным. Я попытался использовать wx.FRAME_FLOAT_ON_PARENT, но все, что я получаю, это серый кадр поверх моего основного фрейма. Я помещаю это в свой класс или когда я создаю экземпляр, результат тот же.Как сохранить дочерние рамки поверх родителя

enter image description here

bob = DpxBob(self, title = 'DIO Info', btn = CLOSE|UPDATE, device = self.device, 
     size=(730, 635), tabs=tabs, style=wx.FRAME_FLOAT_ON_PARENT) 


class DpxFrame(wx.Frame): 
    def __init__(self, parent, title, btn, device, size, tabs=None): 
     super(DpxFrame, self).__init__(parent, title=title, size=size, 
        style=wx.FRAME_FLOAT_ON_PARENT) 

Кроме того, он должен быть кросс-платформенный. Любая помощь будет оценена.

P.S .: Достижение прогресса, но я все еще новичок в мире ООП.

ответ

0

Часть проблемы заключается в том, что вам нужно также добавить wx.DEFAULT_FRAME_STYLE в список стилей вашего дочернего кадра. Вот пример, который работает для меня:

import wx 

######################################################################## 
class GenericPanel(wx.Panel): 
    """""" 

    #---------------------------------------------------------------------- 
    def __init__(self, parent, showChild=False): 
     """Constructor""" 
     wx.Panel.__init__(self, parent) 

     if showChild: 
      btn = wx.Button(self, label="Show Child") 
      btn.Bind(wx.EVT_BUTTON, self.onShowChild) 

    #---------------------------------------------------------------------- 
    def onShowChild(self, event): 
     """""" 
     frame = ChildFrame(self.GetParent()) 
     frame.Show() 

######################################################################## 
class ChildFrame(wx.Frame): 
    """""" 

    #---------------------------------------------------------------------- 
    def __init__(self, parent): 
     """Constructor""" 
     wx.Frame.__init__(self, parent, title="Child frame", 
          style=wx.FRAME_FLOAT_ON_PARENT|wx.DEFAULT_FRAME_STYLE) 
     panel = GenericPanel(self) 
     self.Show() 

######################################################################## 
class MainFrame(wx.Frame): 
    """""" 

    #---------------------------------------------------------------------- 
    def __init__(self): 
     """Constructor""" 
     wx.Frame.__init__(self, None, title="Main Frame", size=(800,600)) 
     panel = GenericPanel(self, showChild=True) 
     self.Show() 

#---------------------------------------------------------------------- 
if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MainFrame() 
    app.MainLoop() 

Теперь если вы хотите сохранить кадр в пределах основной рамы, то вы, вероятно, хотите посмотреть на MDI кадрах wx.aui (еще лучше , проверьте общий AUI в wx.lib.agw.aui). В демонстрации wxPython есть примеры каждого из них.

+0

Спасибо, Майк. Увидев ваш ответ, я задаюсь вопросом, правильно ли я написал свой класс. Зачем использовать класс для GenericPanel и один для ChildFrame? Это «лучший код», чтобы сделать это? – BaldDude

+0

Я просто хотел повторно использовать панель в обоих кадрах. Иногда это полезно, иногда нет. –

+0

Отлично! Это сработало. Еще раз спасибо. – BaldDude

Смежные вопросы