我怎样才能在 Gtk 中制作像棒棒糖一样的侧边栏?

How can I make a Lollypop like sidebar in Gtk?

我一直在尝试制作一个简单的 Gtk 应用程序,其中包含一个类似于 Lollypop 音乐播放器中的侧边栏的侧边栏(如此处所示https://youtu.be/2IhJCrKz3N4),我不知道哪个布局容器是最适合这样的事情,我尝试了 Gtk.Box 垂直方向,但结果与我想要的相似。有人可以为此提出更好的解决方案以及将此侧边栏放置在 window 上同时保持其侧面固定的方法。

对于新开发者来说,可能很难深入研究一些软件的源代码,但它确实可以帮助你 运行。请在 https://gitlab.gnome.org/World/lollypop 查看 Lollypop 的源代码,了解您正在使用的功能。

除此之外,在下面的代码中,我试图让你从我从你的问题中理解的内容开始。

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class MyWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Side Bar")
        self.hbox = Gtk.HBox();
        self.vbox = Gtk.VBox();
        self.button1 = Gtk.Button(label="1")
        self.button1.connect("clicked", self.on_button_clicked)
        self.button2 = Gtk.Button(label="2")
        self.button2.connect("clicked", self.on_button_clicked)
        self.button3 = Gtk.Button(label="3")
        self.button3.connect("clicked", self.on_button_clicked)
        self.button4 = Gtk.Button(label="4")
        self.button4.connect("clicked", self.on_button_clicked)
        self.vbox.add(self.button1);
        self.vbox.add(self.button2);
        self.vbox.add(self.button3);
        self.vbox.add(self.button4);
        self.entry = Gtk.Entry();
        self.entry.set_text("1");
        self.hbox.add(self.vbox);
        self.hbox.add(self.entry);
        self.add(self.hbox);
        self.maximize()

    def on_button_clicked(self, widget):
        self.entry.set_text(widget.get_label());

win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

Lollypop 的实现可能与上面的非常不同,因为它可能需要处理更多的事情,例如调整大小时按钮的响应大小、不同主题的外观等。

建议:继续挖掘和贡献开源软件以了解更多信息。

您可以 运行 GTK_DEBUG=interactive your-app 使用 gtk-inspector。它可以让您检查现有的 user-interface,例如 lollypop,并检查小部件是如何绑定在一起的。 请阅读文档的 interactive debugging 部分。

更多细节,如Mathan Tilva所说,您可以查看源代码。