WxWidget-在按钮单击时隐藏/显示`boxsizer`的内容

2022-04-13 00:00:00 user-interface wxwidgets c++
C++我对C++非常陌生,在此之前的两周,我正在学习python,并使用Tkinter制作了一个音乐播放器,作为一个练习项目,直到最近我发现了wxWidgets并使用了wxPython,然后我切换到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中有没有小工具或某些功能可以创建一个单独的窗口,所以我可以创建一个单独的窗口来保存我的播放列表,而不是所有内容的相同窗口,当用户将它们拉近时,它们可以像捕捉和连接在一起。


解决方案

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

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

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

相关文章