Ruby GTK3, как мне изменить тему приложения? - PullRequest
0 голосов
/ 07 марта 2020

Я пишу простое приложение для отображения моей темы GTK3:

#!/usr/bin/ruby -W0
require 'gtk3'

app = Gtk::Application.new('org.xfce-colour.example', :flags_none)

app.signal_connect('activate') do |a|
    w = Gtk::ApplicationWindow.new(a)
    w.set_title('XFCE Colour')
    w.set_icon('/home/sourav/Documents/xfce_colour.png')
    w.set_default_size(70, 70)

    g = Gtk::Grid.new
    w.add(g)

    b1 = Gtk::Button.new(label: 'Button')
    g.attach(b1, 0, 0, 1, 1)

    b2 = Gtk::CheckButton.new('')
    g.attach(b2, 1, 0, 1, 1)

    b3 = Gtk::RadioButton.new('')
    g.attach(b3, 2, 0, 1, 1)

    b4 = Gtk::SearchEntry.new()
    g.attach(b4, 3, 0, 1, 1)

    b5 = Gtk::ToggleButton.new('Button')
    g.attach(b5, 0, 1, 1, 1)

    b6 = Gtk::ColorButton.new
    g.attach(b6, 1, 1, 1, 1)

    b7 = Gtk::Switch.new
    g.attach(b7, 2, 1, 1, 1)

    b8 = Gtk::Entry.new()
    g.attach(b8, 3, 1, 1, 1)

    [b1, b2, b3, b4, b5, b6, b7, b8].each do |b|
        begin
            b.margin = 6
        rescue Exception
            puts $!
        end
    end

    w.show_all
end

app.run

Пожалуйста, прокомментируйте строку w.set_icon('...') перед запуском.


То, что я хочу сделать, меняется тема GTK из приложения, как это сделано в Фабрика виджетов .

Например, я смогу отправить первый аргумент моему имени темы:

ruby layout.rb XFCE_Colour_Lite_Pink

И установите тему на XFCE_Colour_Lite_Pink: Preview

Я использую XFCE4, и будет лучше, если я даже смогу изменить тему WM.


Редактировать: Как указано здесь , в Python у нас есть метод Gtk.set_property (). Я следовал за этим для Ruby:

settings = Gtk::Settings.new
puts settings.set_property('XFCE_Colour_Lite_Yellow', 'Papirus')

Я получил ошибку:

Traceback (most recent call last):
    1: from layout.rb:7:in `<main>'
layout.rb:7:in `set_property': No such property: XFCE_Colour_Lite_Yellow (GLib::NoPropertyError)

1 Ответ

1 голос
/ 07 марта 2020

После поиска исходного кода AWF мне удалось изменить тему, добавив:

Gtk::Settings.default.set_gtk_theme_name ARGV[0] if ARGV[0]

Если ARGV [0] не является названием темы, оно будет используйте тему по умолчанию.

Существуют и другие методы, например:

Gtk::Settings.default.gtk_application_prefer_dark_theme = true

Включение темной темы. Я использовал Gtk::Settings.default.methods.sort для сортировки методов, поскольку текущая документация по ri не содержит ничего, кроме информации о лицензии.

...