StackOverflow,当我试图从地图集中加载一张图片时,我对kivy有一个小问题:
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:
{
"a-0.png": {
"logo": [1291, 728, 326, 93],
"jill": [0, 0, 644, 364]
}
}test.py:
# -*- 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()现在只是个测试。我正在努力学习基维,但是有人知道为什么会发生这种事情吗?
发布于 2018-03-05 19:35:43
我认为问题是,当前形式的保存需要创建纹理,而在这个测试中,碰巧还没有创建opengl上下文,一个简单的解决方法是添加:
from kivy.core.window import Window或from kivy.base import EventLoop EventLoop.ensure_window()位于脚本的顶部。 在那之后对我有用。 我不认为这实际上是一个bug,因为如果不创建opengl上下文,我们就不会承诺对图像进行操作,但是也许我们可以在ensure_window()中调用Image.save()。
因此,您应该只使用以下内容:
# -*- 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的使用:
# -*- 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()https://stackoverflow.com/questions/49117527
复制相似问题