如何处理多个常见用户界面?

nik*_*api 7 python user-interface code-reuse pygtk maemo

我正在开发一个运行在两个不同平台上的python应用程序,即常规桌面linux和Maemo 4.我们在两个平台上使用PyGTK,但是在Maemo上有一些小调整使它看起来很好,实现如下:

if util.platform.MAEMO:
    # do something fancy for maemo
else:
    # regular pygtk
Run Code Online (Sandbox Code Playgroud)

在Maemo 4中,大约有15个if语句需要让UI看起来很好用.

这一直是非常容易管理的.问题是前一段时间发布了Maemo的新版本(5,aka fremantle),与Maemo 4相比,它有一些很大的不同.我不想在整个GUI代码中添加一堆检查,以便让所有3个平台在相同的代码库中运行良好,因为这会变得混乱.我也不想为每个平台创建原始GUI代码的副本,只需为特定平台修改它(我想尽可能多地重用代码).

那么,对于基于相同核心UI代码的不同平台,有哪些方法可以使用稍微不同的UI?我不认为这是一个python或Maemo特定的问题,我只想知道这是怎么做的.

Kal*_*son 10

您可以在工厂中完成大部分工作:

def createSpec():
  if util.platform.MAEMO: return Maemo4Spec()
  elif util.platform.MAEMO5: return Maemo5Spec()
  return StandardPyGTKSpec()
Run Code Online (Sandbox Code Playgroud)

然后,在代码的早期某处,您只需调用该工厂:

 spec = createSpec()
Run Code Online (Sandbox Code Playgroud)

现在,除了你有条件的其他地方,你只需要调用必要的功能:

 spec.drawComboBox()
Run Code Online (Sandbox Code Playgroud)

只要drawComboBox()处理特定于平台的任何内容,您就应该处于良好状态.


Nou*_*him 0

您可以将需要执行的特定于平台的操作隔离到platform模块内一致命名的小函数中,使用您正在运行的平台创建正确的函数名称,然后创建getattr正确的函数名称并调用它。if/else 样板就会消失。