【问题标题】:wxPython Multiple Splitter WindowswxPython 多分割器窗口
【发布时间】:2012-07-06 17:34:02
【问题描述】:

我正在尝试在一组面板中嵌入拆分器窗口,但是当我运行以下命令时,我看到一个闪烁,好像顶部拆分器窗口覆盖了第二个拆分器窗口的顶部面板。我试图跟踪框架和面板的孩子,但无法弄清楚谁在上面。谁能帮我解决这个问题并解释为什么布局发生变化并且顶部面板明显被添加到拆分器的第二个面板掩盖了? 谢谢 大卫

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

【问题讨论】:

    标签: wxpython panels splitter


    【解决方案1】:

    我在 Windows 上运行它时看到以下内容:

    哪个面板搞砸了?无论如何,判断哪个小部件在哪里的最简单方法是使用小部件检查工具。你可以阅读它here。它易于使用,甚至可以让您的尺寸调整器可见,以帮助您找出布局问题。

    【讨论】:

    • 谢谢 Mike,我希望底部的黄绿色和石板蓝面板的比例相同。不要让左右面板覆盖黄绿色面板。看起来我的 mainsplitter 没有正确添加 HSplitter 和 VSplitter 实例。我会看一下小部件检查器,看看是否有帮助。你看到程序启动时绿闪的问题了吗?
    • 好吧,我查看了小部件检查器,一切似乎都已正确放置。我怀疑问题出在其中一个 boxsizers 在绘制框架时调整 splitterwindow 的大小。
    • sizer.SetSashGravity(0.5) 修复了比例显示问题,但程序拳头启动时仍然存在布局屏幕显示问题。
    • 我没有看到闪光灯。您可以尝试使用 wx.CallAfter 并将 self.Layout 命令传递给它。我以前发现这很有帮助。
    • 再次感谢 Mike 关于 wx.CallAfter 的提示以及您的所有帮助。原来闪存是我的 IDE 中的神器。重新启动 IDE 后,闪存消失了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 2012-06-12
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多