4

程序员如何编写适用于多个发行版的可移植 UI 代码?我正在考虑桌面发行版,而不是专门/嵌入式发行版。对于编写 UI 应用程序,您必须假设某些东西将作为标准或通过添加的依赖项在平台上可用。Linux 发行版是否有一个“最低”的 UI/widget 标准?

当您编写代码时,Gnome 与 KDE 发行版是如何形成的?

我有一个使用 Gtk 和 Webkit 的 python 脚本。以下是我的脚本使用的导入。

import os
import threading
from gi.repository import WebKit 
from gi.repository import Gtk 
from gi.repository import GLib, GObject

找出我的代码适用于哪些发行版的最佳来源是什么?

4

2 回答 2

1

编写跨发行版 UI 无需考虑太多东西。
实际上,我记得的唯一不兼容问题是:

托盘图标或通知区域或应用程序指示器(在 Ubuntu 中称为)
例如标准托盘图标(gtk.StatusIcon由默认情况下在 Ubuntu 的 Unity 中创建不起作用如果找到 appindicator 模块,则
最好使用appindicator.Indicator,否则只需使用经典StatusIcon

如果你太在意程序的风格/主题,你可能会在其他环境(如 KDE)上遇到问题,
除非你使用合适的主题引擎来充当桥梁,否则请查看:
https ://wiki.archlinux.org /index.php/Uniform_Look_for_Qt_and_GTK_Applications

为了了解发行版/操作系统,我编写了这样一个函数:

def getOsFullDesc():
    name = ''
    if os.path.isfile('/etc/lsb-release'):
        lines = open('/etc/lsb-release').read().split('\n')
        for line in lines:
            if line.startswith('DISTRIB_DESCRIPTION='):
                name = line.split('=')[1]
                if name[0]=='"' and name[-1]=='"':
                    return name[1:-1]
    if os.path.isfile('/suse/etc/SuSE-release'):
        return open('/suse/etc/SuSE-release').read().split('\n')[0]
    try:
        import platform
        return ' '.join(platform.dist()).strip().title()
        #return platform.platform().replace('-', ' ')
    except ImportError:
        pass
    if os.name=='posix':
        osType = os.getenv('OSTYPE')
        if osType!='':
            return osType
    ## sys.platform == 'linux2'
    return os.name
于 2013-07-29T18:22:31.620 回答
0

Python 基本上是一种胶水语言——它自己做的不多,但依赖于各种库,如 pygtk、tkinter 等,甚至是你的自定义 C/C++ 模块。做它的事情。所以从逻辑上讲,您所需要的只是您所说的库的特定依赖项:PyGTK 和 WebKit 要安装在您的目标机器上。

一旦将它们与 Python 一起安装在 Windows 甚至 MAC 上,python 将很高兴地执行此代码,因为它所做的只是粘合!!

于 2013-04-06T03:28:01.210 回答