gpt4 book ai didi

python - wxPython 带面板的框架的最小尺寸

转载 作者:行者123 更新时间:2023-11-28 16:47:12 24 4
gpt4 key购买 nike

wxpython 2.8.11.0, python 2.7

如果我将一些带有一些控件的 Sizer 直接放入 Frame

import wx

app=wx.App()

frm = wx.Frame(None, title='title')

sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(wx.SpinCtrl(frm))
sizer.Add(wx.SpinCtrl(frm))

frm.SetSizerAndFit(sizer)
frm.Show()

app.MainLoop()

Frame 将自动具有正确的最小尺寸以包含 Sizer,并且不可能使其更小。如果中间有一个 Panel(根据需要在控件之间切换),这将不起作用,窗口可以做得太小。

import wx

app=wx.App()

frm = wx.Frame(None, title='title')
pan = wx.Panel(frm)

sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(wx.SpinCtrl(pan))
sizer.Add(wx.SpinCtrl(pan))

pan.SetSizerAndFit(sizer)
frm.Show()

app.MainLoop()

此外,还需要 frm.Fit()frm.SetMinSize(frm.GetEffectiveMinSize()) 才能获得相同的行为。完整代码:

import wx

app=wx.App()

frm = wx.Frame(None, title='title')
pan = wx.Panel(frm)

sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(wx.SpinCtrl(pan))
sizer.Add(wx.SpinCtrl(pan))

pan.SetSizerAndFit(sizer)
frm.Fit()
frm.SetMinSize(frm.GetEffectiveMinSize())
frm.Show()

app.MainLoop()

我对 frm.Fit() 没意见,但我不喜欢 frm.SetMinSize(frm.GetEffectiveMinSize())。难道没有更好的解决方案,让 Frame 自动考虑 Panel 的最小尺寸,就像之前的 Sizer 一样?我考虑过如果 EffectiveMinSize 在将另一个控件添加到 sizer 后更改会发生什么。

编辑:显然

panel.SetSizerAndFit(sizer)
frm.Fit()
frm.SetMinSize(frm.GetEffectiveMinSize())

应该替换为

panel.SetSizer(sizer)
sizer.SetSizeHints(frm)

看起来更干净一些。所以总的来说这看起来像

import wx

app=wx.App()

frm = wx.Frame(None, title='title')
pan = wx.Panel(frm)

sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(wx.SpinCtrl(pan))
sizer.Add(wx.SpinCtrl(pan))

pan.SetSizer(sizer)
sizer.SetSizeHints(frm)
frm.Show()

app.MainLoop()

这是执行此操作的首选方法吗?

如果稍后添加小部件,即使是直接在 Frame 上使用 Sizer 的第一种方法在没有干预的情况下也无法正确处理,所以我认为这完全是不同的问题。

最佳答案

飞哥的回答给出了最优雅的方式(恕我直言)。有一个额外的不需要的 sizer 效率有点低,但我不认为它真的很明显。

有些人确实手动调用了 SetSizeHints(),就像在你的最后一个例子中一样,这同样有效并且可能更清楚(每当我使用额外的 sizer 时,我觉得有必要发表评论解释为什么不应将其删除)。

不幸的是,没有更好的方法,我不确定我们是否可以添加一个,因为你需要对所有面板、sizer 和框架做一些事情,这意味着你不能用一个方法调用而不向其传递不相关的参数。 IE。我们可以有类似的东西

panel.SetSizerAndFitParent(sizer, frame);

但目前还不清楚这是否会更好。

关于python - wxPython 带面板的框架的最小尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12607460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com