哪个 GTK 小部件组合用于可滚动的小部件列?

问题描述 投票:0回答:3

我正在使用 PyGTK,试图提出一个可以执行以下操作的小部件组合:

  • 让我在一列中添加无数个小部件
  • 提供垂直滚动条以到达底部的滚动条
  • 调整窗口大小时调整小部件的宽度以填充可用的水平空间

谢谢 - 我是 GTK 的新手。

python gtk pygtk widget
3个回答
8
投票
  • 列中无数的小部件:听起来像 GtkVBox。
  • 垂直滚动条:将您的 VBox 放在 GtkScrolledWindow 中。
  • 水平拉伸:这需要为 VBox、ScrolledWindow 和其他小部件设置适当的属性。至少在 Glade 中,默认值似乎主要处理这个问题(您可能想要更改 ScrolledWindow 的滚动条策略)。

现在开始了。如果您只是按照上面列出的操作进行操作,VBox 的内容将尝试在垂直方向和水平方向调整大小,您将无法获得滚动条。解决方案是将 VBox 放在 GtkViewport 中。

所以最终的层次结构是 ScrolledWindow( Viewport( VBox( widgets ) ) ).


0
投票

史蒂夫在代码中说的话:

vbox = gtk.VBox()
vbox.pack_start(widget1, 1, 1) ## fill and expand
vbox.pack_start(widget2, 1, 1) ## fill and expand
vbox.pack_start(widget3, 1, 1) ## fill and expand
swin = gtk.ScrolledWindow()
swin.add_with_viewport(vbox)

0
投票

我是一名 C 开发人员,正在开发 GTK4 应用程序。我在 Google 上搜索“gtk4 如何使小部件可滚动”将我带到这里!

很难找到一个我可以编译和运行的在 C API 中使用 GtkScrolledWindow 的最小示例,所以我想在这里分享一个,我只是在一个始终可见的标签周围添加了一个滚动条。

https://gist.githubusercontent.com/angstyloop/a5d9863826d3cd739ca202cb6bcaa3d2/raw/c85e569a7bd0d96fffd70da763ccaa11c3a94d7c/scrolledwindow.c

/* scrolledwindow.c
 *
 * Example of putting a GtkLabel in a GtkScrolledWindow.
 *
 * COMPILE
 *
 * gcc `pkg-config --cflags gtk4` -o scrolledwindow scrolledwindow.c `pkg-config --libs gtk4`
 *
 * RUN
 *
 * ./scrolledwindow
 */

#include <gtk/gtk.h>

#if GLIB_CHECK_VERSION(2, 74, 0)
#define APP_FLAGS G_APPLICATION_DEFAULT_FLAGS
#else
#define APP_FLAGS G_APPLICATION_FLAGS_NONE
#endif

static void
activate( GtkApplication *app, gpointer user_data )
{
    GtkWidget *window, *vbox, *scrolled_window, *label;

    window = gtk_application_window_new( app );

    gtk_window_set_default_size (GTK_WINDOW (window), 100, 50);

    vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL, 10 );

    scrolled_window = gtk_scrolled_window_new();

    label = gtk_label_new("<0.o>");

    gtk_scrolled_window_set_child( GTK_SCROLLED_WINDOW( scrolled_window ),
        label );

    gtk_box_append( GTK_BOX( vbox ), scrolled_window );

    gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( scrolled_window ),
        GTK_POLICY_NEVER,
        GTK_POLICY_ALWAYS );

    gtk_window_set_child( GTK_WINDOW( window ), vbox );

    gtk_widget_show( window );
}

int
main( int argc, char **argv )
{
    GtkApplication *app;
    int status;

    puts("Hover to the right of the label to see the scrollbar.");

    app = gtk_application_new( "org.gtk.example", APP_FLAGS );
    g_signal_connect( app, "activate", G_CALLBACK( activate ), NULL );
    status = g_application_run( G_APPLICATION( app ), argc, argv );
    g_object_unref( app );

    return status;
}
© www.soinside.com 2019 - 2024. All rights reserved.