我可以将不同于主要主题的GTK3主题应用于单个应用程序吗?


46

例如,我可以将“氛围”作为主要主题,但可以将基本主题分配给基本应用程序吗?


8
当前答案有关Gtk2,我问的是Gtk3。
neonboy 2012年

我编辑了问题以更好地反映您的需求。对不起,但是从我的研究简单的答案是,你不能,而不必花费一些精力建立一个新的“混合动力”的主题为@Kush解释:(这不是那么简单,GTK2了。
ISH

Answers:


32

您可以使用GTK环境变量GTK_THEME=elementary来启动具有基本主题的应用程序。例如,运行GTK_THEME=elementary pantheon-files将使用基本GTK主题启动基本文件应用程序。

为了使此功能在您每次启动特定应用程序时都适用,最好的选择是创建一个自定义.desktop文件(启动器)。

创建一个自定义.desktop文件

  1. 打开文件浏览器
  2. 导航 /usr/share/applications/
  3. 复制您要使用基本主题启动的应用程序的启动器(突出显示和Ctrl + C)
  4. 导航到~/.local/share/applications/并粘贴启动器(Ctrl + V)
  5. 右键单击并使用文本编辑器打开启动器
  6. 修改以开头的行,Exec=以包含该行Exec=env GTK_THEME=elementary,然后包含该行的先前现有内容。(因此Exec=pantheon-files将成为Exec=env GTK_THEME=elementary pantheon-files
  7. 保存并关闭文件

下次您从Unity(或您选择的应用启动器)启动应用程序时,它将使用基本主题。

奖励:使用命令行时可正常使用

从命令行启动应用程序时,您可能还希望应用程序以基本主题启动。为此:

  1. 打开您的终端应用
  2. 类型alias pantheon-files="GTK_THEME=elementary pantheon-files"(替换pantheon-files为所需的应用)
  3. 按Enter

注意事项:

  1. 这不会将窗口管理器的主题更改为基本主题。
  2. 这(设计使然)仅适用于您的帐户,不适用于root或计算机上的其他任何人。
  3. 主题名称为cAsE-sEnsItiVe,应与主题文件夹名称匹配。

资料来源:

  1. 我是基本贡献者;)
  2. GTK + 3参考手册:运行GTK +应用程序
  3. 在.desktop文件中设置变量

好的答复,但我无法使它适用于任何主题。您可以举一个使用终端的例子,find /usr/share/themes -type d -name 'gtk-3.0' | awk -F'/' '{print $5}'gedit进行演示吗?例如,GTK_THEME="HighContrast" geditenv GTK_THEME="HighContrast" geditGTK_THEME=Adwaita:dark gedit...什么都没有。
Redsandro 2014年

我只是对其进行了更改/usr/share/applications/<appname>.desktop而对我有用。
德鲁·查平

从应用程序内的代码执行此操作的任何方法?
Anony-Mousse 2014年

1
值得注意的是主题名称区分大小写。
塞德里克·赖兴巴赫

这适用于某些应用程序,但不适用于所有应用程序。

10

这个问题仍然有效,我找到了一种方法:

  • 创建任何文件夹 path/to/MY_FOLDER
  • 在其中创建一个/share/themes/文件夹(即path/to/MY_FOLDER/share/themes)。
  • 将任何GTK3主题放入后者
  • 主题重命名为当前活动主题的名称。

    最后,此命令将使应用程序使用重命名的主题,而不是当前活动的主题:

GTK_DATA_PREFIX=path/to/MY_FOLDER YOUR_APPLICATON

(之后的路径GTK_DATA_PREFIX=必须是(且仅是包含 文件夹的路径/share/themes/RENAMED_THEME。这就是为什么不是 path/to/MY_FOLDER/share/themes/RENAMED_THEME,而只是path/to/MY_FOLDER。)

要将其放在启动器中,请相应地进行替换:

Exec=sh -c 'GTK_DATA_PREFIX=path/to/MY_FOLDER YOUR_APPLICATION'

1
现在,即使我在Eclipse中也可以使用,与我尝试的其他答案不同。
Ruslan

2
我们到底要使用哪个文件/文件夹GTK_DATA_PREFIX
runDOSrun

1
这相当令人困惑,但是我已经弄清楚并编辑了答案。

另一种方法是将特定于应用程序的重命名主题放入~/.themes(当前活动目录必须位于中/usr/share/themes),然后使用一些路径GTK_DATA_PREFIX=path/to/nowhere 启动该应用程序,这会将应用程序主题重置为当前主题,只有它首先出现 ~/.themes并采用一个同名的。

1
@runDOSrun-之后的路径GTK_DATA_PREFIX=必须是(且仅是包含 该文件夹的路径/share/themes/RENAMED_THEME。这就是为什么不是 FOLDER/share/themes/RENAMED_THEME,而仅仅是FOLDER

8

当然有可能,我没有太多的主题创作经验,但是当您导航到/usr/share/themes/*Theme Name*/gtk-3.0/apps/目录时,您会找到.css文件,它们以目标为主题的应用程序命名,因此可以创建特定于应用程序的主题。

请注意,您提到的主题,你的应用程序可能需要一些工作的方式来完成(如同时兼具的氛围和基础工作,因为每个主题都有其特定应用程式的造型做了顶部的基本文件(文件gtkrc的Gtk 2.0gtk.css对于Gtk3.0则为文件)。

而且此基本主题文件包含专门针对给定主题的样式规则,因此,如果不进行一些大的更改,就无法从Ambiance的基本主题文件中创建基本的外观,即使您这样做,也会使Ambiance的外观变松。

另外,在GNOME中,一次只能应用一个主题,例如,如果您在Ubuntu 12.04中使用了Appearance窗口,那么您知道可以从下拉菜单中选择任何单个主题(如果您使用gnome-tweak-tool,您可以为Gtk,窗口框架和图标设置不同的主题,但是仍然不允许将特定的应用程序作为主题,因此,正如我之前说的,如果您聪明地使用它,则可以为不同的应用程序设置完全不同的主题。基本主题文件,到目前为止,没有第三方应用程序可以单独执行。

您可以自己完成此操作的一种方法是,让基本主题文件(gtk.css)仅具有对于任何主题都是中性的基本规则,无论是深色还是浅色。并且将实际主题设计写在上述目录中的特定于应用程序的文件中,即,要对Nautilus进行样式设置,您可以在nautilus.css文件中编写所有必需的属性。与您希望定位的每个应用程序相同。显然,这样做需要一些体面的Gtk主题体验。

你可以参考这个使用模板创建自己的主题,也有一个像样的文档上的GTK +更换主题皮肤。


7
我不想创建一个新主题,我想分配一个现有主题。
neonboy 2012年

@neonboy:正如我说的那样,对于GTK3来说,它不是那么简单,一个主题分布在多个文件中,如果不满足依赖关系,那么残破的主题就可以解决。这就是为什么我发布的答案显示了GTK3(而不是GTK2)的可能解决方案(在其中这样做相当容易)。
Kushal 2012年

5

是的,简单的方法是在运行应用程序的命令中将应用程序指向rc文件所在的必需路径:

GTK2_RC_FILES=/usr/share/themes/Redmond/gtk-2.0/gtkrc inkscape

这在12.04上用于inkscape(仍然是Gnome2 btw)产生了:

具有Windows主题的inkscape窗口

在此处查看有关Gtk2主题的更多信息。


7
问题是关于Gtk3而不是Gtk2,谢谢。
neonboy 2012年

您没有在原始问题中指定。请不要对抗提问者。
Martin Owens -doctormo- 2012年

5
最初是“我可以为单个应用程序使用不同的GTK3主题吗?” 直到问题仍然存在Gtk3主题,然后foss自由让我对无效的答案发表评论,并在必要时编辑问题,我不反对任何人。
neonboy 2012年

1

是的,您可以,实际上我在Google上搜索了一些答案:

  1. 查找要更改主题的程序的确切可执行文件。例如,如果您希望将其用于办公室,则输入which ooffice终端。
  2. 查找所有应用程序放入其二进制可执行文件的bin文件夹。输入echo $PATH终端,你将GE的路径。我建议您通过键入以下内容在主目录中创建一个bin文件夹mkdir ~/bin
  3. 键入gedit ~/.bashrc打开您的bash rc文件。
  4. 转到此文件的底部并添加此行 export PATH=~/bin:${PATH}

现在,我们将创建一个脚本,该脚本将以自定义主题执行您的程序:

  1. 通过键入以下内容来创建应用程序的脚本文件: gedit ~/bin/ooffice
  2. 在打开的文件中键入以下行:

    #!/bin/bash
    env GTK2_RC_FILES=/usr/share/themes/SlicknessX/gtk-2.0/gtkrc /usr/bin/ooffice "$@"
    
  3. 通过键入:将文件的模式更改为可执行文件chmod +x ~/bin/ooffice

希望这会有所帮助,您只需要记住一件事,即脚本的格式,如下所示:

#!/bin/bash
env GTK2_RC_FILES=PATH_TO_GTKRC PATH_TO_EXECUTABLE "$@"

使用GTK2_RC_FILES env的GTK2应用程序当然可以实现。变量。另外,您在谈论编译的主题是什么?问题是关于Ubuntu中可用的系统范围GTK主题。
ish 2012年

1
我相信您提到的方法将Gtk2.0作为目标,而Ubuntu 12.04使用Gtk3.0作为主题,因此可能无法使用。
库沙尔(Kushal)2012年

6
抱歉,这是Gtk2的解决方案,有关Gtk3的问题。
neonboy 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.