【问题标题】:wxWidgets - Hide/Show contents of of a `boxsizer` on button clickwxWidgets - 单击按钮时隐藏/显示 `boxsizer` 的内容
【发布时间】:2020-10-26 15:57:45
【问题描述】:

我对@9​​87654323@很陌生,才2周,在此之前,我在学习python,用Tkinter做一个音乐播放器,作为一个练习项目,直到最近才发现wxWidgets并使用了@ 987654326@ 然后我切换到 C++,因为我真的很想学习 C++。我有这个播放列表listbox 小部件,我在panel 小部件和它自己的boxsizer 小部件内的同一框架中拥有它,我希望它在单击按钮时隐藏和显示,并且主窗口调整大小相应地自动。我四处寻找如何做到这一点,我确实找到了Show()Hide(),并且我能够达到我想要的效果,但是主窗口没有正确调整大小,它奇怪地伸展并以错误的大小显示播放列表.

隐藏播放列表的按钮功能如下所示

void Frame::Playlist(wxCommandEvent &event)
{
    if (playlistButton->GetValue() == 1)
    {
        hboxSizer8->Show(true);
        hboxSizer9->Show(true);
        hboxSizer8->Layout();
        hboxSizer9->Layout();
        vboxSizer->Layout();
        panel->SetSizerAndFit(vboxSizer, true);
    }
    else
    {
        hboxSizer8->Show(false);
        hboxSizer9->Show(false);
        hboxSizer8->Layout();
        hboxSizer9->Layout();
        vboxSizer->Layout();
        panel->SetSizerAndFit(vboxSizer, true);
    }
}

按钮是这样设置的

    playlistButton = new wxToggleButton(panel, wxID_ANY, wxT("Playlist"), wxDefaultPosition, wxDefaultSize, 0);
    playlistButton->Bind(wxEVT_TOGGLEBUTTON, &Frame::Playlist, this);

我添加了一个 GIF 来更好地解释这个问题。

wxWidgets 中还有一个小部件或某些功能可以创建一个单独的窗口,所以我可以创建一个单独的窗口来保存我的播放列表,而不是所有内容的同一个窗口,它们可以像卡在一起并加入,当用户将它们彼此靠近时。

【问题讨论】:

    标签: c++ user-interface wxwidgets


    【解决方案1】:

    您需要在Hide()/Show() 之后调用最上面的sizer 上的Layout()

    另外,请查看 aidemo 并查看有关 wxAUI* 类的文档。

    Sizer 不是窗口。您应该只在 wxListBox 上调用 Hide()/Show(),然后在最上面的 sizer 上调用 Layout()

    【讨论】:

    • 顶部小部件是一个面板,最顶部的尺寸是vboxsizer,它还有许多其他水平和垂直尺寸,我已经称之为Layout()。我尝试添加panel->Layout(),但还是一样。
    • 我删除了sizer上的Show(),而是设置了单个小部件,即listbox和它下面的按钮隐藏,然后我调用了最上面的sizer vboxsizer,但它仍然一样。
    • @apoorv569,你能做一个SSCE吗?还有你正在使用什么 wx 版本和操作系统?你自己编译的吗?什么编译器?
    • 抱歉,我不知道 SSCE 是什么。我正在使用 Arch Linux,我使用介子和忍者,以及 GCC。我从 Arch repo 下载了 wxWidgets,包名为 wxgtk3,版本为 3.0。
    • @apoorv569,它是自包含的可编译示例或 wxWidgets 提供的示例之一的补丁。使您的代码尽可能小,以便有人可以验证该问题并可能更正您的代码。
    猜你喜欢
    • 2017-08-28
    • 2016-05-21
    • 2014-02-11
    • 2018-03-27
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多