現在、Ubuntu MATE 15.10およびPlankをドックとして使用しているユーザー向けのクライアントを構築しています。しかし、例えばドック内の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()
次のようなスプラッシュ画面が作成されます。
もちろん、好みに応じてany背景色、フォントとフォントサイズ、画像などを設定できますが、これは基本的な考え方です。
アプリケーションのウィンドウが表示されたら、スプラッシュスクリーンをkillするには、アプリケーションウィンドウを待機するスクリプトが必要になります。ウィンドウを実行します。
(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
として保存します。スクリプトのheadセクションで、次の行のパスを変更します。
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()
等々...
さらに、両方のスクリプトなどのアプリケーションとテキスト引数を作成できますが、これは基本的な考え方です。
Unity(またはPlankのような他のタスクマネージャー)にアイコンを表示したくない場合は、__init__
セクションに行を追加するだけです。
self.set_skip_taskbar_hint(True)