GTK4 ScrolledWindow делает контент нечитаемым
Я изучаю GTK4 и Python. Во время игры с
Я хочу, чтобы моя боковая панель располагалась слева, а мой контент можно было прокручивать. Для этого я ввел контейнер между содержимым (сеткой) и стеком. Когда я это делаю, содержимое сетки больше не читается, так как его размер уменьшился. Однако теперь небольшой контент можно прокручивать.
Вот как это выглядит: См. изображение.
Я хотел бы понять, почему, когда сетка завернута в
Мой код:
#!/usr/bin/python
import sys
import gi
gi.require_version('Gtk', '4.0')
gi.require_version('Adw', '1')
from gi.repository import Gtk, Adw
class MainWindow(Gtk.ApplicationWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.set_title("Demo")
self.set_default_size(400, 400)
#
# Create grid and add some content to be scrolled
#
self.grid = Gtk.Grid()
for row in range(50):
self.grid.attach(Gtk.Label(label = "Text Text Text Text Text Text Text Text Text"), 0, row, 1, 1)
#
# Wrap grid in ScrolledWindow
#
self.scrollableContent = Gtk.ScrolledWindow()
self.scrollableContent.set_child(self.grid)
#
# Create a stack, Add the ScrolledWindow.
#
self.content = Gtk.Stack()
self.content.add_titled(self.scrollableContent, "Scrollable", "Content . . . . . . . . ")
#
# Create the sidebar and add the stack.
#
self.sidebar = Gtk.StackSidebar()
self.sidebar.set_stack(self.content)
#
# Create a box to hold the sidebar and the content stack side by side Horizontaly.
#
self.structure = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
self.structure.set_homogeneous(False) # just to be sure
self.structure.append(self.sidebar)
self.structure.append(self.content)
#
# Set the box as the content of the window it self.
#
self.set_child(self.structure)
class DemoApp(Adw.Application):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.connect('activate', self.on_activate)
def on_activate(self, app):
self.win = MainWindow(application=app)
self.win.present()
app = DemoApp(application_id="com.vildljung.Demo")
app.run(sys.argv)
1 ответ
Кажется, что по умолчаниюGtkScrolledWindow
не учитывает размеры дочернего виджета при собственных вычислениях.
В вашем случае кажется, что высота была рассчитана соответствующим образом, но не ширина. API предлагает эту функцию :
void
gtk_scrolled_window_set_propagate_natural_width (
GtkScrolledWindow* scrolled_window,
gboolean propagate
)
который гарантирует, что размеры дочернего виджета распространяются на размеры прокручиваемого окна.
Я попробовал это на Gtkmm3.24, и это решило проблему.
Источник: https://gitlab.gnome.org/GNOME/gtk/-/issues/3515 .