【发布时间】:2020-12-25 07:08:48
【问题描述】:
我对 Python 和一般编码都很陌生。我一直在研究一个本质上与 ms paint 相似的程序。到目前为止,我已经添加了创建多色矩形、线条、椭圆以及任何多边形的功能。
我一直在使用 tkinter GUI。我一直想添加一个填充命令,但我有点不知道如何启动它。我对它如何工作的想法是,它会检查用户当前悬停在上面的像素的颜色,然后检查上、下、左和右是否以像素为单位的相同颜色。如果它发现了,它会改变这些像素的颜色(我猜是通过创建一个非常小的矩形对象?)。这理论上可以填满一个区域。但是,我真的找不到任何关于如何在 tkinter 中访问像素颜色的信息。
我知道特定事件的位置是 event.x 和 event.y,但我找不到有关像素颜色的任何信息。我还没有真正为它编写任何代码,因为我不确定 tkinter 甚至可以访问像素的颜色而不仅仅是对象颜色。
【问题讨论】:
-
真的取决于你是怎么画的。如果您使用 PIL 图像作为绘图画布,那么您可以直接将其转换为 numpy 数组并完全按照您的描述进行操作。如果不是,我建议您切换到 PIL 图像,因为它会使保存和缩放图像等操作变得更加容易。
-
这被称为“洪水填充”,并不难实现。我写了一个 here 的例子(虽然它在 pygame 中)。问题是在 python 中手动执行此操作可能会遇到性能问题。为了让它在 tkinter 中工作,你必须创建一个图像来操作和 blit 到窗口上。这有点乏味,使用 pygame、pyglet 或 kivy 之类的库可能会更好。