0

パネルのセットにスプリッターウィンドウを埋め込もうとしていますが、以下を実行すると、上部のスプリッターウィンドウが2番目のスプリッターウィンドウの上部パネルに重なっているように、フラッシュが表示されます。フレームとパネルの子を追跡しようとしましたが、誰が一番上にいるのかわかりません。誰かがこれを整理して、レイアウトが変更され、スプリッターに追加された2番目のパネルによってトップパネルが明らかにマスクされている理由を説明できますか?ありがとうDavid

#!/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()
4

1 に答える 1

2

Windows で実行すると、次のように表示されます。

ここに画像の説明を入力

どのパネルがめちゃくちゃですか?とにかく、どのウィジェットがどこにあるのかを知る最も簡単な方法は、ウィジェット検査ツールを使用することです。ここでそれについて読むことができます。使い方は簡単で、サイザーを表示してレイアウトの問題を把握するのに役立ちます。

于 2012-07-06T14:22:28.203 に答える