Вы не указали язык программирования, поэтому я предполагаю Python для простоты.
В gtk большинство компонентов могут подключаться к событию экспонирования, которое затем можно использовать для рисования вручную в виджет (для этого используется каир, все эти виджеты имеют связанный с ними каирский контекст) [!d1 ]
Вот простой пример окна с пользовательским цветным Vbox и двумя кнопками, пространство между контейнерами (здесь установлено до 20 пикселей), а маленькая рамка вокруг кнопок показывает цвет фона VBox.
import gtk
class MyColoredBox(gtk.VBox):
def __init__(self, homogeneous=False, spacing=0):
super(MyColoredBox, self).__init__(homogeneous, spacing)
self.connect("expose-event", self.expose)
def expose(self, widget, event):
cr = widget.window.cairo_create()
cr.set_source_rgb(1.0, 1.0, 0.5)
cr.rectangle(event.area.x, event.area.y,
event.area.width, event.area.height)
cr.fill()
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.connect("destroy", gtk.main_quit)
vbox = MyColoredBox(False, 20)
b1 = gtk.Button("Hello")
b2 = gtk.Button("World")
vbox.add(b1)
vbox.add(b2)
self.add(vbox)
self.show_all()
if __name__ == "__main__":
PyApp()
gtk.main()
Полученная программа выглядит примерно так:
Короткий ответ: да !!
Я нашел это https://unix.stackexchange.com/a/185115:
С gtk + ≥ 3.12 вы можете загрузить определенную тему и его вариант (темный, светлый) для каждого приложения1 через переменную среды GTK_THEME = тема: вариант. Согласно руководству gtk +: GTK_THEME. Если установлено, делает GTK + использовать названную тему вместо темы, заданной параметром gtk-theme-name [...] Также можно указать вариант темы для загрузки, добавив имя варианта с двоеточием, вот так: GTK_THEME = Adwaita: dark. Итак, чтобы загрузить темный вариант, который вы запускали: GTK_THEME = Adwaita: dark gedit Аналогично, для достижения противоположности (когда тема по умолчанию темная) вы загружаете вариант света: GTK_THEME = Adwaita: light gedit Обратите внимание, что если вы хотите используйте его через пользовательскую программу запуска (файл .desktop), вам нужно будет добавить env к команде в строке Exec: Exec = env GTK_THEME = Adwaita: dark eog% U 1: Стоит отметить, что - согласно решению разработчика - новее gnome-terminal имеет собственную конфигурацию через меню> предпочтения и игнорирует тему. Кроме того, поскольку это довольно новый материал, некоторые приложения gtk + 3 могут пока (но не соблюдать) переменную env GTK_THEME (одним из них является nautilus).Также вам нужно будет использовать пользовательский набор значков для этого приложения, поэтому я нашел на https://unix.stackexchange.com/a/185115 :
С gtk + ≥ 3.12 вы можете загрузить определенную тему и ее вариант (темный, светлый) для каждого приложения1 через переменную среды GTK_THEME = theme: variant. В соответствии с справочником gtk +:
Производится за исключением некоторых приложений (например, VLC) от использования текущей темы gtk3create any folder path/to/FOLDER
create a icons/ folder inside it
put your desired icon set folder in it and rename that folder with the name of current icon set
GTK_THEME. Если установлено, делает GTK + использовать названную тему вместо темы, заданной параметром gtk-theme-name [...] Также можно указать вариант темы для загрузки, добавив имя варианта с двоеточием, например: GTK_THEME = Adwaita: dark.
XDG_DATA_DIRS = / path / to / FOLDER /: $ XDG_DATA_DIRSИтак, чтобы загрузить темный вариант, который вы запускали:
Использование корицы metacity border-decoration, это в папке тем / метафильм-1 /. Я не знаю, как настроить его для конкретного приложения. Ошибка XDG_DATA_DIRS выше не будет работать.GTK_THEME = Adwaita: dark gedit
GTK_THEME = Adwaita: dark XDG_DATA_DIRS = / path / to / FOLDER /: $ XDG_DATA_DIRSАналогично, для достижения противоположности (когда тема по умолчанию темная), вы загружаете вариант света:
Exec = sh -c "GTK_THEME = Adwaita: темный XDG_DATA_DIRS = / путь / в / FOLDER /: $ XDG_DATA_DIRS% F"Короткий ответ: да !!
Я нашел это https://unix.stackexchange.com/a/185115:
С gtk + ≥ 3.12 вы можете загрузить определенную тему и его вариант (темный, светлый) для каждого приложения1 через переменную среды GTK_THEME = тема: вариант. Согласно руководству gtk +: GTK_THEME. Если установлено, делает GTK + использовать названную тему вместо темы, заданной параметром gtk-theme-name [...] Также можно указать вариант темы для загрузки, добавив имя варианта с двоеточием, вот так: GTK_THEME = Adwaita: dark. Итак, чтобы загрузить темный вариант, который вы запускали: GTK_THEME = Adwaita: dark gedit Аналогично, для достижения противоположности (когда тема по умолчанию темная) вы загружаете вариант света: GTK_THEME = Adwaita: light gedit Обратите внимание, что если вы хотите используйте его через пользовательскую программу запуска (файл .desktop), вам нужно будет добавить env к команде в строке Exec: Exec = env GTK_THEME = Adwaita: dark eog% U 1: Стоит отметить, что - согласно решению разработчика - новее gnome-terminal имеет собственную конфигурацию через меню> предпочтения и игнорирует тему. Кроме того, поскольку это довольно новый материал, некоторые приложения gtk + 3 могут пока (но не соблюдать) переменную env GTK_THEME (одним из них является nautilus).Также вам нужно будет использовать пользовательский набор значков для этого приложения, поэтому я нашел на https://unix.stackexchange.com/a/185115 :
С gtk + ≥ 3.12 вы можете загрузить определенную тему и ее вариант (темный, светлый) для каждого приложения1 через переменную среды GTK_THEME = theme: variant. В соответствии с справочником gtk +:
Производится за исключением некоторых приложений (например, VLC) от использования текущей темы gtk3create any folder path/to/FOLDER
create a icons/ folder inside it
put your desired icon set folder in it and rename that folder with the name of current icon set
GTK_THEME. Если установлено, делает GTK + использовать названную тему вместо темы, заданной параметром gtk-theme-name [...] Также можно указать вариант темы для загрузки, добавив имя варианта с двоеточием, например: GTK_THEME = Adwaita: dark.
XDG_DATA_DIRS = / path / to / FOLDER /: $ XDG_DATA_DIRSИтак, чтобы загрузить темный вариант, который вы запускали:
Использование корицы metacity border-decoration, это в папке тем / метафильм-1 /. Я не знаю, как настроить его для конкретного приложения. Ошибка XDG_DATA_DIRS выше не будет работать.GTK_THEME = Adwaita: dark gedit
GTK_THEME = Adwaita: dark XDG_DATA_DIRS = / path / to / FOLDER /: $ XDG_DATA_DIRSАналогично, для достижения противоположности (когда тема по умолчанию темная), вы загружаете вариант света:
Exec = sh -c "GTK_THEME = Adwaita: темный XDG_DATA_DIRS = / путь / в / FOLDER /: $ XDG_DATA_DIRS% F"