我知道这个问题是以几种方式提出的,但我无法在我的具体用例中找到答案。我使用(pyQT 5.15)创建布局,并希望使用vispy作为显示。在阅读完之后,我似乎不得不设置一个小部件,但我仍然不清楚如何设置。这就是我所拥有的,我试图有一个简单的例子,通过计时器将颜色从黑色更改为白色。没有错误,但也没有可视化。
下面是转换为Python的GUI.ui,名为GUI.py
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_())Here is the app part:
```javascriptimport sysfrom vispy import gloo, appfrom gui import Ui_Dialogfrom PyQt5 import QtWidgetsapp.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.QMainWindow): def __init__(self): super(myWindow, self).__init__() self.ui = Ui_Dialog() self.ui.setupUi(self) canvas = Canvas() self.ui.vispy_widget(canvas.native)if __name__ == "__main__": gui = QtWidgets.QApplication(sys.argv) Dialog = QtWidgets.QDialog() ui = Ui_Dialog() ui.setupUi(Dialog) Dialog.show() app.run() #sys.exit(app.exec_())发布于 2021-05-04 00:54:00
有以下错误:
self.ui.vispy_widget(canvas.native)命令没有意义,其思想是使用vispy_widget作为一个容器,用于可以通过布局放置的本地vispy小部件。。
如果您已经在小部件中设置了if __name__ == "__main__":.,那么就没有必要在中实现相同的Ui_Dialog。
math模块.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()https://stackoverflow.com/questions/67377285
复制相似问题