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

importing Window from kivy.core.window opens a second Kivy window that crashes

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

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

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

谢谢,

奥利弗

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

>>> from kivy.core.window import Window

创建了一个空白的 OpenGL window,它等待进一步的指令,例如第一次绘图和其他初始化内容。

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

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 并使用 topleft
  • Window 移出查看区域的某处
  • 创建并 assemble 主 Window
  • 中的纹理