2012-07-06 41 views
0

我试图在面板组中嵌入分离器窗口,但是当我运行下面的命令时,我看到一个闪存,就好像顶部分离器窗口覆盖第二个分离器窗口的顶部面板。我试图跟踪框架和面板的孩子,但无法弄清楚谁是顶级的。任何人都可以帮我解决这个问题,并解释为什么布局会改变,顶部面板被添加到分离器中的第二个面板显然掩盖了? 感谢 大卫wxPython多路分配器窗口

#!/usr/bin/env python2.6 
# encoding: ISO-8859-1 
""" 
Basic Splitter Panel Skeleton.py 
""" 

import sys 
reload(sys) 
sys.setdefaultencoding("utf-8") 
import os 
import time 
import wx 


def timenow(): 
    return time.time() 

######################################################################## 

class VSplitterPanel(wx.Panel): 
    """ Constructs a Vertical splitter window with left and right panels""" 
    #---------------------------------------------------------------------- 
    def __init__(self, parent, color): 
     """Constructor""" 
     wx.Panel.__init__(self, parent) 
     self.SetBackgroundColour(color) 
     splitter = wx.SplitterWindow(self, style = wx.SP_3D| wx.SP_LIVE_UPDATE) 
     leftPanel = wx.Panel(splitter) 
     rightPanel = wx.Panel(splitter) 
     leftPanel.SetBackgroundColour('SEA GREEN') 
     rightPanel.SetBackgroundColour('STEEL BLUE') 

     splitter.SplitVertically(leftPanel, rightPanel) 
     PanelSizer=wx.BoxSizer(wx.VERTICAL) 
     PanelSizer.Add(splitter, 1, wx.EXPAND | wx.ALL) 
     self.SetSizer(PanelSizer) 
######################################################################## 

class HSplitterPanel(wx.Panel): 
    """ Constructs a Horizontal splitter window with top and bottom panels""" 
    #---------------------------------------------------------------------- 
    def __init__(self, parent, color): 
     """Constructor""" 
     wx.Panel.__init__(self, parent) 
     self.SetBackgroundColour(color) 
     splitter = wx.SplitterWindow(self, style = wx.SP_3D| wx.SP_LIVE_UPDATE) 
     TopPanel = wx.Panel(splitter) 
     BottomPanel = wx.Panel(splitter) 
     TopPanel.SetBackgroundColour('YELLOW GREEN') 
     BottomPanel.SetBackgroundColour('SLATE BLUE') 


     splitter.SplitHorizontally(TopPanel, BottomPanel) 
     PanelSizer=wx.BoxSizer(wx.VERTICAL) 
     PanelSizer.Add(splitter, 1, wx.EXPAND | wx.ALL) 
     self.SetSizer(PanelSizer) 
######################################################################## 

class MainFrame(wx.Frame): 
    """Constructor""" 
    #---------------------------------------------------------------------- 
    def __init__(self, parent, id): 
     wx.Frame.__init__(self, None, title="Basic Splitter Panel Skeleton",size=(800,600)) 
     t0=timenow() 
     self.sb=self.CreateStatusBar() 
     ################################################################ 
     # Define mainsplitter as child of Frame and add H and VSplitterPanel as children 
     mainsplitter = wx.SplitterWindow(self, style = wx.SP_3D| wx.SP_LIVE_UPDATE) 
     #splitterpanel1 = HSplitterPanel(mainsplitter,'LIGHT BLUE') 
     splitterpanel1 = HSplitterPanel(mainsplitter,'LIGHT BLUE') 
     splitterpanel2 = VSplitterPanel(mainsplitter,'LIGHT BLUE') 
     #print self.GetChildren(),'\n' 
     #print splitterpanel1.leftPanel.GetChildren() 
     mainsplitter.SplitHorizontally(splitterpanel2, splitterpanel1) 
     MainSizer = wx.BoxSizer(wx.VERTICAL) 
     MainSizer.Add(mainsplitter, 1, wx.EXPAND | wx.ALL) 
     self.SetSizer(MainSizer) 
     ################################################################# 
     self.sb.SetStatusText('Initialized in %6.4f secs'%(timenow()-t0)) 
     self.Refresh() 
     self.Show() 

#---------------------------------------------------------------------- 


if __name__ == '__main__': 
    app = wx.App() 
    MainFrame(None, -1) 
    app.MainLoop() 

回答

0

我看到下面的,当我在Windows上运行它:

enter image description here

哪个面板搞砸?无论如何,告诉哪个小部件是在哪里使用Widget Inspection Tool最简单的方法。你可以阅读关于它here。它很容易使用,它甚至可以让你的sizer可见,以帮助你找出布局问题。

+0

感谢迈克,我预计底部的黄色绿色和石板蓝色面板应该是等比例的。不要让左侧和右侧面板覆盖黄色绿色面板。看起来我的主分离器没有正确添加HSplitter和VSplitter实例。我会看看小部件检查器,看看是否有帮助。程序启动时你看到了绿色闪光的问题吗? – user1032355 2012-07-06 22:45:04

+0

那么我看着小部件检查器,一切似乎都正确放置。我怀疑这个问题出现在绘制框架时调整splitterwindow大小的boxsizer中。 – user1032355 2012-07-07 03:50:23

+0

sizer.SetSashGravity(0.5)修正了比例显示问题,但程序启动时仍存在布局屏幕显示问题。 – user1032355 2012-07-08 04:40:44