python - Window.screenshot 在 iOS 上返回黑屏
问题描述
我正在 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()
我希望得到图纸的截图。
解决方案
我现在无法检查您的 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()
请检查这些示例是否适合您。
推荐阅读
- c# - 连接时避免用户交互
- c# - 如何将 Datatemplate 的 Datatype 的属性传递给 Caliburn.Micros Message.Attach?
- javascript - 如何从会话存储中获取值并在 JavaScript 的处理函数中使用它
- javascript - 子 setState 导致父/整个应用程序在 React 中刷新
- reactjs - 显示实时变量值
组件 - 反应原生 - c++ - 一次包含多个头文件,只有一个#include-expression?
- terraform - Terraform Vm Provision 附加 2 NIC
- python - 计算列中出现的频率
- ssl - 无法在 apache 2.4 服务器上激活文本压缩
- javascript - 在 OnStart() 函数中更新变量的值