【问题标题】:GUI-embeddable Python drawing widget with anti-aliasing具有抗锯齿功能的可嵌入 GUI 的 Python 绘图小部件
【发布时间】:2011-04-29 07:48:06
【问题描述】:

我正在编写一个小型图表绘制应用程序(本质上类似于Graphviz),并且需要一个允许我嵌入能够绘制抗锯齿线条和文本的画布的 GUI 库。我想在窗口的一半有一个文本编辑器来编辑图表代码,在另一半有一个(可能是实时的)预览窗格。

现在我在 tkinter 窗口中有文本编辑器,在单独的 pygame 窗口中有渲染图。这在技术上是可行的,但它很混乱(例如,有两个事件循环),一般来说,我更喜欢将两个部分放在一个窗口中。我一直在寻找整合两者的方法,但一直找不到任何跨平台的东西,pygame 明确建议不要尝试这样做。

另一种方法是让 pygame 将图像导出到文件中并将其加载回 tkinter,但 tkinter 只能读取没有 PIL 的 GIF/PPM(我使用 PIL 不支持的 Python 3)而 pygame 可以不要写 GIF/PPM。我可以向后移植到 Python 2,因为它是一个很小的应用程序,但即便如此,拥有一个用于简单图像转换的大型额外库似乎也不合适,而且到文件的往返对于实时预览来说可能太慢(更别提丑了)。

最后,一个简单的 tkinter 画布几乎是我想要的,只是它不能绘制抗锯齿线,而且对于一个主要目的是绘制线条图形的程序来说,这是不可接受的。

我使用的是 Python 3,因此首选支持它的库,但如果没有办法做到这一点,那么 Python 2 库也可以。库需要跨平台,当然需要的外部包越少越好。

【问题讨论】:

    标签: python drawing python-3.x tkinter pygame


    【解决方案1】:

    如果您不介意 GTK 的外观,pygtk 在其画布小部件中提供抗锯齿选项(请参阅this),并且被许多人认为与 Tkinter 一样强大,尽管它不包含在标准 Python 中安装。

    此外,它还兼容 Python 3.x,这对于大多数非标准库模块和包来说是不能说的。

    【讨论】:

    • 是否有适用于 Python 3 版本的 Windows 二进制文件,或者至少有与 Py3 兼容的源代码分发版?在 PyGTK 站点和存储库中搜索了 20 分钟,其中任何一个都没有结果。
    • 不,似乎不存在任何 Windows 二进制文件。很抱歉,我曾经推荐过 pygtk,我不知道 Windows 支持这么差(它非常流行,并且很容易安装在 Linux 和其他类 unix 上)。有一个与 Py3k 兼容的版本,但似乎很难获得。
    • 看来你最好还是坚持使用 Tkinter 并使用像 PIL 这样的扩展(或者如果你很幸运,你可以找到适用于 Python 3.x 的东西)。可悲的是,这就是 Python 世界中的生活,很少使用更现代的版本,因为没有人花时间为它编写包。
    【解决方案2】:

    用 Tkinter+pygame 乱搞是愚蠢的。我会使用 wxPython。事实上,我已经使用 wxPython 做了一个图表小部件,它具有抗锯齿功能:

    不幸的是,这是为了工作,所以我无法分发代码。

    您要查看的 wxPython 抗锯齿类是 wx.GCDC 和/或 wx.GraphicsContext

    【讨论】:

    • 不幸的是,wxPython 与 Python 3 不兼容。这是一个不错的后备方案,但现在我仍然没有失去希望得到适用于 Python 3 的东西。事实上,我的主要功能之一是该项目的目标是评估 Python 3 的可行性。
    • 很多第 3 方库与 Python 3 不兼容——这应该是您“评估”的一部分。
    【解决方案3】:

    经过彻底搜索后,我最终使用了PyQt4。它确实符合我的所有要求(Python 3、跨平台、抗锯齿),现在我已经掌握了基础知识,它也非常直观且易于使用。

    将此作为我自己问题的答案发布并接受以供将来参考。

    【讨论】:

      猜你喜欢
      • 2011-01-14
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多