gpt4 book ai didi

python - 均匀调整 WxPython BoxSizer 内的多个项目?

转载 作者:行者123 更新时间:2023-11-28 19:20:18 24 4
gpt4 key购买 nike

我正在尝试在水平 BoxSizer 中堆叠多个小部件。但是,我遇到了一些意想不到的行为。与 Sizer 中的项目均匀调整大小不同,一旦达到特定大小,项目将停止随窗口调整大小。

我认为从视觉上最好理解这一点。所以,以 gif 形式:

当前行为:

enter image description here

如果您注意到,两个 TextCtrl 会同步调整大小,直到大约一半标记,此时它们都停止调整大小,而是被“推”到窗口下方.

期望的行为:

enter image description here

期望的行为是,即使在最小尺寸下,两个 TextCtrl 仍将被平均分割(以上是通过 photoshop 实现的)

对于显示的两个小部件,这并不是一个真正的大问题,因为窗口的大小可以调整得比任何用户在出现不均匀的 TextCtrl 问题之前所做的更小。然而!在实际应用程序中,我需要将其中的 3-5 个(由各种小部件类型组成)彼此堆叠在一起。虽然两个不是问题,但添加更多(尤其是添加空格和填充时)很快会使问题更加明显。

enter image description here

完整代码:

import wx
from wx.lib.scrolledpanel import ScrolledPanel


class TestPanel(ScrolledPanel):
def __init__(self, parent):
ScrolledPanel.__init__(self, parent)
self.SetupScrolling(scroll_x=False)

self.textctrls = [wx.TextCtrl(self) for _ in range(4)]

sizer = wx.BoxSizer(wx.VERTICAL)
hsizer = wx.BoxSizer(wx.HORIZONTAL)
for textctrl in self.textctrls:
hsizer.Add(textctrl, 1, wx.EXPAND)

sizer.Add(hsizer, 0, wx.EXPAND)
self.SetSizer(sizer)

class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, title="test", size=(320, 240))
self.SetBackgroundColour('#ffffff')
self.panel = TestPanel(self)
self.Show()

if __name__ == '__main__':
app = wx.App(False)
MyFrame(None)
app.MainLoop()

代码应该相对简单明了。所有繁重的列表都在 ScrolledPanel 子类中完成。我创建按钮,将每个按钮添加到 Horizo​​ntal BoxSizer,最后将 Horizo​​ntal sizer 添加到垂直容器中。

谁能确定为什么 sizer 中的小部件没有正确调整大小?

最佳答案

将 textctrls minsize 设置为零,这样它们就可以比默认的 minsize 更小。

import wx
from wx.lib.scrolledpanel import ScrolledPanel


class TestPanel(ScrolledPanel):
def __init__(self, parent):
ScrolledPanel.__init__(self, parent)
self.SetupScrolling(scroll_x=False)

self.textctrls = [wx.TextCtrl(self) for _ in range(4)]

sizer = wx.BoxSizer(wx.VERTICAL)
hsizer = wx.BoxSizer(wx.HORIZONTAL)
for textctrl in self.textctrls:
hsizer.Add(textctrl, 1, wx.EXPAND)
textctrl.SetMinSize((0, -1))

sizer.Add(hsizer, 0, wx.EXPAND)
self.SetSizer(sizer)

class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, title="test", size=(320, 240))
self.SetBackgroundColour('#ffffff')
self.panel = TestPanel(self)
self.Show()

if __name__ == '__main__':
app = wx.App(False)
MyFrame(None)
app.MainLoop()

关于python - 均匀调整 WxPython BoxSizer 内的多个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26704326/

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