0

我的意思是更简单 - 我可以定义一种样式或其他东西并将其应用于我程序中的所有标签吗?我有很多标签,我不想输入太多。我听说过“Pango Style”,但我可以一次将它应用于所有标签小部件吗?

4

2 回答 2

1

你可以add_provider_for_screen

#!/usr/bin/env python

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk

def add_provider(widget):
    screen = widget.get_screen()
    style = widget.get_style_context()
    provider = Gtk.CssProvider()
    provider.load_from_data('label {\
    border: 1px solid #000000;\
    margin: 2px;\
    }'.encode('utf-8'))
    style.add_provider_for_screen(screen, provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)

window = Gtk.Window()
label = Gtk.Label()
label2 = Gtk.Label()
box = Gtk.VBox()
box.add(label)
box.add(label2)
window.add(box)

label.set_label("asd1")
label2.set_label("asd2")

window.connect("realize", add_provider)
window.connect("delete-event", Gtk.main_quit)

window.show_all()

Gtk.main()

add_provider只需要运行一次,但在实现小部件之后(无论您将添加到哪个小部件)

于 2017-03-14T14:11:21.487 回答
0

术语:“很多标签”是相对的。我们说的是 14 还是 84?如果它接近 84,您可能应该使用 Glade 创建界面,然后设置框架 x-pad 和 y-pad 属性。使用 gtk3 的 CSS,您必须将任何标签打包在框架中,以便边距、填充或它们的任何变体(边距顶部、填充底部)工作。

GtkFrame 是 GtkMisc 的子代。GtkMisc 有函数 gtk_misc_set_padding()。您可以在标签上使用该功能,而无需将它们打包成框架。但是您必须为每个标签设置它。

我不知道 Python 只有 C 和一些 C++,但你可以这样做:

1) 为所有以 label0 开头的标签创建一个枚举。(我认为python中的namedtuple)我说使用枚举的原因是以后要跟踪没有它们的所有标签会变得非常困难。

2) 创建一个指向 GtkWidget 的指针数组,每个标签一个。

3) 使用指向 GtkWidget 的指针创建标签,并以枚举为索引。(这里是真正需要枚举的地方)

4) 创建一个带有 gtk_misc_set_padding() 的 for 循环。使用 GtkWidget 数组作为 gtk_misc_set_padding() 中的参数。循环遍历每个标签,设置其填充。

我可以提供一个示例,但如果您不了解 C,它可能不会有用。如果您仍然喜欢它,请告诉我。

于 2012-07-23T18:48:59.100 回答