Crie uma janela inicial
Você pode usar GTK
de gtk_window_set_decorated()
para criar uma janela inicial sem (nenhuma) decoração. Combinado com gtk_window_set_position()
, você pode criar uma tela inicial personalizada.
Um exemplo
(script1, a janela inicial) :
#!/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()
que cria uma tela inicial como:
Claro,vocêpodedefinirqualquercordefundo,fonteetamanhodafonte,imagens,etc.,dependendodoseugosto,masessaéaidéiabásica.
Façaatelainicialdesaparecerseajaneladoaplicativoaparecer
Paramataratelainicialassimqueajaneladoaplicativoaparecer,vocêprecisarádeumscriptparaaguardarajaneladoaplicativoe(defato)mataroprocessoqueexecutaajanela.
(script2,owrapper)
#!/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
Como usar
-
O script (2) precisa de
wmctrl
:sudo apt-get install wmctrl
-
Copie o script1 (a tela inicial) em um arquivo vazio, salve-o como
splash_screen.py
. Mude se você quiser o texto para a tela inicial (mas por que você faria :))label = Gtk.Label("Eat more bananas while you wait for Firefox")
-
Copie o script2 em um arquivo vazio, salve-o como
splash_wrapper.py
Na seção head do script, altere o caminho na linha:path = "/path/to/splash_screen.py"
no caminho real (entre aspas)
-
Agora execute a configuração pelo comando:
python3 /path/to/splash_wrapper.py
e sua tela inicial aparecerá se você executar o wrapper, ele desaparecerá assim que o Firefox for iniciado.
Notas
Como mencionado, o exemplo acima é bastante simples. É claro que você pode torná-lo muito mais suave, manipular a tela inicial de todas as formas possíveis ou até mesmo torná-la semitransparente:
(código:)
#!/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()
ou inclua uma imagem:
(código:)
#!/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()
e assim por diante ...
Além disso, você pode fazer o aplicativo e o texto argumentos de ambos os scripts, etc., mas essa é a idéia básica.
Nenhum ícone na unidade / lista de tarefas?
Se você não quiser que um ícone apareça no Unity (ou em qualquer outro gerenciador de tarefas, como o Plank), basta adicionar uma linha à seção __init__
:
self.set_skip_taskbar_hint(True)