首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置用于vispy的小部件

如何设置用于vispy的小部件
EN

Stack Overflow用户
提问于 2021-05-04 00:19:49
回答 1查看 268关注 0票数 1

我知道这个问题是以几种方式提出的,但我无法在我的具体用例中找到答案。我使用(pyQT 5.15)创建布局,并希望使用vispy作为显示。在阅读完之后,我似乎不得不设置一个小部件,但我仍然不清楚如何设置。这就是我所拥有的,我试图有一个简单的例子,通过计时器将颜色从黑色更改为白色。没有错误,但也没有可视化。

下面是转换为Python的GUI.ui,名为GUI.py

代码语言:javascript
复制
from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(702, 603)
        self.vispy_widget = QtWidgets.QWidget(Dialog)
        self.vispy_widget.setGeometry(QtCore.QRect(150, 20, 531, 531))
        self.vispy_widget.setObjectName("vispy_widget")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(580, 560, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.horizontalScrollBar = QtWidgets.QScrollBar(Dialog)
        self.horizontalScrollBar.setGeometry(QtCore.QRect(160, 560, 401, 20))
        self.horizontalScrollBar.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalScrollBar.setObjectName("horizontalScrollBar")
        self.horizontalSlider = QtWidgets.QSlider(Dialog)
        self.horizontalSlider.setGeometry(QtCore.QRect(20, 60, 111, 16))
        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider.setObjectName("horizontalSlider")
        self.hist_widget = QtWidgets.QWidget(Dialog)
        self.hist_widget.setGeometry(QtCore.QRect(20, 90, 120, 80))
        self.hist_widget.setObjectName("hist_widget")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.pushButton.setText(_translate("Dialog", "PushButton"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())
代码语言:javascript
复制
Here is the app part:

```javascript
代码语言:javascript
复制
import sys
代码语言:javascript
复制
from vispy import gloo, app
代码语言:javascript
复制
from gui import Ui_Dialog
代码语言:javascript
复制
from PyQt5 import QtWidgets
代码语言:javascript
复制
app.use_app('pyqt5')
代码语言:javascript
复制
class Canvas(app.Canvas):
代码语言:javascript
复制
    def __init__(self, *args, **kwargs):
代码语言:javascript
复制
        app.Canvas.__init__(self, *args, **kwargs)
代码语言:javascript
复制
        self._timer = app.Timer('auto', connect=self.on_timer, start=True)
代码语言:javascript
复制
        self.tick = 0
代码语言:javascript
复制
    def on_draw(self, event):
代码语言:javascript
复制
        gloo.clear(color=True)
代码语言:javascript
复制
    def on_timer(self, event):
代码语言:javascript
复制
        self.tick += 1 / 60.0
代码语言:javascript
复制
        c = abs(math.sin(self.tick))
代码语言:javascript
复制
        gloo.set_clear_color((c, c, c, 1))
代码语言:javascript
复制
        self.update()
代码语言:javascript
复制
class myWindow(QtWidgets.QMainWindow):
代码语言:javascript
复制
    def __init__(self):
代码语言:javascript
复制
        super(myWindow, self).__init__()
代码语言:javascript
复制
        self.ui = Ui_Dialog()
代码语言:javascript
复制
        self.ui.setupUi(self)
代码语言:javascript
复制
        canvas = Canvas()
代码语言:javascript
复制
        self.ui.vispy_widget(canvas.native)
代码语言:javascript
复制
if __name__ == "__main__":
代码语言:javascript
复制
    gui = QtWidgets.QApplication(sys.argv)
代码语言:javascript
复制
    Dialog = QtWidgets.QDialog()
代码语言:javascript
复制
    ui = Ui_Dialog()
代码语言:javascript
复制
    ui.setupUi(Dialog)
代码语言:javascript
复制
    Dialog.show()
代码语言:javascript
复制
    app.run()
代码语言:javascript
复制
    #sys.exit(app.exec_())
代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-04 00:54:00

有以下错误:

  • self.ui.vispy_widget(canvas.native)命令没有意义,其思想是使用vispy_widget作为一个容器,用于可以通过布局放置的本地vispy小部件。

  • 选择.ui表单用于确定基类,在您的情况下,您应该使用QDialog而不是QMainWindow.

如果您已经在小部件中设置了if __name__ == "__main__":.,那么就没有必要在中实现相同的Ui_Dialog。

  • 您必须导入math模块.

代码语言:javascript
复制
import math
import sys

from vispy import gloo, app

from PyQt5 import QtWidgets

from gui import Ui_Dialog

app.use_app("pyqt5")


class Canvas(app.Canvas):
    def __init__(self, *args, **kwargs):
        app.Canvas.__init__(self, *args, **kwargs)
        self._timer = app.Timer("auto", connect=self.on_timer, start=True)
        self.tick = 0

    def on_draw(self, event):
        gloo.clear(color=True)

    def on_timer(self, event):
        self.tick += 1 / 60.0
        c = abs(math.sin(self.tick))
        gloo.set_clear_color((c, c, c, 1))
        self.update()


class MyWindow(QtWidgets.QDialog):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

        self.canvas = Canvas()

        lay = QtWidgets.QVBoxLayout(self.ui.vispy_widget)
        lay.addWidget(self.canvas.native)


if __name__ == "__main__":
    gui = QtWidgets.QApplication(sys.argv)
    w = MyWindow()
    w.show()
    app.run()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67377285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档