1

我知道以前有人问过这个问题,但这些问题通常缺乏具体的细节,并导致答案说“这取决于你想要做什么......”所以这个应用程序的主要要点是它检索远程数据(例如文本)和对象(例如图像)。

由于 PHP 和 python 是我觉得很舒服的两种编程语言,我觉得 python 更适合桌面 gui 应用程序。我正在创建一个桌面音乐播放器,这里有一些我想包括的技术规格:

  • 针对远程数据库(这将在 mysql 中)验证用户凭据(如 spotify、skype、英雄联盟)的登录构造。我的想法是为客户端创建一个 web api,以通过 HTTP/HTTPS GET/POST 进行查询
  • 一个客户端 SQLite 数据库,用于存储歌曲的文件名、文件路径和 id3 标签,因此在启动时,应用程序会以歌曲长度、艺术家、专辑、流派(如 iTunes)连续显示每首歌曲
  • 检索远程图像并将其显示在应用程序的框架中(就像 Skype 显示一个人的个人资料图片一样。)
  • 必须是跨平台的(至少在 Windows 和 Mac 中),在不同的操作系统中看起来是原生的,但原生的外观和感觉应该很容易被自定义样式覆盖(例如带有渐变的圆形按钮。)
  • Windows 和 Mac 的编译应该相对简单

在 PyQt、PyGTK、Tkinter、wxPython、Pyjamas、PyGObject 和 PySide 等流行的 python gui 工具包中,它们非常适合我的应用程序,为什么?为什么其他人不太适合这些规格?哪些有良好的文档和活跃的社区?

4

5 回答 5

5

欢迎来到有趣的区域:

  1. 注意 urllib2:它不检查证书或证书链。请改用请求或使用 ssl 库并自行检查。请参阅Urllib 和服务器证书验证 有时,一点 ZeroMQ (0mq) 可以简化您的服务器。

  2. 如果您是私有服务器/私有客户端对,您应该考虑在您的应用程序中提供自签名证书。此时,验证证书消除了许多其他可能的问题。

  3. 虽然您可以阅读很多有关安全问题的信息,例如Crypto 101,但简短的版本是使用 TLS(SSL 的新名称)传输数据并使用 GPG 存储数据。TLS 可防止其他人在移动数据时看到和更改数据。GPG 防止其他人在存储或检索数据时看到和更改数据。另请参阅:如何安全地保存解密的临时数据? 足够的安全性!

  4. 与 gpg 一起使用的 SqlLite3 很好,直到您变得太大。之后,您可以迁移到 MariaDB(受支持的 MySQL 版本)、PostGreSQL 或 Mongo 之类的东西。我支持做一些无法扩展的事情,现在让一些东西工作是值得的。

  5. 对于 GUI,你会讨厌我的回答:HTML/CSS/JavaScript。您需要门户或移动应用程序或远程访问或任何引人注目的东西的可能性。使用 jQuery(或它的轻量级表亲之一,如 Zepto)。然后将您的应用程序作为全屏应用程序运行,无需浏览器栏或访问其他站点。您可以使用库来模拟本机外观和感觉,但客户几乎总是会说“哦,我知道如何使用它”并停止询问。

  6. 仍然讨厌 GUI 答案?虽然您可以使用 Tcl/Tk 或 Wx,但您将永远与平台错误作斗争。例如,OS/X (Mac) 用户需要安装 ActiveState 的 Tcl/Tk 而不是默认的。您最终会得到一个用于图像(PIL 或 ImageMagick)的繁重解决方案,而不仅仅是 HTML 图像标签。还有大量其他 GUI 可供使用,包括一些使用新的“yield from”构造的 GUI。不过,你现在用 HTML/CSS/JavaScript 做得更好。观看“JavaScript: The Good Parts”,然后采取随它工作的态度交付它。

  7. 努力使用 Python 2,7 或 Python 3.3+。当您制作复杂的应用程序时,您不希望与不断上升的更好支持的浪潮作斗争。

我做这些是为了好玩!

于 2013-07-15T22:24:02.683 回答
3

图形用户界面库

首先,请利用人们所做的工作来编译这个 GuiProgramming 列表

其中一个让我印象深刻的包裹是Kivy。您绝对应该检查一下(至少是视频/介绍)。该Kivy项目有一些很好的介绍。我不得不说我没有完全遵循它,但它看起来很有希望。至于您对跨平台的要求,您可以这样做。

打包

有关如何为不同平台打包应用程序的大量文档。它使用和MacOSX,但有和的说明。WindowsPyInstallerAndroidiOS

客户端数据库

是的,sqlite3是要走的路。您可以sqlite3使用Kivy. SQLAlchemy如果您需要连接到您的 sqlite 数据库或需要连接到远程数据库,您也可以使用它。

检索内容

requests库非常httplib适合执行 http 请求,恕我直言,使用起来比urllib2.

于 2013-07-15T04:21:27.463 回答
2

PySide 和 WxPython 都支持您的所有五个要求。WxPython 使用实际的本机小部件,并且还具有构建在顶部的自定义扩展和小部件。它有一些好东西,wx.CallAfter可以让您在单独的线程中运行后台任务并轻松跳回 UI 线程。

PySide 有一个更好的 API,但它自己绘制了模仿底层操作系统 UI 的小部件。它不像 WxPython 那样成熟,并且使用类似的工具对其进行打包,cx_freeze并且PyInstaller涉及程度略高。

此外,我建议您使用 ORMpeewee而非普通的 Sqlite3 来存储数据,它可以更轻松地管理数据,并且可以很好地与冻结工具配合使用。

于 2013-07-08T10:07:22.627 回答
1

当然,答案总是存在的;这取决于您的需求和愿望,但我想说的是;使用 Qt/QML。带有 QML 的 Qt 最近获得了很大的关注,而PyQt5 刚刚发布,它看起来绝对是一个不错的且面向未来的选择。它是跨平台的,易于使用并支持主题。

我强烈建议您观看此视频,其中他们似乎完全按照您的意愿行事。在不到一个小时的时间内,他们构建了一个简单的应用程序,该应用程序从外部来源检索数据(包括图像)并在屏幕上列出它们。制作响应式应用程序也很容易(轻松缩放到不同的屏幕尺寸)。

最后,我不知道您的许可证要求是什么。PyQt 在 GPL 或商业许可下获得许可。因此,如果您的应用程序是开源的,那么 PyQt 就完美了。如果你的应用程序是专有的,你最好使用 PySide,它是 LGPL。

祝你好运!

于 2013-07-12T06:38:15.100 回答
0

我只对基于 Qt 的 Python GUI 工具包有经验,发现它们非常强大、文档齐全且易于使用(只要您远离模型视图框架)。他们可以做你提到的所有事情。所以我的建议是 PyQt 或 PySide。PySide 的优势在于它的许可证 - LGPL,所以如果你的东西是专有的 - 去 PySide。然而,PySide 有一些麻烦,因为在撰写本文时它基本上被放弃了,所以你将不得不躲避一些错误(没有什么真正关键的 IMO)。PyQt 更积极地维护和开发,但它是 GPL 或商业(约 400 欧元)。所以如果你的东西是免费的,你应该选择 PyQt。是的,如果可能的话,使用 ORM。只是我的2美分。

于 2013-07-08T11:20:20.110 回答