我怎样才能在 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所说,您可以查看源代码。
我一直在尝试制作一个简单的 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所说,您可以查看源代码。