2015-02-07 1 views
0

Я новичок Vala/Gtk, и я пытаюсь изменить размер шрифта Gtk.Label, но я не могу найти хороший способ сделать это.Как изменить размер шрифта Gtk.Label в vala?

Я считаю, что я могу использовать разметку, как это:

var welcome_message = new Gtk.Label ("<span size='17000'>Hello</span>"); 
    welcome_message.set_use_markup (true); 

Но это кажется немного хака. Каков правильный способ сделать это?

+0

Возможный дубликат [Как изменить размер шрифта в GTK?] (Http://stackoverflow.com/questions/1269326/how-can-i-change-the-font-size-in-gtk) –

+0

Этот другой вопрос относится только к GTK 2. (Я отметил его как таковой.) CSS - правильный ответ на этот вопрос. – ptomato

ответ

1

Вы можете попробовать css, я думаю, что в последнее время это предпочтительный способ. Дайте вашей метке класс, а затем загрузите css. Если вы собираетесь изменить размер шрифта ярлыка, я готов поспорить, что вы также собираетесь настраивать другие вещи, поэтому css может быть вам полезен.

+0

Согласен, CSS - хороший способ. Вы также можете использовать атрибуты pango, но это на самом деле не менее хаки, чем разметка: 'Pango.AttrList attrs = new Pango.AttrList(); attrs.insert (Pango.attr_scale_new (Pango.Scale.LARGE)); label.attributes = attrs; ' – nemequ

5

Спасибо lethalman и nemequ.

Я думаю, что это может помочь кому-то, поэтому вот небольшой пример того, как использовать css с Vala.

using Gtk; 

public class StyleApp1 : Gtk.Window 
{ 
    public StyleApp1() 
    { 

     this.title = "Style app example"; 
     this.set_border_width (10); 
     this.set_position (Gtk.WindowPosition.CENTER); 

     this.set_default_size (350, 200); 
     this.destroy.connect (Gtk.main_quit); 

     var screen = this.get_screen(); 
     var css_provider = new Gtk.CssProvider(); 

     string path = "styleapp1.css"; 

     // test if the css file exist 
     if (FileUtils.test (path, FileTest.EXISTS)) 
     { 
      try { 
       css_provider.load_from_path(path); 
       Gtk.StyleContext.add_provider_for_screen(screen, css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER); 
      } catch (Error e) { 
       error ("Cannot load CSS stylesheet: %s", e.message); 
      } 
     } 

     var box = new Gtk.Box (Gtk.Orientation.VERTICAL, 10); 
     this.add (box); 

     var label = new Gtk.Label ("Thank you"); 
     box.add (label); 

     var label2 = new Gtk.Label ("Stackoverflow"); 
     label2.get_style_context().add_class("my_class"); 
     box.add (label2); 
    } 
} 

static int main(string[] args) { 
    Gtk.init(ref args); 

    StyleApp1 win = new StyleApp1(); 
    win.show_all(); 

    Gtk.main(); 
    return 0; 
} 

и файл styleapp1.css:

GtkWindow { 
    font-size: 17px; 
} 

.my_class { 
    color: pink; 
} 

NB: если вы используете add_provider вместо add_provider_for_screen. Вы должны использовать add_provider для каждого виджета, который вы хотите настроить.