如何在 Vispy.app 中直接使用 Vispy.app.Canvas 运行 并作为 QMainWindow 中的 QWidget

How to have a Vispy.app.Canvas running directly in Vispy.app AND as a QWidget inside a QMainWindow

我想知道如何根据事实在 Vispy.app.Canvas init() 的末尾制作 self.show() 指令canvas 在 Vispy 应用程序中基本上是 运行 或在 QMainWindow 中作为 QWidget。

所以我有一个 Python3 Vispy 应用程序 运行 并直接显示 Canvas。在Canvas的init调用结束时,有一个强制性的self.show()。这很好用。

现在我还想将此 canvas 用作 QMainWindow 中的中央小部件。仅当我注释掉 self.show() 命令时才有效。

我想让这个调用依赖于某些东西(canvas.native.parent...或其他东西,只有当 运行 在 QMainWindow 之外时才执行它:

if SOME_CONDITION_TELLING_ME_I_M_OUT_OF_QMAINWINDOW:
    self.show()

这将帮助我分解此 canvas class 而不是仅针对此 self.show() 调用有两个版本。

我希望第一个问题是清楚的。

此处提供完整代码:https://github.com/gregvds/grayscott

谢谢,

格雷格

您不需要在 class 的 __init__ 方法中包含 self.show()。在创建 Canvas 之后,您可以从使用它的模块中调用它:

canvas = Canvas(...)
canvas.show()

这样你只需要从 Canvas 是它自己的 window.

的用途中调用 .show()