我最近了解了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()
我做错什么了?谢谢你的帮助。在
您缺少一件事-
Widget
不会自动将其大小和位置设置为整个Window
大小,而只会设置为默认值,即pos = [0, 0]
size = [100, 100]
,因为Window != Layout
甚至将其添加到不是从Layout
继承的内容中也不会使它变得更好(Widget != Layout
),如果您看起来保存的png(太小),您可以很容易地看到这一点。在如果你打算只呆在电脑上,并且只使用默认的
^{pr2}$Window
大小,它将为你做这项工作。如果没有,则使用:这看起来更实际,但你还是不在那里。一个最佳的解决方案是使用
Layout
,它为您做这些事情,例如BoxLayout
,GridLayout
或{a1}。在一个完美的解决方案是在一个} ,当它被放置时,它不会截取整个画布的屏幕截图,而只拍摄你认为它会得到的部分,即大小与放置在其位置上的
Layout
中使用^{Widget
相同的部分。在试着在红盒子外面画画。Inspector将为您提供以颜色显示窗口小部件和其他功能,因此一定要按照注释中提到的那样尝试它。在
^{3}$相关问题 更多 >
编程相关推荐