【问题标题】:In GTK, is there an easy way to scale all widgets by an arbitrary amount?在 GTK 中,是否有一种简单的方法可以按任意数量缩放所有小部件?
【发布时间】:2009-08-12 23:25:54
【问题描述】:

我希望我的小部件看起来与现在完全一样,只是更小。它包括按钮、标签、文本、图像等。有什么方法可以说“将其缩放到一半大小”,并让 GTK 进行所有必要的图像处理、小部件调整大小等吗?如果没有,最简单的方法是什么?

【问题讨论】:

    标签: python user-interface gtk pygtk


    【解决方案1】:

    一些 gtk 开发人员已经致力于解决独立性问题,这里有一个更新,其中包含一个非常大的补丁,将其引入 GTK。然而,这个补丁现在已经有一年了,目前还不清楚如何/何时/是否会包含它:(最后的截图)

    http://mail.gnome.org/archives/gtk-devel-list/2008-August/msg00044.html

    【讨论】:

    • 如果我能让它工作,那就太好了 - 感谢您的领导!
    【解决方案2】:

    我不建议从用户界面更改主题,但如果需要,您可以这样做,使用自定义 gtkrc 可以帮助您更改字体和按钮的绘制方式,主要是因为xthickness 和 ythickness。

     import gtk
     file = "/path/to/the/gtkrc"
     gtk.rc_parse(file)
     gtk.rc_add_default_file(file)
     gtk.rc_reparse_all()
    

    自定义的 gtkrc 可能如下所示:

    gtk_color_scheme = "fg_color:#ECE9E9;bg_color:#ECE9E9;base_color:#FFFFFF;text_color:#000000;selected_bg_color:#008DD7;selected_fg_color:#FFFFFF;tooltip_bg_color:#000000;tooltip_fg_color:#F5F5B5"
    style "theme-fixes" {
    
      fg[NORMAL]        = @fg_color
      fg[PRELIGHT]      = @fg_color
      fg[SELECTED]      = @selected_fg_color
      fg[ACTIVE]        = @fg_color
      fg[INSENSITIVE]   = darker (@bg_color)
    
      bg[NORMAL]        = @bg_color
      bg[PRELIGHT]      = shade (1.02, @bg_color)
      bg[SELECTED]      = @selected_bg_color
      bg[INSENSITIVE]   = @bg_color
      bg[ACTIVE]        = shade (0.9, @bg_color)
    
      base[NORMAL]      = @base_color
      base[PRELIGHT]    = shade (0.95, @bg_color)
      base[ACTIVE]      = shade (0.9, @selected_bg_color)
      base[SELECTED]    = @selected_bg_color
      base[INSENSITIVE] = @bg_color
    
      text[NORMAL]      = @text_color
      text[PRELIGHT]    = @text_color
      text[ACTIVE]      = @selected_fg_color
      text[SELECTED]    = @selected_fg_color
      text[INSENSITIVE] = darker (@bg_color)
    
      GtkTreeView::odd_row_color  = shade (0.929458256, @base_color)
      GtkTreeView::even_row_color = @base_color
      GtkTreeView::horizontal-separator = 12
    
          font_name = "Helvetica World 7"
     }
     class "*" style "theme-fixes"
    

    【讨论】:

    • 我尝试这样做并将文本颜色更改为“FF0000”以查看它是否有任何效果,但它没有。我是否也必须从我的应用程序中设置主题?
    • 请注意,执行 set_default_files 会导致外观发生变化
    • nm,我没有给出绝对路径。它似乎工作(虽然这个特殊的方案现在看起来很丑......而且似乎文本颜色不是黑色......但我想办法)
    • 只需更改此:fg_color:#ECE9E9 为:fg_color:#000000。如果您不想弄乱颜色,请跳过它们
    【解决方案3】:

    没有内置的方法可以做到这一点。为此,您必须考虑 ui 中的“占用空间”是什么,以及如何减少它。

    如果您的 UI 主要是文本和图像,您可以使用较小的字体大小,然后按适当的百分比缩小所有图像。一旦它们显示的文本和图像缩小,小部件的大小就会自动缩小(除非你做了一些坏事,比如硬编码高度/宽度,使用 GtkFixed 等)。

    棘手的部分是确定字体点大小和图像比例之间的关系。

    编辑:

    Here's a post about the pygtk syntax to change the font size.

    【讨论】:

    • 感谢您的提示。谢天谢地,我没有做过坏事=)。如何缩小字体大小?
    【解决方案4】:

    在编写了一个 100% 可扩展的 gtk 应用程序之后,我所做的只是将自己限制在 gdk_draw_line 和 gdk_draw_rectangle 中,然后自己很容易扩展。文本通过 gdk_draw_line “完成”。 (对于“完成”的某些低值。)请参阅:http://wordwarvi.sourceforge.net

    我猜这对你没有任何帮助。

    【讨论】:

    • 不,我有一个 GUI 应用程序,而不是游戏。顺便说一句,像 SDL 这样的游戏不会更好吗? (或者也许我误解了你的程序到底是什么)
    • 对于那个游戏来说可能不是更好,只是不同。我知道 gtk,但不知道 SDL,我所需要的只是画线的能力。如果 SDL 的线条绘制实现比 gtk 更好,我会感到惊讶——他们可能都只是做 xlib 调用——我尤其是。不希望任何特定于游戏的硬件 x-windows 绕过 SDL 可能提供的东西(IDK,如果它提供或不提供)我希望它像“正常”程序一样与 X 一起工作,但我知道 gtk 会给我那个。 Blender 的界面是可扩展的,它采用了类似的方法——自定义渲染 UI。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 2011-04-22
    • 2013-07-29
    • 1970-01-01
    相关资源
    最近更新 更多