“导出到”png只保存背景

2024-09-30 14:37:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近了解了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()

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


Tags: fromimportselfapppngdefwidgetparent
1条回答
网友
1楼 · 发布于 2024-09-30 14:37:24

您缺少一件事-Widget不会自动将其大小和位置设置为整个Window大小,而只会设置为默认值,即pos = [0, 0]size = [100, 100],因为Window != Layout甚至将其添加到不是从Layout继承的内容中也不会使它变得更好(Widget != Layout),如果您看起来保存的png(太小),您可以很容易地看到这一点。在

self.painter=MyPaintWidget(size=[800,600])

如果你打算只呆在电脑上,并且只使用默认的Window大小,它将为你做这项工作。如果没有,则使用:

^{pr2}$

这看起来更实际,但你还是不在那里。一个最佳的解决方案是使用Layout,它为您做这些事情,例如BoxLayoutGridLayout或{a1}。在

一个完美的解决方案是在一个Layout中使用^{},当它被放置时,它不会截取整个画布的屏幕截图,而只拍摄你认为它会得到的部分,即大小与放置在其位置上的Widget相同的部分。在

试着在红盒子外面画画。Inspector将为您提供以颜色显示窗口小部件和其他功能,因此一定要按照注释中提到的那样尝试它。在

^{3}$

相关问题 更多 >