Window.screenshot возвращает черный экран на iOS - PullRequest
0 голосов
/ 14 мая 2019

Я пишу простое приложение для рисования в Киви.Он отлично работает на iPhone и iPad, но Window.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()

Киви: -


    Screen:

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

      FloatLayout:

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

Я ожидаю получить скриншот рисунка.

1 Ответ

0 голосов
/ 15 мая 2019

Я не могу проверить ваш код для 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()

пожалуйста, проверьте, работают ли эти примеры для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...