对于查询远程数据库的app的python gui工具包的注意事项?

时间:2013-07-08 08:37:56

标签: python tkinter wxpython pyqt pygtk

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

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

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

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

5 个答案:

答案 0 :(得分:5)

欢迎来到有趣的区域:

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

  2. 如果您是私人服务器/私人客户端对,则应考虑向您的应用程序发送自签名证书。此时,验证证书可以消除许多其他可能的问题。

  3. 虽然您可以阅读很多关于安全问题的内容,例如Crypto 101,但短版本使用TLS(SSL的新名称)来传输数据,使用GPG来存储数据。 TLS阻止其他人在移动数据时查看和更改数据。在存储或检索数据时,GPG会阻止其他人查看和更改数据。另见:How to safely keep a decrypted temporary data?足够安全!

  4. 与gpg一起使用的SqlLite3很好,直到你变得太大。之后,您可以转到MariaDB(受支持的MySQL版本),PostGreSQL或Mongo之类的东西。我是doing things that don't scale的支持者,现在开始工作是值得的。

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

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

  7. 努力使用Python 2,7或Python 3.3+。当你做一个复杂的应用程序时,你不想与更好的支持的上升趋势作斗争。

  8. 我为了乐趣而做这些事情!

答案 1 :(得分:3)

GUI库

首先,请利用人们为编制this GuiProgramming list所做的工作。

一个突出我的包裹是Kivy。你一定要看一下(至少是视频/介绍)。 Kivy项目有一些nice introduction。我不得不说我没有完全遵循它,但看起来很有希望。至于您对跨平台的要求,您可以这样做。

包装

不同平台有an extensive documentation on how to package your app。对于MacOSXWindows,它使用PyInstaller,但有AndroidiOS的说明。

客户端数据库

是的,sqlite3是要走的路。您可以将sqlite3Kivy一起使用。如果需要连接到sqlite数据库,或者需要连接到远程数据库,也可以使用SQLAlchemy

检索内容

使用requests library is awesome进行http请求和恕我直言的使用比httpliburllib2的组合要简单得多。

答案 2 :(得分:2)

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

PySide有一个更好的API,但它绘制了自己的小部件,模仿底层操作系统的UI。它不像WxPython那么成熟,并且使用cx_freezePyInstaller这样的工具打包它会稍微复杂一些。

另外,我建议您使用像peewee这样的ORM而不是简单的Sqlite3进行数据存储,这样可以更轻松地管理数据,并且可以使用冻结工具。

答案 3 :(得分:1)

当然答案总是存在;这取决于你的需求和需求,但我会说,把它放在一边;与Qt / QML一起使用。 Qt与QML最近获得了很大的关注,而PyQt5 just release,它绝对是一个很好的,面向未来的选择。它是跨平台的,易于使用和支持主题。

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

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

祝你好运!

答案 4 :(得分:0)

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