0

私は次のようなGUIを作ろうとしています:

私の意図したレイアウトの写真

大きな正方形は wxGrid で、小さな正方形は wxButton で、すべて正常に動作します。左の図は wxSlider を意図しており、スライダーの両端の下に「遅い」と「速い」というテキスト ラベルが付いています。

そこで、次のように一連の BoxSizers をレイアウトします。

BoxSizers の階層

外から:

  • 青は垂直で、wxGrid と緑の BoxSizer を含みます
  • 緑色は水平で、オレンジ色の BoxSizer と 2 つのボタンが含まれています
  • オレンジは垂直で、wxSlider と紫の BoxSizer が含まれています
  • 紫は水平で、「slow」と「fast」という単語を含む 2 つの StaticText が含まれています。

しかし、レンダリングに最も近いのはこれです。特に、スライダーがいかに小さいか、および遅いラベルと速いラベル (スライダーの端を示すためのものです!) がごちゃごちゃしていることに注意してください。 私のくだらない結果

アラインメントとエキスパンドをいじりました。BoxSliders について不平を言っている他の人からのたくさんの投稿を読みましたが、どこにも行き着きませんでした。wx.ST_NO_AUTORESIZE について読んだとき、確かに持っていると思いましたが、何もしませんでした。ウィンドウを wxGlade で再構築したところ、特に左端に配置された静的テキストで同じ結果が得られました。

私が行っていないことの 1 つは、何かのサイズをピクセル単位で指定することです。私が実行する画面のサイズや妥当なピクセル数を誰が知っているので、どのレイアウトでもそれを必要とする必要はないようです。また、サイザーでプロポーションを正しく理解していれば、サイズをピクセルで指定する必要はありません。

しかし、私にはアイデアがありません。良い例さえ見つけていません。同様の欲求不満の静脈です。スライダーがオレンジ色のボックスサイザーの全幅を占有するようにするにはどうすればよいですか?また、スライダーの端にラベルを付けるために遅いテキストと速いテキストを取得するにはどうすればよいですか?

私が実行しているものは、レイアウトの必需品に取り除かれています(そして、スライダーとラベルの問題があります):

import wx
import wx.grid

app = wx.App()

frame = wx.Frame(None, title="MyUnhappyLayout")

blue_sizer = wx.BoxSizer(wx.VERTICAL)

grid = wx.grid.Grid(frame)

blue_sizer.Add(grid, 6, wx.EXPAND, 8)

green_sizer = wx.BoxSizer()
blue_sizer.Add(green_sizer, 1, wx.EXPAND)

button1 = wx.Button(frame)
button2 = wx.Button(frame)

slider = wx.Slider(frame, name="Speed", value=1, minValue=1, maxValue=100)

purple_sizer = wx.BoxSizer()
label_slow = wx.StaticText(frame, label="Slow")
label_fast = wx.StaticText(frame, label="Fast")
purple_sizer.Add(label_slow, wx.ALIGN_LEFT)
purple_sizer.Add(label_fast, wx.ALIGN_RIGHT)

orange_sizer = wx.BoxSizer(wx.VERTICAL)
green_sizer.Add(orange_sizer, 2)
orange_sizer.Add(slider)

orange_sizer.Add(purple_sizer, wx.EXPAND)
green_sizer.Add(button1, 1, wx.EXPAND)
green_sizer.Add(button2, 1, wx.EXPAND)

frame.SetSizerAndFit(blue_sizer)
frame.Show()

app.MainLoop()
4

2 に答える 2