screenshot() 给出:ImportError: cannot import name glReadPixels error in kivy

Posted

技术标签:

【中文标题】screenshot() 给出:ImportError: cannot import name glReadPixels error in kivy【英文标题】:screenshot() gives :ImportError: cannot import name glReadPixels error in kivy 【发布时间】:2014-05-10 10:34:25 【问题描述】:

要在 kivy 中截取窗口的屏幕截图,我们可以根据文档使用 screenshot(name='screenshot:04d.png')

http://kivy.org/docs/api-kivy.core.window.html?highlight=screenshot#kivy.core.window.WindowBase.screenshot

但是当我尝试它时出现以下错误:

Traceback(最近一次调用最后一次): 文件“D:/Paarth/Google_Drive/Google Drive/Codes/Python/Work/kivy/kivyBasics/Screenshots_SaveImage.py”,第 26 行,在 MyApp().run() 文件“C:\Kivy-1.8.0-py2.7-win32\Python27\lib\kivy\app.py”,第 766 行,运行中 根 = self.build() 文件“D:/Paarth/Google_Drive/Google Drive/Codes/Python/Work/kivy/kivyBasics/Screenshots_SaveImage.py”,第 19 行,在构建中 Window.screenshot(name='screenshot:04d.png') 文件“C:\Kivy-1.8.0-py2.7-win32\Python27\lib\kivy\core\window\window_pygame.py”,第 250 行,在屏幕截图中 从 kivy.core.gl 导入 glReadPixels、GL_RGBA、GL_UNSIGNED_BYTE ImportError: 无法导入名称 glReadPixels

使用的代码:

import  kivy
kivy.require ( '1.8.0 ' )
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.core.window import WindowBase
from kivy.core.window import Window


class MyWidget(Widget):
    pass

class MyApp(App):
    def build(self):
        parent = MyWidget()

        a = Button(text="hello")
        parent.add_widget(a)
        Window.screenshot(name='screenshot:04d.png')

        return parent


if __name__ == '__main__':
    MyApp().run()

【问题讨论】:

你是如何安装 kivy 的?你下载了发行版 zip 吗?这是 Windows 7 吗? 是的,下载 zip,是的,它的 windows 7 。 你是如何运行它的?你是从 kivy 提供的 kivy.bat 文件中运行它的吗?如果没有,请尝试从那里运行它,看看是否遇到同样的问题。 【参考方案1】:

为了明确答案,您需要执行以下操作,并将 export_to_png 包含在您的 python 文件中。这个

from kivy.graphics import Canvas, Translate, Fbo, ClearColor, ClearBuffers
kv = '''
cameraWidget:
    orientation: 'vertical'
    Camera:
        id: camera
        resolution: (640, 480)
        play: False
    ToggleButton:
        text: 'Play'
        on_press: camera.play = not camera.play
        size_hint_y: None
        height: '48dp'
    Button:
        text: "Take picture"
        on_press: root.TakePicture()
        height: '48dp'

'''
class cameraWidget(BoxLayout):
    def TakePicture(self, *args):
        self.export_to_png = export_to_png
        self.export_to_png(self.ids.camera, filename='test2.png')

class MyApp(App):
    def build(self):
        return Builder.load_string(kv)

if __name__ == '__main__':
    MyApp().run()

【讨论】:

【参考方案2】:

您可以在kivy.graphics.opengl 中找到glReadPixels。 在 Python 解释器中尝试以下操作:

>>> from kivy.graphics.opengl import glReadPixels

【讨论】:

【参考方案3】:

这似乎是一个错误,我已经报告了一个关于它的问题。

与此同时(与您之前的问题相关),您可以使用 Widget 的新 export_to_png 方法,只需将其代码复制到您自己的小部件中即可,您可以找到代码 on github。

【讨论】:

ok .. 感谢您提出错误并在我的函数中使用 export_to_png 的代码

以上是关于screenshot() 给出:ImportError: cannot import name glReadPixels error in kivy的主要内容,如果未能解决你的问题,请参考以下文章

Window.screenshot 在 iOS 上返回黑屏

Ubuntu截图工具gnome-screenshot使用教程

Xcode 10 GM:XCUIScreen.main.screenshot() 因“dyld:惰性符号绑定失败”而崩溃

javascript screenshot.js

python screenshot_phantomjs.py

python screenshot.py