Найти - Пользователи
Полная версия: Темы в приложении c Gtk+3.x
Начало » Python для новичков » Темы в приложении c Gtk+3.x
1
ZIL130
Имеется макет с кодом ниже.
Работает Gtk.CssProvider. Имеются три файла CSS.
Может кто нибудь подсказать как из функции в приложении вытащить переменные с именами файлов и тем и “запихнуть” их в Provider?
Заранее благодарен.
Код макета:
 #!/usr/bin/env/python3
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk, Gio
class MyWindow(Gtk.Window):
    def __init__(self):
        super().__init__(title="sablon")
        
        grid = Gtk.Grid()
        grid.set_column_spacing(10)
        grid.set_row_spacing(10)
        self.add(grid)
        
        self.menubar = Gtk.MenuBar()
        self.menubar.set_hexpand(True)
        self.subMenu1 = Gtk.Menu()
        self.menuTheme = Gtk.MenuItem(label = "Темы")
        self.menubar.append(self.menuTheme)
        self.itemBanan = Gtk.MenuItem(label = "Банан")
        self.itemPerl = Gtk.MenuItem(label = "Жемчуг")
        self.itemBisq = Gtk.MenuItem(label = "Бисквит")
        self.subMenu1.append(self.itemBanan)
        self.subMenu1.append(self.itemPerl)
        self.subMenu1.append(self.itemBisq)
        self.menuTheme.set_submenu(self.subMenu1)
        self.itemBanan.connect("activate", self.themeSwap)
        self.itemPerl.connect("activate", self.themeSwap)
        self.itemBisq.connect("activate", self.themeSwap)
        
        ent1 = Gtk.Entry()
        ent2 = Gtk.Entry()
        ent3 = Gtk.Entry()
        
        grid.attach(self.menubar, 0, 0, 3, 1)
        grid.attach(ent1, 0, 1, 1, 1)
        grid.attach(ent2, 1, 2, 1, 1)
        grid.attach(ent3, 2, 3, 1, 1)
        
        provider = Gtk.CssProvider()
        provider.load_from_file(Gio.File.new_for_path('banan.css'))
        Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
        self.get_style_context().add_class('banan')
        
    def themeSwap(self, event):
        self.itemName = self.subMenu1.get_active()
        if self.itemName == self.itemBanan:
            self.fileName = 'banan.css'
            self.className = 'banan'
        elif self.itemName == self.itemPerl:
            self.fileName = 'perl.css'
            self.className = 'perl'
        elif self.itemName == self.itemBisq:
            self.fileName = 'bisq.css'
            self.className = 'bisq'
        #return(self.fileName, self.className)
        print(self.fileName, self.className)
        
if __name__ == '__main__':
    window = MyWindow()
    window.connect("destroy", Gtk.main_quit)
    window.show_all()
    Gtk.main()
ZIL130
Ответ естественно нашёлся.
Переносим Провайдер в функцию.
Но если вы хотите чтобы был сброс до дефолтной системной темы – указывайте путь для темы в вашей системе.
В примере указан путь для линукс-минт.
 def themeSwap(self, event, *args):
        self.itemName = self.subMenu1.get_active()
        if self.itemName == self.itemBanan:
            fileName = 'banan.css'
            className = 'banan'
        elif self.itemName == self.itemPerl:
            fileName = 'perl.css'
            className = 'perl'
        elif self.itemName == self.itemBisq:
            fileName = 'bisq.css'
            className = 'bisq'
        elif self.itemName == self.itemDef:
            fileName = '/usr/share/themes/Adwaita-dark/gtk-3.0/gtk.css'
            className = 'Adwaita-dark'
        provider = Gtk.CssProvider()
        provider.load_from_file(Gio.File.new_for_path(fileName))
        Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
        self.get_style_context().add_class(className)  
Сами CSS файлы – что то типа такого:
 .bisq {
    background-color: rgb(234, 230, 202);
    color: rgb(50, 20, 20);
    }
Здесь задан только цвет фона главного окна. Остальное – добавляйте по вкусу.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB