Python 在GTK中,是否有一种简单的方法可以按任意数量缩放所有小部件?
我希望我的小部件看起来和现在一样,只是要小一些。它包括按钮、标签、文本、图像等。有没有办法只说“将其缩放为大小的一半”,并让GTK完成所有必要的图像处理、小部件大小调整等?如果没有,最简单的方法是什么?没有内置的方法可以做到这一点。要做到这一点,你必须考虑什么是“占用空间”在你的UI,以及如何减少它。 如果您的UI主要是文本和图像,则可以使用较小的字体大小,然后按适当的百分比缩小所有图像。当小部件显示的文本和图像缩小时,小部件大小将自动缩小(除非您做过硬编码高度/宽度、使用GtkFixed等不好的事情) 棘手的部分将是确定字体点大小和图像比例之间的关系 编辑:Python 在GTK中,是否有一种简单的方法可以按任意数量缩放所有小部件?,python,user-interface,gtk,pygtk,Python,User Interface,Gtk,Pygtk,我希望我的小部件看起来和现在一样,只是要小一些。它包括按钮、标签、文本、图像等。有没有办法只说“将其缩放为大小的一半”,并让GTK完成所有必要的图像处理、小部件大小调整等?如果没有,最简单的方法是什么?没有内置的方法可以做到这一点。要做到这一点,你必须考虑什么是“占用空间”在你的UI,以及如何减少它。 如果您的UI主要是文本和图像,则可以使用较小的字体大小,然后按适当的百分比缩小所有图像。当小部件显示的文本和图像缩小时,小部件大小将自动缩小(除非您做过硬编码高度/宽度、使用GtkFixed等不好
.没有内置的方法可以做到这一点。要做到这一点,你必须考虑什么是“占用空间”在你的UI,以及如何减少它。 如果您的UI主要是文本和图像,则可以使用较小的字体大小,然后按适当的百分比缩小所有图像。当小部件显示的文本和图像缩小时,小部件大小将自动缩小(除非您做过硬编码高度/宽度、使用GtkFixed等不好的事情) 棘手的部分将是确定字体点大小和图像比例之间的关系 编辑:
.我不建议从用户界面更改主题,但如果需要,您可以这样做,使用自定义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"
我不推荐从用户界面更改主题,但如果需要,您可以这样做,使用自定义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"
在编写了一个100%可伸缩的gtk应用程序之后,我所做的是将自己限制在gdk_draw_line和gdk_draw_rectangle上,这样很容易扩展自己。文本通过gdk_绘制线“完成”。(有关“完成”的某些较低值,请参阅:
我猜这对你没有任何帮助。在编写了一个100%可伸缩的gtk应用程序之后,我所做的只是将自己限制在gdk_draw_line和gdk_draw_rectangle上,然后很容易对自己进行伸缩。文本通过gdk_绘制线“完成”。(有关“完成”的某些较低值,请参阅:
我猜这对你没有任何帮助。一些gtk开发人员已经对分辨率独立性进行了研究,这里有一个非常大的补丁将其引入gtk。然而,这个补丁已经有一年的历史了,现在还不清楚它将如何/何时/是否被包括在内:(最后的截图)
一些gtk开发人员已经着手解决分辨率独立性问题,下面是一个更新,其中包含一个非常大的补丁,将其引入gtk。然而,这个补丁已经有一年的历史了,现在还不清楚它将如何/何时/是否被包括在内:(最后的截图)
谢谢你的提示。谢天谢地,我没有做坏事。如何缩小字体大小?谢谢你的提示。谢天谢地,我没有做坏事。如何缩小字体大小?不,我有GUI应用程序,不是游戏。顺便说一句,像SDL这样的游戏不是更好吗?(或者可能我误解了你的程序)对于那个游戏来说可能不是更好,只是不同而已。我知道gtk,但不知道SDL,我需要做的就是能够画线。如果SDL的线描实现比gtk更好,我会感到惊讶——他们可能都只是做xlib调用——特别是我不希望任何游戏y硬件特定的x-windows绕过SDL可能提供的东西(IDK,如果没有的话),我希望它像“正常”程序一样与x一起工作,我知道gtk会帮我解决的。Blender的界面是可伸缩的,它采用了类似的方法——自定义呈现UI。不,我有一个GUI应用程序,而不是游戏。顺便说一句,像SDL这样的游戏不是更好吗?(或者可能我误解了你的程序)对于那个游戏来说可能不是更好,只是不同而已。我知道gtk,但不知道SDL,我需要做的就是能够画线。如果SDL的线描实现比gtk更好,我会感到惊讶——他们可能都只是做xlib调用——特别是我不希望任何游戏y硬件特定的x-windows绕过SDL可能提供的东西(IDK,如果没有的话),我希望它像“正常”程序一样与x一起工作,我知道gtk会帮我解决的。Blender的界面是可伸缩的,它采用了类似的方法——自定义呈现的UI。我尝试过这样做,并将文本颜色更改为“FF0000”,以查看它是否有任何效果,但没有。我是否也必须从我的应用程序中设置主题?请注意,设置默认文件导致外观改变,我没有给出绝对路径。它似乎有效(虽然这个特定的方案现在看起来很难看..而且文本颜色似乎不是黑色..但我会解决它)只需更改以下内容:fg#u颜色:#ECE9E9此:fg#u颜色:#000000。如果你不想弄乱颜色,就跳过它们。我试着这么做,我把文本颜色改成“FF0000”,看看它是否有效果,但没有。我是否也必须从我的应用程序中设置主题?请注意,设置默认文件导致外观改变,我没有给出绝对路径。它似乎有效(虽然这个特定的方案现在看起来很难看..而且文本颜色似乎不是黑色..但我会解决它)只需更改以下内容:fg#u颜色:#ECE9E9此:fg#u颜色:#000000。如果你不想弄乱颜色,就跳过它们。如果我能让它工作,那就太好了——谢谢你的引导!我觉得这太好了