2017-02-25 70 views
0

所以我有一个小应用程序,我想做一个整体BoxLayout的屏幕截图,并省略其他部分的父布局。Kivy截图布局或编号

注:这是一个Android应用程序

基本上我有这样的事情:

BoxLayout: 
     id: image_area 
     size_hint_y: 600 
     Image: 
      source: root.image_source 
      size: self.size 
      DragText: 
       background_color: (0, 0, 0, 0) 
       foreground_color: (255,255,255,255) 
       multiline: True 
       height: self.minimum_height 
       width: '400dp' 
       center: self.parent.center 
       text: 'Before' 
       font_size: '60px' 
     Image: 
      source: root.image_source2 
      DragText: 
       background_color: (0, 0, 0, 0) 
       foreground_color: (255,255,255,255) 
       multiline: True 
       height: self.minimum_height 
       width: '400dp' 
       center: self.parent.center 
       text: 'After' 
       font_size: '60px' 

我有上面这一个,甚至父母等布局是一个盒子布局,但我只是想要截图这个布局,我遇到了麻烦。

我想:

def screenshot(self, widget): 
    widget.export_to_png('{0}.png'.format(datetime.now())) 

但它不工作,任何想法我怎么能做到这一点?

我忘了指定这个,激活的截图按钮看起来像这样

 Button: 
      size_hint_x: 2 
      text: 'Save' 
      on_release: root.screenshot(image_area) 

回答

1

有两种方法可以做到这一点。直接从kvlang,或者像你尝试过的,用python中的方法。
我会告诉你两个例子。

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.lang import Builder 


Builder.load_string(''' 


<MyLayout>: 
    orientation: "vertical" 
    Label: 
     text: "Label1 in outer box" 

    BoxLayout: 
     id: myexport 
     Label: 
      text: "Label in inner layout" 

    Label: 
     text: "Label2 in outer box" 
    Button: 
     text: "Button in outer, to export" 
     on_release: myexport.export_to_png("test.png") 


''') 

class MyLayout(BoxLayout): 
    pass 


class MyApp(App): 
    def build(self): 
     return MyLayout() 


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

随着方法:

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.lang import Builder 


Builder.load_string(''' 


<MyLayout>: 
    orientation: "vertical" 
    Label: 
     text: "Label1 in outer box" 

    BoxLayout: 
     id: myexport 
     Label: 
      text: "Label in inner layout" 

    Label: 
     text: "Label2 in outer box" 
    Button: 
     text: "Button in outer, to export" 
     on_release: root.export() 


''') 

class MyLayout(BoxLayout): 

    def export(self,*args): 
     self.ids.myexport.export_to_png("test2.png") 


class MyApp(App): 
    def build(self): 
     return MyLayout() 


if __name__=='__main__': 
    MyApp().run() 
+0

谢谢,这有助于 – Nick

+0

@Nick你是惠康

从kvlang

直接 – EL3PHANTEN