首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kivy Atlas加载失败

Kivy Atlas加载失败
EN

Stack Overflow用户
提问于 2018-03-05 18:53:07
回答 1查看 529关注 0票数 1

StackOverflow,当我试图从地图集中加载一张图片时,我对kivy有一个小问题:

代码语言:javascript
复制
D:\Games\Projects\python>py -2 test.py
[INFO   ] [Logger      ] Record log in C:\Users\%username%\.kivy\logs\kivy_18-03-05_70.txt
[INFO   ] [Kivy        ] v1.10.0
[INFO   ] [Python      ] v2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AMD64)]
[INFO   ] [Factory     ] 194 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored)
[INFO   ] [Text        ] Provider: sdl2
[DEBUG  ] [App         ] Loading kv <.\my.kv>
[DEBUG  ] [App         ] kv <.\my.kv> not found
[DEBUG  ] [Atlas       ] Load <images\a.atlas>
[DEBUG  ] [Atlas       ] Need to load 1 images
[DEBUG  ] [Atlas       ] Load <images\a-0.png>
[DEBUG  ] [ImageSDL2   ] Load <D:\Games\Projects\python\images\a-0.png>
[TRACE  ] [Image       ] u'D:\\Games\\Projects\\python\\images\\a-0.png', populate to textures (1)

a.atlas:

代码语言:javascript
复制
{
  "a-0.png": {
    "logo": [1291, 728, 326, 93],
    "jill": [0, 0, 644, 364]
  }
}

test.py:

代码语言:javascript
复制
#  -*- coding: utf-8 -*-

from kivy import resources
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.graphics import Color, Rectangle
from kivy.atlas import Atlas
from kivy.uix.image import Image

from kivy.config import Config
Config.set('graphics', 'width', '1280')
Config.set('graphics', 'height', '720')
Config.set('kivy', 'log_level', 'trace')

class MyApp(App):

  def build(self):
    tt = Atlas('./images/a.atlas')
    return Image(source='atlas://images/a/logo', pos=[100, 100], size=[326, 93])


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

现在只是个测试。我正在努力学习基维,但是有人知道为什么会发生这种事情吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-05 19:35:43

这是一个错误,正如其中一个评论所指出的:

我认为问题是,当前形式的保存需要创建纹理,而在这个测试中,碰巧还没有创建opengl上下文,一个简单的解决方法是添加: from kivy.core.window import Windowfrom kivy.base import EventLoop EventLoop.ensure_window()位于脚本的顶部。 在那之后对我有用。 我不认为这实际上是一个bug,因为如果不创建opengl上下文,我们就不会承诺对图像进行操作,但是也许我们可以在ensure_window()中调用Image.save()。

因此,您应该只使用以下内容:

代码语言:javascript
复制
#  -*- coding: utf-8 -*-

from kivy.app import App
from kivy.atlas import Atlas
from kivy.uix.image import Image
from kivy.core.window import Window

class MyApp(App):

  def build(self):
    tt = Atlas('images/a.atlas')
    return Image(texture=tt["logo"], pos=[100, 100], size=[326, 93])


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

另外,如果您不想使用Atlas,则可以取消对Atlas的使用:

代码语言:javascript
复制
#  -*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.image import Image


class MyApp(App):

  def build(self):
    return Image(source='atlas://images/a/logo', pos=[100, 100], size=[326, 93])


if __name__ == '__main__':
  MyApp().run()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49117527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档