【问题标题】:wx.StaticLine doesn't always displaywx.StaticLine 并不总是显示
【发布时间】:2014-07-18 16:49:27
【问题描述】:

我有一个 wx.StaticLine 分隔 wx.GridBagSizer 中的一些按钮。当窗口最初绘制时,StaticLine 不会出现。有时在长时间运行的任务之后(我移动窗口或其他东西,大概是强制重新绘制框架)它会突然出现。 这是它的样子:

窗口最初绘制时:

经过一些长时间运行的任务(或调整大小):

我使用以下命令创建行:

self.m_staticline1 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
gbSizer101.Add( self.m_staticline1, wx.GBPosition( 2, 0 ), wx.GBSpan( 1, 2 ), wx.EXPAND |wx.ALL, 5 )

init 结尾处我画的是:

self.SetSizer( gbSizer1 )
self.Layout()
gbSizer1.Fit( self )

我不确定这是否重要,但这是我启动应用程序的方式:

app = wx.App(False)
frame = FWHM_Application(None)
frame.Show()
app.MainLoop()

任何想法为什么会发生这种情况以及如何使其最初绘制?

编辑:这是一个演示该问题的工作示例程序:

import wx

class Test_Frame ( wx.Frame ):

    def __init__( self, parent ):

        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"Test GUI", pos = wx.DefaultPosition, size = wx.Size( -1,-1 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )

        # Outer container
        gbSizer_outer = wx.GridBagSizer( 4, 3 )
        gbSizer_outer.SetFlexibleDirection( wx.BOTH )
        gbSizer_outer.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )

        # Static box for analysis
        analyzeImageBox = wx.StaticBoxSizer( wx.StaticBox( self, wx.ID_ANY, u"Analyze Single Image" ), wx.VERTICAL )

        # Sizer for button/label layout within static box
        gbSizer_single = wx.GridBagSizer( 0, 0 )
        gbSizer_single.SetFlexibleDirection( wx.BOTH )
        gbSizer_single.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )

        self.analyzeImage = wx.Button( self, wx.ID_ANY, u"Analyze Image", wx.DefaultPosition, wx.Size( 170,45 ), 0 )
        gbSizer_single.Add( self.analyzeImage, wx.GBPosition( 0, 0 ), wx.GBSpan( 1, 2 ), wx.ALL, 5 )

        self.m_staticline1 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
        gbSizer_single.Add( self.m_staticline1, wx.GBPosition( 1, 0 ), wx.GBSpan( 1, 2 ), wx.EXPAND |wx.ALL, 5 )

        self.plotX = wx.Button( self, wx.ID_ANY, u"Plot X", wx.DefaultPosition, wx.Size( 70,35 ), 0 )
        gbSizer_single.Add( self.plotX, wx.GBPosition( 2, 0 ), wx.GBSpan( 1, 1 ), wx.ALL, 5 )

        self.plotY = wx.Button( self, wx.ID_ANY, u"Plot Y", wx.DefaultPosition, wx.Size( 70,35 ), 0 )
        gbSizer_single.Add( self.plotY, wx.GBPosition( 2, 1 ), wx.GBSpan( 1, 1 ), wx.ALL, 5 )


        analyzeImageBox.Add( gbSizer_single, 1, wx.EXPAND, 5 )

        gbSizer_outer.Add( analyzeImageBox, wx.GBPosition( 1, 1 ), wx.GBSpan( 1, 1 ), wx.ALL, 5 )


        self.SetSizer( gbSizer_outer )
        gbSizer_outer.Fit( self )
        self.Layout()

        self.Centre( wx.BOTH )


app = wx.App(False)
frame = Test_Frame(None)
frame.Show()
app.MainLoop()

【问题讨论】:

  • 你是如何创建这条线的?手动调用.Layout 有什么效果吗?如果没有看到代码,很难告诉你为什么你的代码会出现故障。
  • 我编辑了问题以澄清。
  • 您是否尝试调用面板的layout 函数或包含gbSizer1
  • 我尝试在gbSizer1(最外层的sizer)和gbSizer101(包含静态行的sizer)上调用Layout(),但无济于事。
  • 感谢您的建议,但没有任何效果。

标签: python wxpython wxwidgets


【解决方案1】:
self.SetSizer(gbSizer1)
gbSizer1.Fit(self)
self.Layout()

尝试最后调用布局。

【讨论】:

  • 很遗憾,这没有任何效果。
  • 我曾经在 wx.EVT_SIZE 事件中注意到这一点。调用布局不会有任何效果,但会重新调整大小。
  • 当我调整窗口大小以使带有线条的区域不可见,然后回到可见的位置时,线条就会出现。如果我在不超过该区域的情况下调整大小,它不会改变。
  • 您不应该这样做,但是您尝试了 self.Refresh() 吗?
  • 我更新了我如何启动应用程序的问题,如果有帮助的话。
猜你喜欢
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 2016-04-21
相关资源
最近更新 更多