【问题标题】:Screenshot problem in Kivy/python application on raspberry pi树莓派上 Kivy/python 应用程序中的屏幕截图问题
【发布时间】:2021-08-18 12:27:50
【问题描述】:

我正在尝试截取我在 Kivy 绘画应用中绘制的线条的屏幕截图。我尝试了以下三种方法,但都没有奏效。

self.export_to_png('image_1.png')
ImageGrab.grab_to_file('image_2.png')
self.screenshot('image_3.png')  

Export_to_png 生成以下图像:

ImageGrab 生成 kivy 应用程序下方的打印屏幕:

我无法弄清楚执行屏幕截图功能的语法,所以它只会产生错误:

AttributeError: 'Screenshot' object has no attribute 'screenshot'

Python 文件:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Line
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import Screen , ScreenManager

import pyscreenshot as ImageGrab

class Home(Screen):
    pass

class DrawInput(Widget):

    def on_touch_down(self, touch):
        with self.canvas:
            touch.ud["line"] = Line(points=(touch.x, touch.y))           

    def on_touch_move(self, touch):
        touch.ud["line"].points += (touch.x, touch.y)

    def clear_canvas(self):
        self.canvas.clear()

class Screenshot(Widget):   

    def take(self):
        self.export_to_png('image_1.png')
        ImageGrab.grab_to_file('image_2.png')
        self.screenshot('image_3.png')  

class SimpleKivy(App):
    def build(self):
        return

if __name__ == "__main__":
    SimpleKivy().run()

基维文件:

<Button>:
    font_size: 40
    color: 1,1,1,1

ScreenManager:

    Home:

        name: 'home'
        DrawInput:
            id: widget_clear

        Screenshot:
            id: widget_screenshot

        FloatLayout:

            Button:
                text: "Clear"
                pos_hint: {"x": 0, 'top': 0.6666}
                size_hint: 0.2, 0.3333
                on_release: 
                    widget_clear.clear_canvas()

            Button:
                text: "Save"
                pos_hint: {"x": 0.8, 'top': 0.6666}
                size_hint: 0.2, 0.3333
                on_release:
                    widget_screenshot.take()
                    widget_clear.clear_canvas() 

我正在使用 Raspbian 9.4、Python 2.7.13 和 Kivy 1.10.1。

【问题讨论】:

  • 您是否尝试过在 PC 上得到相同的结果?
  • 我没有,不幸的是,最终的应用程序必须在 pi 上运行。所以我希望截图不受pi的限制
  • 我对我的问题的想法是排除问题出在覆盆子上,如果代码在您的 PC 上有效,则问题出在 rpi,如果无效,则问题出在您的代码上,所以理论上解决方案会更容易发现,所以我请您先在 PC 上进行测试。
  • 我明天在电脑上试试,看看是不是pi有问题
  • 我想出了一个解决方案,我停止在我的 pi 上使用 HDMI 输出,而是使用树莓派触摸屏。在此设置中使用 export_to_PNG 似乎可以正常工作。

标签: python raspberry-pi kivy screenshot


【解决方案1】:

我尝试了以下方法,

  1. Window.screenshot() API
  2. widget.export_to_png() 或 export_as_image().save(文件名)
    但无法在测试设置中截取屏幕截图。 (带 LCD 显示屏的树莓派)。

尝试将scrot 命令构建到Linux 映像中并使用subprocess 模块调用scrot。这在我们的设置中有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    相关资源
    最近更新 更多