Я в настоящее время создаю клиент для наших пользователей на работе с ПОМОЩНИКОМ Ubuntu 15.10 и Доска как прикрепление. Но когда я нажимаю, например, значок Firefox в прикреплении, ничего не происходит, пока это внезапно не открывается после> 10 секунд, никакой значок загрузки как указатель мыши или что-то как этот.
Теперь существует ли способ сделать пользовательский экран-заставку как тот в LibreOffice? Или просто создайте окно как "Firefox, запускается...", который закрывается, после того как приложение открыто?
Спасибо!
Можно использовать GTK
gtk_window_set_decorated()
создать окно всплеска без (любых) художественных оформлений. Объединенный с gtk_window_set_position()
, можно в значительной степени создать пользовательский экран-заставку.
Пример
(script1, окно всплеска):
#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk, Pango
class Splash(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="splashtitle")
maingrid = Gtk.Grid()
self.add(maingrid)
maingrid.set_border_width(80)
# set text for the spash window
label = Gtk.Label("Eat bananas while you are waiting for Firefox")
label.modify_font(Pango.FontDescription('Ubuntu 22'))
maingrid.attach(label, 0, 0, 1, 1)
def splashwindow():
window = Splash()
window.set_decorated(False)
window.set_resizable(False)
window.set_position(Gtk.WindowPosition.CENTER)
window.show_all()
Gtk.main()
splashwindow()
который создает экран-заставку как:
Конечно, можно выбрать любой цвет фона, шрифт и fontsize, изображения и т.д., в зависимости от вкуса, но это - основная идея.
Для уничтожения экрана-заставки однажды, окно приложения появляется, Вам будет нужен сценарий, чтобы ожидать окна приложения и (действительно) уничтожить процесс, который выполняет окно.
(script2, обертка)
#!/usr/bin/env python3
import subprocess
import time
# set the application below
application = "firefox"
# set the path to the splash script below
path = "/path/to/splash_screen.py"
subprocess.Popen([application])
subprocess.Popen(["python3", path])
while True:
time.sleep(0.5)
try:
pid = subprocess.check_output(["pidof", application]).decode("utf-8").strip()
w_list = subprocess.check_output(["wmctrl", "-lp"]).decode("utf-8")
if pid in w_list:
splashpid = [l.split()[2] for l in w_list.splitlines()\
if "splashtitle" in l][0]
subprocess.Popen(["kill", splashpid])
break
except subprocess.CalledProcessError:
pass
Потребности сценария (2) wmctrl
:
sudo apt-get install wmctrl
Скопируйте script1 (экран-заставка) в пустой файл, сохраните его как splash_screen.py
. Изменение, если Вы хотите текст для экрана-заставки (но почему был бы Вы :))
label = Gtk.Label("Eat more bananas while you wait for Firefox")
Скопируйте script2 в пустой файл, сохраните его как splash_wrapper.py
В главном разделе сценария измените путь в строке:
path = "/path/to/splash_screen.py"
в фактический путь (между кавычками)
Теперь выполните установку командой:
python3 /path/to/splash_wrapper.py
и Ваш экран-заставка появится при выполнении обертки он исчезнет, после того как Firefox на самом деле запускается.
Как упомянуто выше пример довольно прост. Конечно, можно сделать это намного более гладким, сутенер экран-заставка всеми возможными способами, или даже сделать его полу - прозрачным:
(код:)
#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk, Pango
class Splash(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="splashtitle")
maingrid = Gtk.Grid()
self.add(maingrid)
maingrid.set_border_width(80)
# set text for the spash window
label = Gtk.Label("Eat bananas while you are waiting for Firefox")
label.modify_font(Pango.FontDescription('Ubuntu 22'))
maingrid.attach(label, 0, 0, 1, 1)
def splashwindow():
window = Splash()
window.set_decorated(False)
window.set_resizable(False)
window.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0,0,0,1))
window.modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("grey"))
window.set_opacity(0.8)
window.set_position(Gtk.WindowPosition.CENTER)
window.show_all()
Gtk.main()
splashwindow()
или включайте изображение:
(код:)
#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk, Pango
class Splash(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="splashtitle")
maingrid = Gtk.Grid()
self.add(maingrid)
image = Gtk.Image()
# set the path to the image below
image.set_from_file("/path/to/image.png")
maingrid.attach(image, 1, 0, 1, 1)
maingrid.set_border_width(40)
# set text for the spash window
label = Gtk.Label("Eat bananas while you are waiting for Firefox")
label.modify_font(Pango.FontDescription('Ubuntu 15'))
maingrid.attach(label, 0, 0, 1, 1)
def splashwindow():
window = Splash()
window.set_decorated(False)
window.set_resizable(False)
window.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0,0,0,1))
window.modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("grey"))
window.set_opacity(0.8)
window.set_position(Gtk.WindowPosition.CENTER)
window.show_all()
Gtk.main()
splashwindow()
и так далее...
Кроме того, можно подать заявку и текстовые аргументы обоих сценариев и т.д., но это - основная идея.
Если Вы не хотите, чтобы значок появился в Единице (или любой другой диспетчер задач, как Доска), можно просто добавить строку к __init__
раздел:
self.set_skip_taskbar_hint(True)