具有抗锯齿功能的GUI可嵌入Python绘图窗口小部件

时间:2010-10-22 18:24:30

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

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

现在我将文本编辑器放在tkinter窗口中,并将渲染图放在一个单独的pygame窗口中。这在技术上有效,但它很混乱(例如有两个事件循环),一般来说我更喜欢在一个窗口中同时拥有这两个部分。我已经搜索了将两者结合起来的方法,但是没有找到任何跨平台的东西,而pygame明确表示不会尝试这样做。

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

最后,一个简单的tkinter画布几乎是我想要的,除了它不能绘制消除锯齿线,并且对于一个主要目的是绘制线条图的程序,这是不可接受的。

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

3 个答案:

答案 0 :(得分:2)

如果你不介意GTK的外观,pygtk在他们的画布小部件中有一个antialising选项(参见this)并被许多人认为与Tkinter一样强大,尽管它不包含在标准Python安装。

此外,它与Python 3.x兼容,对大多数非标准库模块和软件包都不能说。

答案 1 :(得分:2)

用Tkinter + pygame拧紧是愚蠢的。我会用wxPython。事实上,我使用wxPython完成了一个图表小部件,并且它具有抗锯齿功能:

alt text

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

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

答案 2 :(得分:2)

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

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