【问题标题】:How to divide a wxPanel horizontally?如何水平划分wxPanel?
【发布时间】:2013-01-10 10:29:12
【问题描述】:

我正在为控制台应用程序和here's 我想要实现的目标构建布局。我目前拥有的是this。 我的主窗口是从 wxFrame 派生的。我使用 wxSplitterWindow 将窗口拆分为两个窗口:左边的一个 - wxTreeCtrl,右边的一个是 wxPanel。我的问题是如何实现以下目标:一个水平列表(可能是一个网格?),它显示来自数据库的类似记录,但带有滚动,因此只显示 20-30,以及该表下方的简单文本区域(网格?)。

我尝试拆分 wxPanel,就像我对 Frame 所做的那样,但它不起作用。当我尝试将面板更改为框架时,它可以工作,但框架是在新窗口中打开的。所以现在我要问要使用哪些元素以及如何定位它们,以便我有一个可滚动的表格、一条水平线,然后是一个简单的文本区域。水平线应位于左侧面板的中间。到目前为止,这是我右侧面板的代码: 包右面板;

use strict;

use base qw(Wx::Panel);
use Wx qw(:everything);
sub new {
    my ($class, $parent_window) = @_;
my ($self) = $class->SUPER::new($parent_window);

    return $self;
}

【问题讨论】:

    标签: perl layout wxwidgets wxperl


    【解决方案1】:

    wxSplitterWindow 用于在运行时可以拆分和取消拆分的窗口。文本编辑器通常具有此类功能,因此它们可以提供同一文档的两个独立视图。

    我假设您总是希望框架中有三个独立的窗口?您应该简单地分别创建三个窗口并进行算术以对齐它们。听起来您希望在顶部使用 wxScrolledWindow,在底部使用 wxPanel

    【讨论】:

    • 但是我应该把 wxScrolledWindow 和 wxPanel 放在哪个控件中呢?
    • @MilanMilanov:将所有三个窗口设为wxFrame 的子窗口。您不必用单个窗口填充它。
    【解决方案2】:

    为窗口创建一个带有 wxHORIZONTAL 标志的 BoxSizer。

    在此 BoxSizer 中,创建一个 Panel(您的左侧区域)和另一个 BoxSizer(带有 wxVERTICAL 标志)作为您的右侧区域。 (上面的 wxHORIZONTAL 标志会将这两个并排放置)。

    在右侧的 BoxSizer 中,创建一个 ScrolledWindow(顶部)和一个 Panel(底部)。右侧 BoxSizer 中的 wxVERTICAL 标志将垂直堆叠这些。

    如果您以前从未玩过 Sizer,则很难理解它们......这可能会有所帮助: Sizers and Layout

    【讨论】:

      猜你喜欢
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      相关资源
      最近更新 更多