无法获得一个窗口,中止

时间:2016-11-19 21:03:16

标签: python kivy

我得到了运行Kivy hello world程序的常见错误。我已尝试过我在此处看到的解决方案:手动安装gstreamer,将其添加到PATH并安装PySDL2。我的操作系统是Windows 7,所有其他版本信息都在错误日志中。

# you need this two lines:
import os
os.environ['KIVY_IMAGE'] = 'pil,sdl2'

#kivy program
from kivy.app import App
from kivy.uix.button import Button

class TestApp(App):
    def build(self):
        return Button(text='Hello World')

TestApp().run()

错误日志:

[INFO              ] [Logger      ] Record log in C:\Users\xyz\.kivy\logs\kivy_16-11-19_11.txt
[INFO              ] [Kivy        ] v1.9.1
[INFO              ] [Python      ] v2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)]
[INFO              ] [Factory     ] 179 symbols loaded
[INFO              ] [Image       ] Providers: img_pil, img_sdl2 (img_tex, img_dds, img_ffpyplayer, img_gif ignored)
[INFO              ] [Text        ] Provider: sdl2
[INFO              ] [OSC         ] using <thread> for socket
[INFO              ] [Window      ] Provider: sdl2
[INFO              ] [GL          ] GLEW initialization succeeded
[INFO              ] [GL          ] OpenGL version <3.1.0 - Build 8.15.10.2538>
[INFO              ] [GL          ] OpenGL vendor <Intel>
[INFO              ] [GL          ] OpenGL renderer <Intel(R) HD Graphics Family>
[INFO              ] [GL          ] OpenGL parsed version: 3, 1
[INFO              ] [GL          ] Shading version <1.40  - Intel Build 8.15.10.2538>
[INFO              ] [GL          ] Texture max size <8192>
[INFO              ] [GL          ] Texture max units <16>
[INFO              ] [Shader      ] fragment shader: <No errors.>
[INFO              ] [Shader      ] vertex shader: <No errors.>
[INFO              ] [Shader      ] program: <No errors.>
[CRITICAL          ] [Window      ] Unable to find any valuable Window provider at all!
sdl2 - AttributeError: tobytes
  File "C:\Program Files\python27\lib\site-packages\kivy\core\__init__.py", line 67, in core_select_lib
    cls = cls()
  File "C:\Program Files\python27\lib\site-packages\kivy\core\window\window_sdl2.py", line 138, in __init__
    super(WindowSDL, self).__init__()
  File "C:\Program Files\python27\lib\site-packages\kivy\core\window\__init__.py", line 722, in __init__
    self.create_window()
  File "C:\Program Files\python27\lib\site-packages\kivy\core\window\window_sdl2.py", line 255, in create_window
    super(WindowSDL, self).create_window()
  File "C:\Program Files\python27\lib\site-packages\kivy\core\window\__init__.py", line 897, in create_window
    self.render_context = RenderContext()
  File "kivy\graphics\instructions.pyx", line 756, in kivy.graphics.instructions.RenderContext.__init__ (kivy\graphics\instructions.c:10729)
  File "C:\Program Files\python27\lib\site-packages\kivy\core\image\__init__.py", line 512, in __init__
    self.filename = arg
  File "C:\Program Files\python27\lib\site-packages\kivy\core\image\__init__.py", line 700, in _set_filename
    mipmap=self._mipmap, nocache=self._nocache)
  File "C:\Program Files\python27\lib\site-packages\kivy\core\image\__init__.py", line 430, in load
    im = loader(filename, **kwargs)
  File "C:\Program Files\python27\lib\site-packages\kivy\core\image\__init__.py", line 198, in __init__
    self._data = self.load(filename)
  File "C:\Program Files\python27\lib\site-packages\kivy\core\image\img_pil.py", line 101, in load
    return list(self._img_read(im))
  File "C:\Program Files\python27\lib\site-packages\kivy\core\image\img_pil.py", line 86, in _img_read
    img_tmp.mode.lower(), img_tmp.tobytes())
  File "C:\Program Files\python27\lib\site-packages\PIL\Image.py", line 514, in __getattr__
    raise AttributeError(name)

[CRITICAL          ] [App         ] Unable to get a Window, abort.
 Exception SystemExit: 1 in 'kivy.properties.dpi2px' ignored
[CRITICAL          ] [App         ] Unable to get a Window, abort.

7 个答案:

答案 0 :(得分:28)

在cmd中,转到python34,然后转到Scripts并安装以下内容:

pip install --upgrade pip wheel setuptools
pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew
pip install kivy.deps.gstreamer
pip install kivy.deps.angle
pip install kivy

答案 1 :(得分:5)

尝试将<python dir>\share\sdl2\bin放到您的路径上,它应该可以解决问题。问题是它无法找到它使用的sdl2二进制文件。可能甚至没有任何PIL 窗口 provider,因此使用环境变量不会为创建窗口做任何事情(它将被用作虽然是图像提供者。

我对PySDL2并不熟悉,所以我无法帮助你,但是我在Windows上为Kivy做了一个installer,让初学者更轻松。

无论如何,基本上有两种方式可以结束:

  1. 您会将bin个文件夹永久地放入PATH变量

    我认为这真的很愚蠢,除非你确定你不会删除Python或文件夹,否则你会在PATH中有一个ghost文件夹+所有其他程序都可以访问{{{}中的文件1}}文件夹来自bin

  2. 您将拥有暂时执行此操作的批处理文件

    只有从控制台/批处理程序运行的程序才能访问PATH文件夹。

  3. 安装程序会为您执行此操作,实际上甚至可以从头开始安装(无Python)或许多其他内容。

    如果您尚未安装Kivy dependencies,请先执行此操作。

答案 2 :(得分:1)

不确定Windows或Linux,但是在最需要放置的python-for-android上:

#qpy:kivy
import kivy
kivy.require('1.10.1') # replace with your current kivy version !

答案 3 :(得分:1)

在虚拟软件(也称为vmbox,vmware)的显示设置中禁用3D加速和2D视频加速。 我认为这对你有用,经过多次尝试后它对我有用。

答案 4 :(得分:1)

我正在使用Windows 10和python 3.6,并使用pip安装了kivy。 上述解决方案均无济于事,但随后我用pip卸载了kivy,然后根据https://kivy.org/doc/stable/installation/installation-windows.html#installation使用conda再次安装kivy,它起作用了。

为我安装的conda软件包是: 将下载以下软件包:

package                    |            build
---------------------------|-----------------
freetype-2.8.1             |           vc14_0         469 KB  conda-forge
sdl2_mixer-2.0.4           |       h6538335_0          83 KB  conda-forge
sdl2-2.0.10                |       h6538335_0         4.3 MB  conda-forge
kivy-1.11.1                |   py36hbc14df2_0        20.2 MB  conda-forge
sdl2_image-2.0.2           |                0         293 KB  conda-forge
glew-2.0.0                 |    he025d50_1002         722 KB  conda-forge
sdl2_ttf-2.0.14            |       h8909db8_1          25 KB  conda-forge
smpeg2-2.0.0               |       h6538335_1         131 KB  conda-forge
------------------------------------------------------------

答案 5 :(得分:0)

我刚刚找到了快速解决方法

  1. 使用pip
  2. 安装Kivy之后
  3. 导航到 C:\ Users \(帐户名)\。kivy \ 并打开 config.ini 文件
  4. multisamples = 0更改 = 2 ,然后重新启动 电脑。这样也可以节省其他问题,例如
  

[CRITICAL] [GL]最低要求的OpenGL版本(2.0)不   找到了!

这在Windows 7 64位,python3.5(32位)和Kivy 版本1.10.0

上对我有用

答案 6 :(得分:-1)

我直接卸载了Python并重新安装了所有软件,它对我有用,我知道它不是最好的,但至少可以用。