Я пишу простое приложение для рисования в Kivy. Он отлично работает на iPhone и iPad, но возвращает только черный экран. Что я сделал не так? Кроме того, есть ли способ сохранить скриншот() непосредственно в 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()
Я ожидаю получить скриншот рисунка.
Нет, я не делал. У меня нет ни винды, ни линукса.
Не могли бы вы подготовить простое и короткое приложение, которое дает вам черный экран? Причин черного экрана может быть много, например, вы могли случайно сделать canvas.clear перед тем, как сделать скриншот
Я делаю это за минуту, но... будет ли приложение возвращать правильный снимок экрана на компьютере (до запуска в Xcode)? '''window.screenshot()''' отлично работает на питоне, проблема появляется только после установки на iPhone и iPad.
Я добавил код на GitHub: github.com/ksgfan/приложение для рисования






Я не могу проверить ваш код для 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()
пожалуйста, проверьте, работают ли эти примеры для вас.
Минимальный пример работает хорошо. К сожалению, реализация этого в моем коде не работает. Я все еще получаю черное изображение в виде файла png. 'export_to_png()' возвращает кнопки и рисунки, как и должно быть, но на черном экране (должен быть белым). Спасибо большое, попробую позже как-то изменить свой код.
Я решил проблему с stackoverflow.com/questions/20872598/…
Вы тестировали его на других платформах (Windows, Linux и т.д.)?