【发布时间】: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