【问题标题】:importing Window from kivy.core.window opens a second Kivy window that crashes从 kivy.core.window 导入窗口会打开第二个崩溃的 Kivy 窗口
【发布时间】:2017-06-11 10:46:20
【问题描述】:

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

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

谁能指出我正确的方向来导入 Window 以允许在没有这种行为的情况下支持纹理?

谢谢,

奥利弗。

【问题讨论】:

    标签: kivy kivy-language


    【解决方案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 并使用topleftWindow 移出查看区域的某个位置
    • 在主Window 中创建和组装纹理

    【讨论】:

      猜你喜欢
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      相关资源
      最近更新 更多