问题标签 [sizer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3105 浏览

layout - 当面板在另一个 wx.sizer 中展开时,如何展开 wx.panel 的 wx.sizer?

我有一个 wx.Panel,它有一个与之关联的 GridBagSizer。这个面板被放置在另一个 Sizer (BoxSizer) 中,它的 add 有 expand 标志——这意味着面板占据了 sizer 的整个宽度,这很棒。...但是面板的内部尺寸器现在没有填满面板。

当我添加它的组件时,我尝试将内部sizer 的标志设置为 wx.Expand|wx.ALL,但这不起作用。任何人都知道如何确保在面板展开时大小调整器保持与面板相同的宽度?

编辑:我的代码创建包含 GridBagSizer 的面板:

0 投票
1 回答
902 浏览

python - WxPython:FoldPanelBar 没有真正折叠

我使用 FoldPanelBar 编写了以下代码:

这是折叠前的样子:

替代文字 http://img23.imageshack.us/img23/4309/before.gif

右侧的文本框位于折叠面板中,因此当我单击箭头时,它会消失。但是,它看起来像这样:

替代文字 http://img22.imageshack.us/img22/6306/afterz.gif

我希望左边的文本框会变大以填满整个框架。

我究竟做错了什么?

0 投票
1 回答
381 浏览

wxpython - wxPython sizer wxGridSizer的父类方法奇怪的不可访问

我在使用 wxPython 工具包时遇到问题。我正在使用 wx.GridSizer 对象来放置一个显示一些状态信息的网格。我需要更新这个网格,所以我想出了几种不同的方法。我更喜欢的是简单地刷新/更新需要更新的文本,因此我可以尝试将 wxStaticText 对象从 sizer 中分离出来,用新的 wxStaticText 对象覆盖它,然后将对象重新插入到 sizer 的先前索引处。

更好的方法是使用 wxGridSizer 的父类 wxSizer,它有一个名为“替换”的方法,它允许我替换小部件中的项目而不将其取出,然后将其重新插入。更光滑不?好吧,在尝试使用此方法时,我遇到了一个非常奇怪的错误。这是代码后跟错误:

所以突然更换不是一种选择。请记住,我之前提到的 Insert 方法是 sizer 的父类 wxSizer 的方法。所以证明我使用的sizer wxGridSizer可以成功调用其父类的方法(继承,子类)Insert。

那么为什么我不能以类似的方式调用方法替换?

0 投票
1 回答
1751 浏览

custom-controls - 无法设置 wxwidgets 自定义控件大小。我错过了什么

我有一个从 wxControl 派生的自定义控件,在带有垂直大小调整器的对话框中

但由于某种原因,自定义控件的大小设置为(80,100)。如果我将对话框调整到超出该大小的大小,它会按照我指定的对齐到中心。

编辑: 我在带有 Visual Studio 2005 的 Windows Vista 上使用 wx 2.8.9。

可能缺少什么?

0 投票
1 回答
4607 浏览

resize - wxwidgets 在隐藏/显示子控件后调整大小

我有一个 wxWindow。在里面我有一个 wxBoxSize(垂直)。sizer 有 3 个子控件。

我希望能够隐藏三个子控件之一,并让 sizer 及其父控件自动调整大小。例如,当我隐藏 sizer 的一个子控件时,窗口会减小 200 像素。

现在我显示隐藏某些控件和调整窗口大小的方法如下所示:(硬编码,丑陋)

0 投票
1 回答
747 浏览

python - wxPython GridSizer 未附加到面板?

我正在尝试为我正在开发的游戏构建关卡编辑器。它从一个平面文件中提取数据,然后基于逐字节搜索,它将从预先设置的图块中组装一个网格。应用程序的这一部分我应该没有问题。问题是我的编辑器测试版本只加载了从 00 到 FF 的 16x16 网格测试图块,加载到了错误的位置。

示例:应用程序框架如下所示:

原谅我可怕的 ASCII 艺术,框架上基本上有一个水平尺寸器,有 2 个垂直尺寸器,一个用于左侧,一个用于右侧。它们中的每一个都有一个面板,每个面板都有第二个尺寸器。左边的 sizer 里面有一个 64 像素宽的 spacer,然后是 gridsizer,后来用图像填充。右边的第二个 sizer 是用户可调整的,但至少 960 像素通过那里的垫片,然后是由代码中的级别宽度和高度确定的 gridsizer。

从本质上讲,对于每一侧 - 有一个 gridsizer 在一个 sizer 里面有一个用于该部分宽度的垫片,它位于一个面板上,该面板位于一个 sizer 内部,用于主框架上的那一半 sizer。我希望这是有道理的,因为它有时会让我感到困惑:P

这是执行所有这些操作的代码:

获取所有数据后,应用程序将使用它从指定目录生成带有 .png 瓷砖的关卡布局,但出于测试目的,如上所述,我只是生成一个从 00 到 FF 的 16x16 网格 - 通过菜单选项我称这种方法为:

这可行,但将网格固定在整个框架的左上角,而不是框架右半部分的左上角 - 它应该打开。有类似的代码在左框架上做一个 1x256 网格,但我无法判断这是否因为明显的原因而遇到同样的问题。两者都有工作滚动条,但在滚动时有重绘问题,这让我想知道它是否在整个应用程序上绘制图像而只是忽略了应用程序布局。

我在这里错过了什么吗?这是我第一次在 python 中使用 gridsizers、图像和 GUI 做任何事情,最近才开始使用这种语言,因为我想用比 VB6 更跨平台的东西来写东西——有什么想法吗?=/

0 投票
1 回答
516 浏览

wxpython - 如果可能,如何在 Sizer 中的单元格上设置背景颜色或为 Sizer 设置网格线?

我正在使用 wxWidgets,特别是 wxPython 中的 wx.Sizer。我已经阅读了这些文档,我面前有一份wXPython in Action的副本,并且已经将问题搁置在其他事情上,希望在我的头骨中孕育出一个更好的 sizer 心智模型。这些都没有奏效。

我不是在摸索,甚至没有达到我可以有效地讨论尺寸器如何工作的地步。在 HTML 中,我至少可以在divortd或 call上设置背景颜色,border这样我就可以看到事物是如何布局的。在这里,我有一个灰色的范围,不知道它源自哪个嵌套的静态框尺寸器。在把网格袋尺寸器弄得一团糟之后,我给了静态盒子尺寸器。

任何一种选择都可以让我至少了解这些工作的原理。

0 投票
3 回答
1512 浏览

wxpython - 适合这项工作的 wx.Sizer(s) 吗?

我有一个空间,我希望某些元素(这里由 A、B、D 和 G 表示)每个都位于设计的自己的“角落”中。角应该对齐,就好像四个元素中的每一个都在排斥另一个一样;一个矩形。这将包含在不可调整大小的面板中。我将有几个类似的面板,并希望尽可能保持元素的位置相同。(我需要一些比 wx.Wizard 更复杂的东西,但总体思路相同。)

A 表示大字体的文本。

B 表示小字体的数字进度表(例如“1 of 7”)。

C 代表一大块文本。

D、E、F 和 G 是按钮。

G 按钮与其他按钮的功能分开。

我尝试过嵌套wx.BoxSizers(一个垂直框内的水平框),但没有运气。我的第一个问题wx.BoxSizer.SetMinSize我的最后一行没有得到尊重。第二个问题是我不知道如何让 G 按钮“占用空间”而不会变得可笑地变大,或者我不知道如何将它卡在右边缘和底部边缘。

我曾尝试使用 a wx.GridBagSizer,但遇到了完全不同的问题。

在浏览了各种在线教程和wxPython in Action之后,我有点沮丧。相关论坛似乎每两周就会出现一次活动。“玩弄它”让我无处可去;我觉得好像我正在努力抚平铺垫不当的地毯上的驼峰。

0 投票
2 回答
12030 浏览

wxpython - 为什么 wxPython 中的 .Hide()ing 和 .Show()ing 面板会导致 Sizer 更改布局?

正如我之前的问题中所提到的,我正在尝试在功能上制作一些有点像向导的东西。我已经确定了一个单独的框架,并添加了一个sizer。我为我希望用户看到的每个屏幕构建面板,将它们添加到框架的大小调整器中,然后通过一个面板在面板之间切换,然后在下一个面板上.Hide()调用自定义。.ShowYourself()显然,我希望按钮在用户完成整个过程时保持在同一个位置。

我已经通过它们的“返回”和“下一步”按钮将两个面板无限循环地连接在一起,这样你就可以看到发生了什么。第一个面板看起来很棒;tom10的代码在那个级别上工作,因为它避开了我最初的、过度花哨的尝试,边界到处飞。然后第二个面板似乎已经缩小到最低限度。当我们回到第一个面板时,这里也发生了收缩。为什么它在第一个面板上看起来很好,但在我回到那里之后就不行了?.Fit()如果我不想要 10 像素 x 10 像素的一叠灰色,为什么还要打电话?如果有必要,为什么会.Fit()给出不一致的结果?

这个无限循环似乎代表了我的经验:我修复了面板上的布局,却发现切换会破坏其他面板的布局。我通过使用sizer_h.Add(self.panel1, 0)而不是解决了这个问题,sizer_h.Add(self.panel1, 1, wx.EXPAND)现在我的布局再次关闭。

到目前为止,我的“解决方案”是在mastersizer.SetMinSize((475, 592))每个面板的主尺寸器中添加一个(在下面的代码中注释掉)。这是一个粗糙的解决方案,因为 1)我必须通过反复试验找到有效的数字(宽度为 -5 像素,高度为 -28 像素)。2)我不明白为什么仍然会发生根本问题。

什么是正确的、不丑陋的解决方案?不是一次将所有面板添加到框架的尺寸器中,而是应该切换面板涉及.Detach()从框架的尺寸器中获取该面板,然后.Add()将下一个面板添加到框架的尺寸器中?是否有.JustMakeThisFillThePanel()隐藏在 wxWidgets 和 wxPython 在线文档中的某个地方的方法?

我显然在我的布局心理模型中遗漏了一些东西。下面粘贴的极简代码。

在此处输入图像描述

0 投票
1 回答
6714 浏览

python - 获取 WxPython 面板项以展开

我有一个包含单个项目的 WxPython 框架,例如:

我有一个包含几个面板的框架,包括这个,尺寸由尺寸确定。我希望这个StaticText扩展。使用BoxSizer仅包含文本并设置wx.EXPAND标志的方法可以解决问题,但是仅对一个项目使用 sizer 似乎很愚蠢。

有更简单的解决方案吗?

(我可以直接将其添加StaticText到父框架的 sizer 中,但对于我的设计来说,直接从框架开始更有意义。)


我刚刚意识到,当BoxSizer使用一个项目创建一个时不起作用wx.VERTICAL

一个项目当然可以,但是如果我想稍后垂直添加一个项目并且仍然让它们都展开(例如,当用户的窗口展开时)怎么办?

编辑:啊,我刚刚发现必须使用比例才能使 boxsizers 双向增长。(即,将 0 替换为 1BoxSizer.Add调用。)