2

wxPython でいくつかのパネルを配置しようとしています。レイアウトの大まかな表現は次のとおりです。必要なレイアウトの抽象的な例。

基本的に、サイズ変更時に左 (オレンジ) パネル (およびその内容) のサイズが変更されず、右 (青) パネルが必要に応じて拡大/拡大できるように、左右のパネルを探しています。ただし横向きのみ。

これまでのコード (いくつかのランダムなフィラー ウィジェットを含む) は以下のとおりです。私の質問はコードに従います:

import wx
import wx.lib.scrolledpanel as scrolled

class MainWindow(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent)

        #add position panel
        posPnl = IdPanel(self)
        lbl1 = wx.StaticText(posPnl, label="Position")
        lbl2 = wx.StaticText(posPnl, label="Size")
        sizeCtrl = wx.TextCtrl(posPnl)

        posPnlSzr = wx.BoxSizer(wx.VERTICAL)
        posPnlSzr.Add(lbl1, 1, wx.FIXED&wx.LEFT)
        posPnlSzr.Add(sizeCtrl, 1, wx.LEFT&wx.FIXED)
        posPnlSzr.Add(lbl2, 1, wx.FIXED&wx.LEFT)

        posPnl.SetSizer(posPnlSzr)

        posPnl2 = TimelinePanel(self)
        lbl12 = wx.StaticText(posPnl2, label="Position")
        lbl22 = wx.StaticText(posPnl2, label="Size")
        sizeCtrl2 = wx.TextCtrl(posPnl2)

        posPnlSzr2 = wx.BoxSizer(wx.VERTICAL)
        posPnlSzr2.Add(lbl12, 1, wx.GROW)
        posPnlSzr2.Add(sizeCtrl2, 1, wx.GROW)
        posPnlSzr2.Add(lbl22, 1, wx.GROW)

        posPnl2.SetSizer(posPnlSzr2)

        mainSzr = wx.BoxSizer(wx.HORIZONTAL)
        mainSzr.Add(posPnl, 1, wx.FIXED)
        #mainSzr.AddSpacer(10)
        mainSzr.Add(posPnl2, 1, wx.GROW)

        self.SetSizerAndFit(mainSzr)
        self.Show()

class IdPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, -1, size = (400, 200))
        self.SetBackgroundColour((255, 0, 255))

class TimelinePanel(scrolled.ScrolledPanel):
    def __init__(self, parent):
        scrolled.ScrolledPanel.__init__(self, parent, -1, size = (300, 200))
        self.SetBackgroundColour((255, 0, 0))


app = wx.App(False)
frame = MainWindow(None, "Trading Client")
app.MainLoop()

私の質問:

  1. サイザーを使用して、右側のパネルのみが水平方向にのみ拡張されるようにするにはどうすればよいですか? 現在、左側のパネルのコンテンツは固定されたままですが、パネル自体はまだ拡張されています。
  2. 最初の質問を少し変更して、右側のみが水平方向に拡大し、両方のパネルが垂直方向に拡大するようにしたい場合、どうすればよいですか?
  3. 右側のパネルの x 軸に wx.lib.scrolledpanel を使用していますが、ウィンドウを水平方向に縮小して表示することができないようです。これに役立つミックス/最大パネルサイズなどの設定があるかどうかはわかりませんか?
4

1 に答える 1

6

1:proportionメインのサイザーに 2 つのパネルを追加するときに、sizer.Add で引数を使用します。

mainSzr.Add(posPnl, 0)
mainSzr.Add(posPnl2, 1)

比率は、そのパネルが他のすべての兄弟サイザーに比例してサイズ変更される方法に影響します (0 はサイズ変更しないことを意味します)。フラグwx.FIXEDとフラグは、wx.GROWここでの目標とは無関係です。

http://wxpython.org/docs/api/wx.Sizer-class.html#Add

したがって、たとえば、両方を増加させたいが、右を左の 2 倍の速さで成長させたい場合は、次のように使用できます。

mainSzr.Add(posPnl, 1)
mainSzr.Add(posPnl2, 2)

2:wx.EXPANDフラグを使用して、水平サイザー内の何かを拡大して垂直スペースを埋めます (垂直サイザー / 水平スペースの場合はその逆)。

mainSzr.Add(posPnl, 0, wx.EXPAND)
mainSzr.Add(posPnl2, 1, wx.EXPAND)

self.SetupScrolling()3: スクロール パネルが動作するために必要な、 TimelinePanel の__init__関数に a を追加します。次に、パネルのコンテンツがスクロールバーを必要とするほど大きくなると、追加されます。

于 2013-02-24T02:02:57.230 に答える