2016-08-17 4 views
0

で静的なテキストの折り返しサブパネルは中央にあります。静的テキスト要素は、サブパネルの上部に位置し、ウィンドウサイズを変更する場合には、適切にラップする必要があります。パネルのパディングと、私はこの</p> <p><a href="https://i.stack.imgur.com/NLjCQ.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/NLjCQ.png" alt="enter image description here"></a></p> <p>だけで、別の左と右の空白のパディングを持つフレーム内のメインパネルがあるようなレイアウトに何かを持っていると思いwxPythonの

import wx 

class MyPanel(wx.Panel): 
    def __init__(self, parent): 
     super(MyPanel, self).__init__(parent) 

     self.hsizer = wx.BoxSizer() 
     self.hsizer.AddStretchSpacer() 

     self.panel = wx.Panel(self) 
     self.panel.SetSize((350, -1)) 

     self.vsizer = wx.BoxSizer(wx.VERTICAL) 

     label = (
      "This is a long scentence that I want it wrapped properly, " 
      "but it doesn't seem to work at work. " 
      "I prefer if you guys can give any sugeestions or help. " 
      "For Long Long Long Long Long scentence." 
     ) 
     style = wx.ALIGN_LEFT 
     self.static_text = wx.StaticText(self, label=label, style=style) 
     self.vsizer.Add(self.static_text, flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5) 
     self.static_text.Wrap(self.panel.Size[0]) 
     self.static_text.SetAutoLayout(True) 

     self.panel.SetSizer(self.vsizer) 
     self.hsizer.Add(self.panel, flag=wx.ALIGN_CENTER) 
     self.hsizer.AddStretchSpacer() 
     self.SetSizer(self.hsizer) 
     self.Layout() 
     print self.Size 
     print self.panel.Size 

if __name__ == '__main__': 
    app = wx.App() 
    frame = wx.Frame(None) 
    sizer = wx.BoxSizer() 
    sizer.Add(MyPanel(frame), flag=wx.EXPAND) 
    frame.SetSizer(sizer) 
    frame.Show() 
    app.MainLoop() 

を以下のように記載されている

私のコードスニペットは現在、サブパネルは、中央に配置されていないだけでなく、ウィンドウのサイズを変更する場合、静的なテキスト内のテキストが正しく折り返されません。それを動作させるための提案はありますか?

答えて

3

サイザーとレイアウトを実装しようとしているとき、それは境界がどこにあるか視覚化するのは簡単です、そのようにいくつかの背景色を設定すると便利なことが多くあり、そしてどのように物事をリサイズしながら、彼らは動作します。もう1つの便利なツールはWidget Inspection Toolです。たとえば、次のように我々は、フレームのサイズが変更されたときにテキストのようなものはサイズや位置を変更しないこと、物事は本当にレイアウトのスケッチと一致しないことがわかり、そのことを実行した後

import wx 

class MyPanel(wx.Panel): 
    def __init__(self, parent): 
     super(MyPanel, self).__init__(parent) 
     self.SetBackgroundColour('pink') 

     self.hsizer = wx.BoxSizer() 
     self.hsizer.AddStretchSpacer() 

     self.panel = wx.Panel(self) 
     self.panel.SetSize((350, -1)) 
     self.panel.SetBackgroundColour('green') 

     self.vsizer = wx.BoxSizer(wx.VERTICAL) 

     label = (
      "This is a long scentence that I want it wrapped properly, " 
      "but it doesn't seem to work at work. " 
      "I prefer if you guys can give any sugeestions or help. " 
      "For Long Long Long Long Long scentence." 
     ) 
     style = wx.ALIGN_LEFT 
     self.static_text = wx.StaticText(self, label=label, style=style) 
     self.static_text.SetBackgroundColour('yellow') 

     self.vsizer.Add(self.static_text, flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5) 
     self.static_text.Wrap(self.panel.Size[0]) 
     self.static_text.SetAutoLayout(True) 

     self.panel.SetSizer(self.vsizer) 
     self.hsizer.Add(self.panel, flag=wx.ALIGN_CENTER) 
     self.hsizer.AddStretchSpacer() 
     self.SetSizer(self.hsizer) 

if __name__ == '__main__': 
    app = wx.App() 
    frame = wx.Frame(None) 
    frame.SetBackgroundColour('sky blue') 
    sizer = wx.BoxSizer() 
    sizer.Add(MyPanel(frame), flag=wx.EXPAND) 
    frame.SetSizer(sizer) 
    frame.Show() 

    import wx.lib.inspection 
    wx.lib.inspection.InspectionTool().Show() 

    app.MainLoop() 

MyPanel(ピンクの1つ)もフレームを塗りつぶすためにサイズ変更されません。また、それはあなたがテキストが緑パネル(self.panel)の子であることを意図したコードから表示されますが、それは明らかに、実行時に色を見てすることはできません。我々はそれが代わりにself.panelの親としての自己を使用して作成されていることを確認コードを再び探しています。

ので、これらの問題に対処するためのいくつかのより多くの微調整した後、私たちは、このコードで終わる:あなたはテキストをリラップする場合は

import wx 

class MyPanel(wx.Panel): 
    def __init__(self, parent): 
     super(MyPanel, self).__init__(parent) 
     self.SetBackgroundColour('pink') 

     self.hsizer = wx.BoxSizer() 
     self.hsizer.AddStretchSpacer() 

     self.panel = wx.Panel(self) 
     self.panel.SetSize((350, -1)) 
     self.panel.SetBackgroundColour('green') 

     self.vsizer = wx.BoxSizer(wx.VERTICAL) 

     label = (
      "This is a long scentence that I want it wrapped properly, " 
      "but it doesn't seem to work at work. " 
      "I prefer if you guys can give any sugeestions or help. " 
      "For Long Long Long Long Long scentence." 
     ) 
     style = wx.ALIGN_LEFT 
     self.static_text = wx.StaticText(self.panel, label=label, style=style) 
     self.static_text.SetBackgroundColour('yellow') 

     self.vsizer.Add(self.static_text, 
         flag=wx.EXPAND | wx.ALL | wx.ALIGN_TOP, border=5) 
     self.static_text.Wrap(self.panel.Size[0]) 

     self.panel.SetSizer(self.vsizer) 
     self.hsizer.Add(self.panel, 1, flag=wx.EXPAND) 
     self.hsizer.AddStretchSpacer() 
     self.SetSizer(self.hsizer) 

if __name__ == '__main__': 
    app = wx.App() 
    frame = wx.Frame(None) 
    frame.SetBackgroundColour('sky blue') 
    sizer = wx.BoxSizer() 
    sizer.Add(MyPanel(frame), 1, flag=wx.EXPAND) 
    frame.SetSizer(sizer) 
    frame.Show() 

    import wx.lib.inspection 
    wx.lib.inspection.InspectionTool().Show() 

    app.MainLoop() 

は最後に、サイズは350、あなた'LLよりも狭くなりますキャッチEVT_SIZEイベントのような何かをし、必要に応じて異なるサイズで再びラップを呼び出す必要があります。

+0

あなたの正しさをありがとうとウィジェット検査ツールのご紹介。本当に便利です! –

関連する問題

 関連する問題