首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS上Window.screenshot返回黑屏

iOS上Window.screenshot返回黑屏
EN

Stack Overflow用户
提问于 2019-05-14 13:39:06
回答 1查看 150关注 0票数 0

我正在用Kivy编写简单的绘图应用程序。它在iPhone和iPad上运行良好,但Window.screenshot()只返回黑屏。我做错了什么?另外,有没有办法让screenshot()直接保存在dropbox/iCloud/Files-App上?

代码语言:javascript
复制
    class DrawInput(Widget):

    def btn_save(self):


        user_data_dir = App.get_running_app().user_data_dir

        name = join(user_data_dir, "filename.png")

        Window.screenshot(name)     

    def on_touch_down(self, touch):
        with self.canvas:
            Color(0, 0, 0)
            touch.ud["line"] = Line(points = (touch.x, touch.y))

    def on_touch_move(self, touch):
        touch.ud["line"].points += (touch.x, touch.y)

    def on_touch_up(self, touch): 
        pass

    presentation = Builder.load_file("app_kivy.kv")

    class drawingapp(App):
    def build(self):
        return presentation

    if __name__=="__main__":
        drawingapp().run()

Kivy:-

代码语言:javascript
复制
    Screen:

      name: "drawing"
      on_pre_enter: drawing.canvas.clear()

      FloatLayout:

         DrawInput:
            id: drawing
         Button:
            text: "finish"
            on_press: drawing.btn_save()

我希望能得到这幅画的截图。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-15 18:17:31

我现在不能检查您的iOS代码(稍后我会尝试这样做)。但在Linux (Ubuntu)上它工作得很好:用户可以截取整个应用程序区域的屏幕截图,图像以png格式保存在源文件夹中(不幸的是,我不能很好地处理你的输出路径,因此我用name = 'test.png'替换了name值)。

然后,我编写了一个在我的系统上也可以工作的最小示例:

代码语言:javascript
复制
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window

KV = '''
Button:
    text: 'Save'
    on_press: app.btn_save()
'''

class ApplePenApp(App):

    def build(self):
        self.root = Builder.load_string(KV)

    def btn_save(self):
        Window.screenshot('test.png')

ApplePenApp().run()

请检查它是否在您的系统上工作(如果它工作,那么很可能是您的代码中的某个地方出了问题)。

只有在这样做的时候,我才发现黑屏问题:

代码语言:javascript
复制
from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window

KV = """
Button
    text: '123456'
"""

class MyApp(App):
    def build(self):
        self.root = Builder.load_string(KV)
        self.make_screenshot()

    def make_screenshot(self):
        Window.screenshot('test.png')

MyApp().run()

但是,我也看到一些用户在使用Window.screenshot时遇到了问题,例如:https://github.com/kivy/kivy/issues/4514

顺便说一句,作为Window.screenshot更高级的替代方案,您可以尝试export_to_png。您可以对任何小部件使用此方法,以下是一个简短的示例:

代码语言:javascript
复制
from kivy.app import App
from kivy.lang import Builder

KV = '''
Button:
    text: 'Save'
    on_press: app.btn_save(self)
'''

class ApplePenApp(App):

    def build(self):
        self.root = Builder.load_string(KV)

    def btn_save(self, inst):
        inst.export_to_png('test.png')

ApplePenApp().run()

您不能将其用于窗口,但您可以将其用于屏幕(在您的示例中,它可以是SecondScreen“绘图”):

代码语言:javascript
复制
from kivy.app import App
from kivy.lang import Builder

KV = '''
ScreenManager
    Screen
        id: screen
        Button:
            text: 'Save'
            on_press: app.widget_save(screen)
'''

class ApplePenApp(App):

    def build(self):
        self.root = Builder.load_string(KV)

    def widget_save(self, inst):
        inst.export_to_png('test.png')

ApplePenApp().run()

请检查这些示例是否适用于您。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56123654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档