Gtk/python与可移植性

2024-04-23 17:29:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

当您编写代码时,Gnome vs KDE发行版是如何进入画面的?在

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

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

找出我的代码在哪些发行版上工作的最佳来源是什么?在


Tags: 代码fromimport脚本应用程序uigtk标准
2条回答

Python基本上是一种胶语言——它本身并没有什么作用,但取决于各种库,比如Pygtk、Tcter等等,甚至是你的自定义C/C++模块。去做它的事。因此,从逻辑上讲,您所需要的只是所述库的特定依赖项:要在目标计算机上安装PyGTK&WebKit。在

一旦你把它们和Python一起安装到Windows甚至MAC上,Python就会很高兴地执行这些代码,因为它所做的只是胶水!!在

编写跨分发用户界面时,不需要考虑太多东西。
实际上,我记得的唯一不兼容问题是:

托盘图标或通知区或应用程序指示器(在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

相关问题 更多 >