der*_*ann 7 firefox window-decoration application-development gtk3
我目前正在为我们的用户构建一个客户端,使用 Ubuntu MATE 15.10 和 Plank 作为码头。但是,例如,当我单击 Dock 中的 Firefox 图标时,没有任何反应,直到它在 > 10 秒后突然弹出,没有加载图标作为鼠标指针或类似的东西。
现在有没有办法像 LibreOffice 中的那样制作自定义启动画面?或者只是创建一个像“Firefox正在启动...”这样的窗口,一旦应用程序打开就会关闭?
谢谢!
Jac*_*ijm 15
您可以使用GTK
'sgtk_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()
Run Code Online (Sandbox Code Playgroud)
这会创建一个启动画面,如:
当然,您可以根据自己的喜好设置任何背景颜色、字体和字体大小、图像等,但这是基本思想。
为了杀闪屏一旦应用程序的窗口出现时,你需要一个脚本来等待应用程序窗口,(确实)杀死在运行窗口中的过程。
(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
Run Code Online (Sandbox Code Playgroud)
脚本 (2) 需要wmctrl
:
sudo apt-get install wmctrl
Run Code Online (Sandbox Code Playgroud)将 script1(启动画面)复制到一个空文件中,将其另存为splash_screen.py
. 如果您想要初始屏幕的文本,请更改(但您为什么要:))
label = Gtk.Label("Eat more bananas while you wait for Firefox")
Run Code Online (Sandbox Code Playgroud)将script2复制到一个空文件中,另存为splash_wrapper.py
在脚本的head部分,修改行中的路径:
path = "/path/to/splash_screen.py"
Run Code Online (Sandbox Code Playgroud)
进入实际路径(引号之间)
现在通过命令运行设置:
python3 /path/to/splash_wrapper.py
Run Code Online (Sandbox Code Playgroud)
如果您运行包装器,您的启动画面就会出现,一旦 Firefox 实际启动,它就会消失。
如上所述,上面的示例非常简单。当然,你可以让它更平滑,以所有可能的方式拉皮条启动屏幕,甚至让它半透明:
(代码:)
sudo apt-get install wmctrl
Run Code Online (Sandbox Code Playgroud)
或包含图像:
(代码:)
label = Gtk.Label("Eat more bananas while you wait for Firefox")
Run Code Online (Sandbox Code Playgroud)
等等...
此外,您可以制作应用程序和两个脚本的文本参数等,但这是基本思想。
如果您不希望图标出现在 Unity(或任何其他任务管理器,如 Plank)中,您只需在该__init__
部分添加一行:
path = "/path/to/splash_screen.py"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5243 次 |
最近记录: |