我正在用Kivy编写简单的绘图应用程序。它在iPhone和iPad上正常工作,但Window.screenshot()仅返回黑屏。我怎么了另外,有没有一种方法可以将screenshot()直接保存在dropbox / iCloud / Files-App上?


    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:


    Screen:

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

      FloatLayout:

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



我希望得到该图的屏幕截图。

最佳答案

我现在无法检查您的iOS代码(稍后再尝试。),但是在Linux(Ubuntu)上,它可以正常工作:用户可以拍摄整个应用程序区域的屏幕快照,图像已保存在源文件夹中为png格式(不幸的是,我不太了解您的输出路径,因此,我用name = 'test.png'替换了名称值)。

然后我写了一个最小的示例,该示例也适用于我的系统:

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()


请检查它是否在您的系统上正常运行(如果正常,则很可能是代码中的问题所在)。

我只有在执行以下操作时才发现黑色屏幕截图问题:

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。您可以对任何小部件使用此方法,这是一个简短的示例:

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“绘图”):

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()


请检查这些示例是否对您有用。

关于python - Window.screenshot在iOS上返回黑屏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56123654/

10-12 21:59