【问题标题】:wxPython: how to lay one panel over anotherwxPython:如何将一个面板放在另一个面板上
【发布时间】:2011-08-18 20:17:08
【问题描述】:

这是关于 wxPython 的。

我希望有 2 个面板彼此重叠:
PanelBG 应该是某种“背景”,具有自己的 GridBagSizer 和子面板、StaticTexts 等;
PanelFG应该是“前景”面板,还有它自己的 GridBagSizer 和一些静态文本、按钮......但是一个透明的背景,这样PanelBGPanelFG 不放置小部件的任何地方都可见。

我需要两个面板都拉伸到框架的所有边,即使在调整窗口大小时,虽然从不改变倒数比例,这就是为什么我不确定是否有使用绝对定位的方法。

如果您想知道,我不想使用单个 Panel 的原因是合并 2 个 GridBoxSizer 需要我在 sizer 中放置更多单元格,因为前景和背景的行和列不'并不总是一致的,我应该将它们分成许多单元格,网格尺寸增长到数百**2。
由于我要放置在前台的内容需要经常更新和刷新,因此每次都需要重绘所有单元格,这需要 10 - 20 秒才能完成操作(已测试)。只更新前台只需要百分之一秒。

谢谢!

【问题讨论】:

  • 你为什么不创建另一个一分为二的sizer,然后把两个sizer分别放在一个?
  • 天哪,我完全在尝试!我真的没有想到这种可能性,我会告诉你我是否可以让它工作
  • 等等等等,如何让两个child sizer重叠?如果我使用 BoxSizer,它们仍然会垂直或水平堆叠......你能给我举个例子吗?
  • 抱歉,我很难理解您的目标是什么。两个网格应该在彼此上方的 z 平面上?他们并不总是排队?我无法想象这对于用户来说不会特别令人困惑。你能给出最终结果的图纸或更多解释吗?
  • 没错,z 平面在彼此之上。该应用程序是一个显示一天中事件的日历:背景在左侧显示点钟小时作为标签,在右侧显示显示 15 分钟间隔的彩色水平线。前景显示事件矩形,它可以根据同时发生的其他事件的数量水平跨越,根据事件本身的持续时间垂直跨越。这是一个日历,就像其他应用程序中的许多日历一样,但我会尝试提供一些图形表示。

标签: python wxpython wxwidgets panel sizer


【解决方案1】:

这至少会部分改变方向,但可能值得研究一下您还有哪些其他渲染选项。

特别是,我正在考虑 wxWebKit (http://wxwebkit.kosoftworks.com/),它可以让您使用 WebKit 浏览器渲染引擎进行分层等。我不确定它是否处于可以提供您需要的一切的阶段,因为我实际上并没有使用它,但即使它不起作用,它也可能是一种值得尝试的方法 - 使用 HTML/CSS 作为您的一部分显示,同时将整体包装在 wxPython 应用程序中。

【讨论】:

  • 哇,我不知道那个项目,能用 HTML/CSS 做这种工作真是太好了!但是我在 Linux 上开发,似乎我应该自己构建它,所以目前我将使用动态背景位图作为解决方法,但我一定会关注 wxWebkit 并可能重写我的日历一旦我掌握了它。谢谢,这可能是我接受的答案:)
  • 我最初查看了 wxPython 中的 HTML 选项,但不为所动。自从我第一次看到 Java 开发的布局可能性并想起多年前查看 Visual Basic 的原始文件以来,我一直在思考这个方向。当然,我可以在代码中构建 UI,但是当有更好的显示选项时,我为什么要这样做呢?
【解决方案2】:

据我了解,这是一个带有矩形的日历,其中包含当天的事件。

最简单的方法是使用一个 wxGrid,它有七列和四或五行,来表示月份。然后,您可以将事件放入网格单元中以获得正确的日期。 wxGrid 小部件将负责正确刷新所有内容的细节。

使用 wxGrid,您可能会失去对确切外观的一点控制,虽然 wxGrid 非常灵活且功能丰富,一旦您了解了它的许多方法,但您不必编写大量需要大量调试工作的代码.

【讨论】:

  • 感谢您的回答,我在开始这个项目之前查看了 wxGrid,但它不提供覆盖面板或大小调整器的功能,而这正是我正在寻找的。目前我想我已经找到了使用动态背景位图的解决方法,请参阅问题下的 cmets
  • 恕我直言,如果您使用 wxGrid,则无需使用叠加层或大小调整器。
  • 问题是,如果我在同一个“平面”上做我想做的事,我必须做太多的控制和细胞分裂才能使 fg 和 bg 结合在一起。在后端,我提出了两个字典,一个用于 fg,另一个用于 bg,长话短说,它们定义了它们的项目如何放置在各自的网格中。将这两种项目结合起来就像计算如何在条纹背景上绘制 3 个矩形:如果要将所有矩形放在同一平面上,则必须计算“切割”条纹并创建“孔”的位置对于矩形。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
相关资源
最近更新 更多