Window.screenshot 在 iOS 上返回黑屏

Posted

技术标签:

【中文标题】Window.screenshot 在 iOS 上返回黑屏【英文标题】:Window.screenshot returns black screen on iOS 【发布时间】:2019-10-01 01:57:23 【问题描述】:

我正在 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()

基维:-


    Screen:

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

      FloatLayout:

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

我希望得到图纸的截图。

【问题讨论】:

你在其他平台(windows、Linux等)上测试过吗? 不,我没有。我既没有windows也没有linux。 您能否准备一个简单且可运行的简短应用程序,让您黑屏?黑屏的原因可能有很多,比如你在截屏前可能不小心把canvas.clear做了 我会在一分钟内完成,但是...应用程序会在计算机上返回正确的屏幕截图(在 Xcode 上运行之前)吗? '''window.screenshot()''' 在 python 中运行良好,只有在 iPhone 和 iPad 上安装后才会出现问题。 我在 GitHub 上添加了代码:github.com/ksgfan/drawing-app 【参考方案1】:

我现在无法检查您的 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()' 按原样返回按钮和绘图,但在黑屏上(应该是白色的)。非常感谢,稍后我会尝试以某种方式更改我的代码。 我用***.com/questions/20872598/…解决了这个问题

以上是关于Window.screenshot 在 iOS 上返回黑屏的主要内容,如果未能解决你的问题,请参考以下文章

iOS - NSInternalInconsistencyException 在 iOS 9 和 10 上发生,但在 iOS 11 上运行良好

创建 GIF 在 iOS 7 上工作,在 iOS 8 上中断

NSFetchRequest 控制器在 iOS 5 上工作,在 iOS 4.3 上崩溃

NSLayoutConstraints 在 ios 7 上崩溃,但在 ios 8 上没有

在 iOS 8 上按钮大小不正确,在 iOS 7 上正确

为啥这个 UITabBarItem 图像切换代码在 iOS 7 上有效,而在 iOS 7.1 上无效?