从kivy.core.window导入Window会打开第二个崩溃的Kivy窗口

时间:2017-06-11 10:46:21

标签: kivy kivy-language

我尝试从kivy.core.window导入窗口导入,以便启用纹理支持以显示numpy数组中的图像(请参阅https://groups.google.com/forum/#!topic/kivy-users/2Hvarxhz6lU)。

但是,当我运行导入时,Kivy会尝试打开另一个空白且无响应的窗口。当我删除import语句时,应用程序将正常启动。

任何人都可以指出我正确的方向导入Window以允许纹理支持没有这种行为吗?

谢谢,

奥利弗。

1 个答案:

答案 0 :(得分:1)

这是非常期待的,因为Kivy建立在这种导入行为的基础之上。在简单的Window导入中,例如在控制台中:

>>> from kivy.core.window import Window

创建一个空白的OpenGL窗口,它等待进一步的指令,如第一次绘图和其他初始化的东西。

让我们看一下邮件列表中的代码:

class MainConsole():
    def build(self):
        texture = Texture.create()  # no window, boom
if __name__ == '__main__':
    MainApp().run()  # except other stuff also creates a window

要使其真正起作用,您必须在创建Window后 创建纹理 ,即:

class MainConsole():
    def build(self):
        from kivy.core.window import Window
        texture = Texture.create()  # window, no boom

如果您尝试执行以下操作,如果您尝试在Thread(不确定)或multiprocessing(最有可能)执行此操作,则可能会发生这种情况:

def blob():
    from kivy.core.window import Window
    texture = Texture.create()

如果您在单独的流程中运行此功能,则单独的流程将不会具有相同的Window,因此它会创建一个带有Window导入的新流程,您就可以了。

要解决此问题,您可以做两件事:

  • 使用Config并使用Windowtop
  • left移出查看区域的某个位置
  • 在主Window
  • 中创建和组合纹理