首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在wxPython中,如何使用sizer对滑块下的静态文本进行左、右对齐?

在wxPython中,如何使用sizer对滑块下的静态文本进行左、右对齐?
EN

Stack Overflow用户
提问于 2021-11-08 05:25:46
回答 2查看 75关注 0票数 0

我试着做一个这样的GUI:

大的正方形是wxGrid,小的是wxButtons,它们都很好。左边的绘图是一个wxSlider,在滑块的每一端下都有文本标签“慢速”和“快”。

所以我放了一堆BoxSizers,就像这样:

从外部进入:

  • Blue是垂直的,包含一个wxGrid和绿色BoxSizer
  • 绿色是水平的,包含橙色的BoxSizer和两个按钮
  • orange是垂直的,包含wxSlider和紫色的wxSlider是水平的,并且包含两个StaticTexts,其中有“慢速”和“快速”

但我能让它呈现的最接近的就是这个。特别要注意的是,滑块是多么的小,以及慢而快速的标签(用来标记滑块的末端!)一塌糊涂。

我弄乱了对齐和扩展,我从其他人那里读过一堆抱怨BoxSliders的帖子,但我什么也没有得到。当我读到关于wx.ST_NO_AUTORESIZE的文章时,我想我肯定已经有了它,但这并没有起到任何作用。我甚至用wxGlade重建了我的窗口,并且得到了同样的东西,特别是布局在最左边的静态文本。

我没有做的一件事是指定任何以像素为单位的大小。似乎任何布局都不应该要求这样做,因为谁知道我将在多大的屏幕上运行,以及像素的合理数量。如果我已经正确地理解了比例,我不需要指定大小的像素。

但我没有想法,我甚至没有找到一个很好的例子,只是类似的挫折感。如何使我的滑块占据橙色盒子的全部宽度,以及如何获得慢而快速的文本来标记滑块的末端?

我正在运行的内容,去掉了布局要点(它有滑块和标签问题):

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-08 08:23:26

有一个“内置”选项来显示滑块的min和max标签:在创建它时使用wxSL_MIN_MAX_LABELS (除非您使用的wxWidgets大于2.9.1)。

否则,对于特定的sizer布局(如果在使用之前创建每个sizer,则可能更容易查看):

代码语言:javascript
复制
purple_sizer = wx.BoxSizer()
purple_sizer.Add(label_slow)
purple_sizer.AddStretchSpacer()
purple_sizer.Add(label_fast)

orange_sizer = wx.BoxSizer(wx.VERTICAL)
# when adding to a sizer, the second argument would be proportion;
# use SizerFlags to avoid mistakenly skipping an argument
orange_sizer.Add(slider, wx.SizerFlags().Expand())
orange_sizer.Add(purple_sizer, wx.SizerFlags().Expand())

green_sizer = wx.BoxSizer()
green_sizer.Add(orange_sizer, wx.SizerFlags(1)) # no need for proportion=2, 1 should do
green_sizer.Add(button1) # you probably meant to enlarge the slider, not the buttons
green_sizer.Add(button2)

blue_sizer = wx.BoxSizer(wx.VERTICAL)
blue_sizer.Add(grid, wx.SizerFlags(1).Expand().Border(8)) # no need for proportion=6, 1 should do
blue_sizer.Add(green_sizer, wx.SizerFlags().Expand())
票数 3
EN

Stack Overflow用户

发布于 2021-11-08 08:24:28

正如@VZ向我指出的那样,盒子内的旧Align在它的方向上从未起作用,但现在在更新的wxWidgets迭代中抛出了一个错误。

现在,实现相同结果的old方法是将dummy条目插入到sizer中,并要求对它们进行扩展。

关于new的方式,请看“catalin”中的答案。

对代码的一些更改只是为了帮助我理解什么是什么,通过显式而不是隐式地使用小部件的缺省值。

代码语言:javascript
复制
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(wx.HORIZONTAL)
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(wx.HORIZONTAL)
label_slow = wx.StaticText(frame, label="Slow")
label_fast = wx.StaticText(frame, label="Fast")
purple_sizer.Add(label_slow, 0, 0, 0)
purple_sizer.Add((-1,-1), 1, wx.EXPAND, 0)
purple_sizer.Add(label_fast, 0, 0, 0)

orange_sizer = wx.BoxSizer(wx.VERTICAL)
orange_sizer.Add(slider, 0, wx.EXPAND)
orange_sizer.Add(purple_sizer, 0, wx.EXPAND)

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

frame.SetSizerAndFit(blue_sizer)
frame.Show()

app.MainLoop()

注意:

这是虚拟条目:purple_sizer.Add((-1,-1), 1, wx.EXPAND, 0)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69878967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档