def start_app(datadir):
global splash_win
if not options.no_splash:
solfege.splash_win = splash_win = SplashWin()
time.sleep(0.1)
Gdk.flush()
while Gtk.events_pending():
Gtk.main_iteration()
else:
solfege.splash_win = splash_win = None
style_provider = Gtk.CssProvider()
with open("solfege.css", "r") as f:
css = f.read()
try:
style_provider.load_from_data(css)
except GObject.GError, e:
print e
pass
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(), style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
GObject.timeout_add(1, start_gui, datadir)
Gtk.main()
python类CssProvider()的实例源码
def gtk_style():
css = b"""
#button {
color: #ffffff;
background: #e80606;
}
#servo {
color: #ffffff;
background: #d80606;
}
"""
style_provider = Gtk.CssProvider()
style_provider.load_from_data(css)
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
def gtk_style():
css = b"""
#button {
color: #ffffff;
background: #e80606;
}
#servo {
color: #ffffff;
background: #d80606;
}
"""
style_provider = Gtk.CssProvider()
style_provider.load_from_data(css)
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
def do_activate(self):
print("Activating...")
if not self._window:
current_dir = os.path.dirname(os.path.abspath(__file__))
css_provider = Gtk.CssProvider()
css_provider.load_from_path(pkg_resources.resource_filename('ez_gpg',
'data/application.css'))
screen = Gdk.Screen.get_default()
style_context = Gtk.StyleContext()
style_context.add_provider_for_screen(screen,
css_provider,
Gtk.STYLE_PROVIDER_PRIORITY_USER)
self._window = MainWindow(self)
self._window.show_all()
self.add_window(self._window)
self._window.present()
def main():
win = Window()
# allow keyboard interrupt / nodemon to end program cleanly
for sig in [signal.SIGINT, signal.SIGTERM, signal.SIGUSR2]:
signal.signal(sig, lambda _s, _f: win.on_delete())
style_provider = Gtk.CssProvider()
style_provider.load_from_path(os.path.dirname(os.path.realpath(__file__)) + "/apart.css")
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
win.show_all()
Gtk.main()
def __init__(self):
Gtk.Application.__init__(self,
application_id="org.gnome.IconRequests",
flags=Gio.ApplicationFlags.FLAGS_NONE)
GLib.set_application_name(_("Icon Requests"))
GLib.set_prgname("Icon Requests")
Gtk.Settings.get_default().set_property(
"gtk-application-prefer-dark-theme", settings.get_is_night_mode())
self.menu = Gio.Menu()
cssProviderFile = Gio.File.new_for_uri(
'resource:///org/gnome/IconRequests/css/style.css')
cssProvider = Gtk.CssProvider()
screen = Gdk.Screen.get_default()
styleContext = Gtk.StyleContext()
try:
cssProvider.load_from_file(cssProviderFile)
styleContext.add_provider_for_screen(screen, cssProvider,
Gtk.STYLE_PROVIDER_PRIORITY_USER)
logging.debug("Loading css file ")
except Exception as e:
logging.error("Error message %s" % str(e))
def __init__(self):
self.builder = Gtk.Builder()
self.builder.set_translation_domain(cli.appname)
#load tlcalculator and subordinated window glade files
self.builder.add_from_file(cli.gladefile[0])
self.builder.add_from_file(cli.gladefile[1])
#initiate custom css
#...encode() is needed because CssProvider expects byte type input
with open(cli.stylesheet,"r") as f:
css = f.read().encode()
style_provider = Gtk.CssProvider()
style_provider.load_from_data(css)
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
def gtk_change_visuals(self, light_option="unchanged", theme="unchanged"):
if Gtk.MAJOR_VERSION >= 3 and Gtk.MINOR_VERSION >= 14:
css_filename = "gtk"
filename = ""
if theme == "metro" or theme == "paper":
self.gtk_theme = theme
if light_option == "gtk" or light_option == "gtk-dark":
self.lightsOption = light_option
filename = 'gui/' + self.gtk_theme + '/'+ self.lightsOption + '.css'
css = open(filename, 'r')
style_provider = Gtk.CssProvider()
css_data = css.read()
css.close()
style_provider.load_from_data(css_data)
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
def __init_css(self):
"""
Initialize the main css files and providers.
Add css classes to the default screen style context.
"""
if Gtk.get_minor_version() > 18:
log.debug("Fanciest design possible")
cssProviderFile = Gio.File.new_for_uri(
"resource:///de/geigi/cozy/application.css")
else:
log.debug("Using legacy css file")
cssProviderFile = Gio.File.new_for_uri(
"resource:///de/geigi/cozy/application_legacy.css")
cssProvider = Gtk.CssProvider()
cssProvider.load_from_file(cssProviderFile)
# add the bordered css class to the default screen for the borders around album art
screen = Gdk.Screen.get_default()
styleContext = Gtk.StyleContext()
styleContext.add_provider_for_screen(
screen, cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_USER)
styleContext.add_class("bordered")
def __init__(self, context, on_skip, on_postpone, style_sheet_path):
self.context = context
self.count_labels = []
self.display = Display()
self.enable_postpone = False
self.enable_shortcut = False
self.is_pretified = False
self.keycode_shortcut_postpone = 65
self.keycode_shortcut_skip = 9
self.on_postpone = on_postpone
self.on_skip = on_skip
self.shortcut_disable_time = 2
self.strict_break = False
self.windows = []
# Initialize the theme
css_provider = Gtk.CssProvider()
css_provider.load_from_path(style_sheet_path)
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
def __init__(self):
Gtk.Application.__init__(self,
application_id="org.gnome.Authenticator",
flags=Gio.ApplicationFlags.FLAGS_NONE)
GLib.set_application_name(_("Gnome Authenticator"))
GLib.set_prgname("Gnome Authenticator")
self.observable = ApplicaitonObservable()
self.menu = Gio.Menu()
self.db = Database()
result = GK.unlock_sync("org.gnome.Authenticator", None)
if result == GK.Result.CANCELLED:
self.quit()
Gtk.Settings.get_default().set_property(
"gtk-application-prefer-dark-theme", settings.get_is_night_mode())
if Gtk.get_major_version() >= 3 and Gtk.get_minor_version() >= 20:
cssFileName = "org.gnome.Authenticator-post3.20.css"
else:
cssFileName = "org.gnome.Authenticator-pre3.20.css"
cssProviderFile = Gio.File.new_for_uri(
'resource:///org/gnome/Authenticator/%s' % cssFileName)
cssProvider = Gtk.CssProvider()
screen = Gdk.Screen.get_default()
styleContext = Gtk.StyleContext()
try:
cssProvider.load_from_file(cssProviderFile)
styleContext.add_provider_for_screen(screen, cssProvider,
Gtk.STYLE_PROVIDER_PRIORITY_USER)
logging.debug("Loading css file ")
except Exception as e:
logging.error("Error message %s" % str(e))
def _apply_css(config):
if OSDWindow.css_provider:
Gtk.StyleContext.remove_provider_for_screen(
Gdk.Screen.get_default(), OSDWindow.css_provider)
colors = {}
for x in config['osk_colors'] : colors["osk_%s" % (x,)] = config['osk_colors'][x]
for x in config['osd_colors'] : colors[x] = config['osd_colors'][x]
colors = OSDCssMagic(colors)
try:
css_file = os.path.join(get_share_path(), "osd_styles", config["osd_style"])
css = file(css_file, "r").read()
if ((Gtk.get_major_version(), Gtk.get_minor_version()) > (3, 20)):
css += OSDWindow.CSS_3_20
OSDWindow.css_provider = Gtk.CssProvider()
OSDWindow.css_provider.load_from_data((css % colors).encode("utf-8"))
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
OSDWindow.css_provider,
Gtk.STYLE_PROVIDER_PRIORITY_USER)
except GLib.Error, e:
log.error("Failed to apply css with user settings:")
log.error(e)
log.error("Retrying with default values")
OSDWindow.css_provider = Gtk.CssProvider()
css_file = os.path.join(get_share_path(), "osd_styles", "Classic.gtkstyle.css")
css = file(css_file, "r").read()
if ((Gtk.get_major_version(), Gtk.get_minor_version()) > (3, 20)):
css += OSDWindow.CSS_3_20
OSDWindow.css_provider.load_from_data((css % colors).encode("utf-8"))
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
OSDWindow.css_provider,
Gtk.STYLE_PROVIDER_PRIORITY_USER)
def install_error_css():
if Editor._error_css_provider is None:
Editor._error_css_provider = Gtk.CssProvider()
Editor._error_css_provider.load_from_data(str(Editor.ERROR_CSS))
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
Editor._error_css_provider,
Gtk.STYLE_PROVIDER_PRIORITY_USER)
def _load_css(self):
styleProvider = Gtk.CssProvider()
styleProvider.load_from_resource(self._get_resource_path('gtk.css'))
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
styleProvider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
def do_activate(self):
self._style_provider = Gtk.CssProvider()
self._current_screen = Gdk.Screen.get_default()
css = b""".gedit-view { padding-bottom: 400px }"""
self._style_provider.load_from_data(css)
Gtk.StyleContext.add_provider_for_screen(
self._current_screen,
self._style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
def load_style(self):
"""Load CSS theme."""
style = Gtk.CssProvider()
style.load_from_path(self.__config.software_style_file)
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
style,
Gtk.STYLE_PROVIDER_PRIORITY_USER
)
if self.__config.software_is_dark_style == "true":
settings = Gtk.Settings.get_default()
settings.set_property("gtk-application-prefer-dark-theme", True)
def __init__(self):
# create a new window
window = Gtk.Window()
window.set_position(Gtk.WindowPosition.CENTER)
window.set_name('window')
window.set_title("Input Helper")
window.set_decorated(False)
window.set_default_size(300, 40)
window.connect("destroy", self.destroy)
self.entry = Gtk.Entry()
self.entry.set_name('entry')
self.entry.connect("key_press_event", self.on_key_press)
self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
style_provider = Gtk.CssProvider()
base_dir = os.path.abspath(os.path.dirname(__file__))
css_path = os.path.join(base_dir, 'input_paste.css')
style_provider.load_from_file(Gio.File.new_for_path(css_path))
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
window.add(self.entry)
window.show_all()
def apply_css():
# Tested on Gtk 3.18/3.20
alpha = "popover, .popover { opacity: 0.95; }"
theme = "#notebook header { background: url('"\
+ theme_file + "') no-repeat center; background-size: cover; }"
css = """
#notebook tab { padding: 5px 10px 5px 10px; }
#frame_main border, #frame_find border, #frame_vte border, #frame_status border,
#frame_permission border, #frame_cert border, #frame_cookies border { border-style: none; }
#frame_main, #frame_find, #frame_vte, #frame_status, #frame_permission, #frame_cert, #frame_cookies,
#frame_mime border, #frame_mime { padding: 5px; }
#notebook header { background: none; }
#entry border { border-style: solid; }
#label_x509 { padding: 10px; }
#frame_x509 border { border-width: 0px 0px 1px 0px; }
"""
if trans_pop: css += alpha
if os.path.exists(theme_file):
if is_image_valid(theme_file): css += theme
cssprovider = Gtk.CssProvider()
cssprovider.load_from_data(bytes(css.encode()))
screen = Gdk.Screen.get_default()
stylecontext = Gtk.StyleContext()
stylecontext.add_provider_for_screen(screen, cssprovider, Gtk.STYLE_PROVIDER_PRIORITY_USER)
def __on_startup(self, app):
gtk_settings = Gtk.Settings.get_default()
gtk_settings.set_property("gtk-dialogs-use-header",
self.settings.get_boolean("use-header-bar"))
css_provider = Gtk.CssProvider()
css_provider.load_from_resource(self.get_resource_base_path() + "/gtk/custom.css")
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), css_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
self.statusicon = StatusIcon(self)
self.__action("quit", lambda *arg: self.quit())
self.__action("about", self.__on_app_about)
self.__action("preferences", self.__on_app_preferences)
self.__action("riot-settings", self.__on__riot_settings)
def load_gtk_css(file_):
"""Set custom CSS for Gtk theme"""
style_provider = Gtk.CssProvider()
style_provider.load_from_path(file_)
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
def UI_apply_css(self):
self.style_provider = Gtk.CssProvider()
self.font = 'SourceCodePro'
self.font_size = '16px'
self.font_update()
def _load_custom_css(self):
css_filepath = pathlib.Path(__file__).parent.joinpath("gui_style.css")
with css_filepath.open("rb") as css_file:
css_data = css_file.read()
style_provider = Gtk.CssProvider()
style_provider.load_from_data(css_data)
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(), style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
def __init__(self, title):
Gtk.Frame.__init__(self)
self.set_shadow_type(Gtk.ShadowType.IN)
frame_style = self.get_style_context()
frame_style.add_class("view")
self.size_group = Gtk.SizeGroup()
self.size_group.set_mode(Gtk.SizeGroupMode.VERTICAL)
self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
self.add(self.box)
toolbar = Gtk.Toolbar.new()
toolbar_context = toolbar.get_style_context()
Gtk.StyleContext.add_class(Gtk.Widget.get_style_context(toolbar), "cs-header")
label = Gtk.Label.new()
label.set_markup("<b>%s</b>" % title)
title_holder = Gtk.ToolItem()
title_holder.add(label)
toolbar.add(title_holder)
self.box.add(toolbar)
toolbar_separator = Gtk.Separator(orientation=Gtk.Orientation.HORIZONTAL)
self.box.add(toolbar_separator)
separator_context = toolbar_separator.get_style_context()
frame_color = frame_style.get_border_color(Gtk.StateFlags.NORMAL).to_string()
# css_provider = Gtk.CssProvider()
# css_provider.load_from_data(".separator { -GtkWidget-wide-separators: 0; \
# color: %s; \
# }" % frame_color)
# separator_context.add_provider(css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
self.list_box = Gtk.ListBox()
self.list_box.set_selection_mode(Gtk.SelectionMode.NONE)
self.list_box.set_header_func(list_header_func, None)
self.box.add(self.list_box)
def init_sc_css_provider(toplevel, settings, screen, datadir):
context = toplevel.get_style_context()
theme_name = settings.get_property("gtk-theme-name").lower()
if hasattr(toplevel, '_css_provider'):
# check old provider, see if we can skip setting or remove old
# style provider
if toplevel._css_provider._theme_name == theme_name:
return
else: # clean up old css provider if exixts
context.remove_provider_for_screen(screen, toplevel._css_provider)
# munge css path for theme-name
css_path = os.path.join(datadir,
"ui/gtk3/css/softwarecenter.%s.css" % \
theme_name)
# if no css for theme-name try fallback css
if not os.path.exists(css_path):
css_path = os.path.join(datadir, "ui/gtk3/css/softwarecenter.css")
if not os.path.exists(css_path):
# check fallback exists as well... if not return None but warn
# its not the end of the world if there is no fallback, just some
# styling will be derived from the plain ol' Gtk theme
msg = ("Could not set software-center CSS provider. File '%s' does "
"not exist!")
LOG.warn(msg % css_path)
return
# things seem ok, now set the css provider for softwarecenter
msg = "Softwarecenter style provider for %s Gtk theme: %s"
LOG.debug(msg % (theme_name, css_path))
provider = Gtk.CssProvider()
provider._theme_name = theme_name
toplevel._css_provider = provider
provider.load_from_path(css_path)
context.add_provider_for_screen(screen, provider, 800)
return css_path
def init_sc_css_provider(toplevel, settings, screen, datadir):
context = toplevel.get_style_context()
theme_name = settings.get_property("gtk-theme-name").lower()
if hasattr(toplevel, '_css_provider'):
# check old provider, see if we can skip setting or remove old
# style provider
if toplevel._css_provider._theme_name == theme_name:
return
else: # clean up old css provider if exixts
context.remove_provider_for_screen(screen, toplevel._css_provider)
# munge css path for theme-name
css_path = os.path.join(datadir,
"ui/gtk3/css/softwarecenter.%s.css" % \
theme_name)
# if no css for theme-name try fallback css
if not os.path.exists(css_path):
css_path = os.path.join(datadir, "ui/gtk3/css/softwarecenter.css")
if not os.path.exists(css_path):
# check fallback exists as well... if not return None but warn
# its not the end of the world if there is no fallback, just some
# styling will be derived from the plain ol' Gtk theme
msg = ("Could not set software-center CSS provider. File '%s' does "
"not exist!")
LOG.warn(msg % css_path)
return
# things seem ok, now set the css provider for softwarecenter
msg = "Softwarecenter style provider for %s Gtk theme: %s"
LOG.debug(msg % (theme_name, css_path))
provider = Gtk.CssProvider()
provider._theme_name = theme_name
toplevel._css_provider = provider
provider.load_from_path(css_path)
context.add_provider_for_screen(screen, provider, 800)
return css_path
def add_widget_custom_css(widget, style):
priority = Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
provider = Gtk.CssProvider()
context = widget.get_style_context()
filename = relative_path(style)
if os.path.exists(filename):
provider.load_from_path(filename)
else:
provider.load_from_data(style.encode())
context.add_provider(provider, priority)
def add_custom_css(style):
screen = Gdk.Screen.get_default()
priority = Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
provider = Gtk.CssProvider()
filename = relative_path(style)
if os.path.exists(filename):
provider.load_from_path(filename)
else:
provider.load_from_data(style.encode())
Gtk.StyleContext.add_provider_for_screen(screen, provider, priority)
def SetupMateMenuBorder(self):
style = self.window.get_style_context()
styleProvider = Gtk.CssProvider()
styleProvider.load_from_data(".background { border-width: %dpt; }" % self.borderwidth)
style.add_provider(styleProvider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
self.border.set_margin_top(self.borderwidth)
self.border.set_margin_bottom(self.borderwidth)
self.border.set_margin_start(self.borderwidth)
self.border.set_margin_end(self.borderwidth)
def __init__(self, appconfig, userconfig, player):
super().__init__(title="MokaPlayer", default_width=1366, default_height=768)
self.logger = logging.getLogger('MainWindow')
self.appconfig = appconfig
self.userconfig = userconfig
self.player = player
self.current_playlist = SongsPlaylist()
self.set_icon_from_file(self.ICON_FILE)
self.has_flowbox_album_loaded = False
self.has_flowbox_artist_loaded = False
self.is_fullscreen = False
style_provider = Gtk.CssProvider()
style_provider.load_from_path(self.CSS_FILE)
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), style_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
if self.userconfig['gtk']['darktheme']:
settings = Gtk.Settings.get_default()
settings.set_property("gtk-application-prefer-dark-theme", True)
self.connect("destroy", self.on_window_destroy)
self.connect("key-press-event", self.on_window_key_press)
self.connect("window-state-event", self.on_window_state_event)
self.builder = Gtk.Builder()
self.builder.add_from_file(self.GLADE_FILE)
self.__get_object()
self.__init_sort_radio()
self.__init_gridview_columns()
self.__init_sidebar()
self.__init_txt_goto()
self.__init_cmb_visualiser()
self.builder.connect_signals(self)
self.player.state_changed.subscribe(self.on_player_state_changed)
self.player.audio_changed.subscribe(self.on_audio_changed)
self.player.volume_changed.subscribe(self.on_volume_changed)
self.__set_current_song_info()
self.on_volume_changed()
self.__show_current_playlist()
GObject.timeout_add(750, self.on_tick, None)
self.logger.info('Window loaded')
if not self.player.library.is_musics_folder_valid():
self.__ask_for_music_folder()
def do_startup(self):
mark_time("in app startup")
self.check_schema()
self.create_data_directory()
Gtk.Application.do_startup(self)
mark_time("basic app startup done")
css = Gtk.CssProvider()
css.load_from_path(CSS_FILE)
screen = Gdk.Screen.get_default()
Gtk.StyleContext.add_provider_for_screen(
screen, css, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
mark_time("CSS loaded")
builder = Gtk.Builder.new_from_file(MENUS_UI_FILE)
self.set_app_menu(builder.get_object('app_menu'))
mark_time("menus loaded")
self.actions = self.Actions(self)
if not hasattr(self, 'set_accels_for_action'):
self.set_accels_for_action = self.fallback_set_accels
self.set_accels_for_action("win.detail-level::chronological", ["<Alt>1"])
self.set_accels_for_action("win.detail-level::grouped", ["<Alt>2"])
self.set_accels_for_action("win.detail-level::summary", ["<Alt>3"])
self.set_accels_for_action("win.time-range::day", ["<Alt>4"])
self.set_accels_for_action("win.time-range::week", ["<Alt>5"])
self.set_accels_for_action("win.time-range::month", ["<Alt>6"])
self.set_accels_for_action("win.show-task-pane", ["F9"])
self.set_accels_for_action("win.show-menu", ["F10"])
self.set_accels_for_action("win.show-search-bar", ["<Primary>F"])
self.set_accels_for_action("win.go-back", ["<Alt>Left"])
self.set_accels_for_action("win.go-forward", ["<Alt>Right"])
self.set_accels_for_action("win.go-home", ["<Alt>Home"])
self.set_accels_for_action("app.edit-log", ["<Primary>E"])
self.set_accels_for_action("app.edit-tasks", ["<Primary>T"])
self.set_accels_for_action("app.help", ["F1"])
self.set_accels_for_action("app.preferences", ["<Primary>P"])
self.set_accels_for_action("app.quit", ["<Primary>Q"])
self.set_accels_for_action("win.report", ["<Primary>D"])
self.set_accels_for_action("win.cancel-report", ["Escape"])
self.set_accels_for_action("win.send-report", ["<Primary>Return"])
mark_time("app startup done")