在GTK中,有简单的方法按任意比例缩放所有小部件吗?

0 投票
4 回答
1734 浏览
提问于 2025-04-15 13:33

我想让我的小工具看起来和现在一模一样,只是要小一点。它里面有按钮、标签、文字、图片等等。有没有办法直接说“把这个缩小到一半”,然后让GTK自动处理所有的图片处理、控件大小调整等工作?如果没有,那最简单的方法是什么呢?

4 个回答

1

这个功能没有内置的方法可以实现。要做到这一点,你需要考虑一下,是什么在你的界面中“占据空间”,以及如何减少这些空间。

如果你的界面主要是文字和图片,你可以使用更小的字体,然后把所有的图片按合适的比例缩小。只要文字和图片变小,组件的大小也会自动缩小(前提是你没有做一些不好的事情,比如硬编码高度/宽度,或者使用GtkFixed等)。

比较棘手的部分是确定字体大小和图片缩放之间的关系。

编辑:

这里有一篇关于如何改变字体大小的pygtk语法的帖子

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"
2

一些GTK的开发者一直在研究分辨率独立性,这里有一个更新,介绍了一个很大的补丁来将这个功能引入GTK。不过,这个补丁已经有一年了,目前还不清楚它会在什么时候、以什么方式,或者是否会被纳入GTK中。(截图在最后)

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

撰写回答