Export_to_png仅保存后台

时间:2016-06-11 21:32:26

标签: python kivy

我最近了解了Python框架kivy并开始关注the simple paint app tutorial。现在我想保存绘制为.png文件的内容,但不是彩色圆点,而是只导出黑色背景。

这是我的代码示例:

import kivy
kivy.require("1.9.1")

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.graphics import Color, Ellipse, Line

class MyPaintWidget(Widget):
    def on_touch_down(self,touch):
        color=(0,0,1)
        with self.canvas:
            Color(*color)
            d=30.
            Ellipse(pos=(touch.x-d/2., touch.y-d/2.), size=(d,d))

class MyPaintApp(App):

    def build(self):
        parent=Widget()
        self.painter=MyPaintWidget()
        ssbtn=Button(text='Save')
        ssbtn.bind(on_release=self.save_screenshot)
        parent.add_widget(self.painter)
        parent.add_widget(ssbtn)
        return parent

    def save_screenshot(self,obj):
        self.painter.export_to_png("screenshot.png")


if __name__ == '__main__':
    MyPaintApp().run()

我做错了什么?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您遗漏了一件事 - Widget不会自动将其大小和位置设置为整个Window尺寸,而只会设置为默认值pos = [0, 0] size = [100, 100],因为{ {1}}甚至将其添加到不会从Window != Layout继承的内容中也不会使其变得更好(Layout),如果你看起来那个保存的png,你就可以轻松看到它小)。

Widget != Layout
如果您打算只使用电脑并且只使用默认的self.painter=MyPaintWidget(size=[800,600]) 尺寸,

将为您完成工作。如果没有,请使用:

Window

这似乎更实用,但你仍然不在那里。最佳解决方案是使用from kivy.core.window import Window self.painter=MyPaintWidget(size=Window.size) 为您执行这些操作,例如LayoutBoxLayoutsome others

对于你来说,一个完美的解决方案是在GridLayout中使用StencilView,放置时不会截取整个画布的截图,而只会截取您认为的部分它将采取大小为Layout本身放置在其位置的部分。

尝试在红色框外绘图。 Inspector将为您提供颜色和其他功能的小部件,因此请务必按照评论中的说明进行尝试。

Widget