首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将pyvista添加到pyqt小部件中?

将pyvista添加到pyqt小部件中?
EN

Stack Overflow用户
提问于 2021-09-09 17:11:00
回答 1查看 606关注 0票数 1

我在努力实现一幅比维斯塔图

代码语言:javascript
复制
import sys
from qtpy import QtWidgets
from qtpy.QtWidgets import QMainWindow
import numpy as np
import pyvista as pv
from pyvistaqt import QtInteractor


class MainWindow(QMainWindow):

    def __init__(self, parent=None, show=True):
        QtWidgets.QMainWindow.__init__(self, parent)

        # create the frame
        self.frame = QtWidgets.QFrame()
        vlayout = QtWidgets.QVBoxLayout()

        # add the pyvista interactor object
        self.plotter = QtInteractor(self.frame)
        vlayout.addWidget(self.plotter.interactor)

        self.frame.setLayout(vlayout)
        self.setCentralWidget(self.frame)


        # Define a simple linear surface
        x = np.array([1,2,3,4,5,6,7,8,9])
        y = np.array([1,2,3,4,5,6,7,8,9])
        x, y = np.meshgrid(x, y)
        z = x*y

        self.grid = pv.StructuredGrid(x, y, z)
        self.z = z
        self.x = x
        self.y = y
        
        self.plotter.show_grid()
        self.plotter.add_mesh(self.grid, scalars=self.grid.points[:, -1], lighting=True, specular=0.5, smooth_shading=True, show_edges=True,
                              scalar_bar_args={'vertical': True})
        self.plotter.set_scale(xscale=1, yscale=x.ptp()/y.ptp(), zscale=x.ptp()/z.ptp())

    
        self.show()



if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec())

在qtdesigner中创建的pyqt选项卡小部件中。

代码语言:javascript
复制
from PyQt6 import QtCore, QtGui, QtWidgets
from pyvistaqt import QtInteractor


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
        self.tabWidget.setGeometry(QtCore.QRect(0, 0, 801, 571))
        self.tabWidget.setObjectName("tabWidget")
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        self.widget = QtInteractor(self.tab)
        self.widget.setGeometry(QtCore.QRect(-11, -1, 811, 551))
        self.widget.setObjectName("widget")
        self.tabWidget.addTab(self.tab, "")
        self.tab_2 = QtWidgets.QWidget()
        self.tab_2.setObjectName("tab_2")
        self.tabWidget.addTab(self.tab_2, "")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Tab 2"))



if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec())

但是我的尝试导致了各种各样的错误。我不知道这些字段的正确信息是什么。

我尝试过各种基类类型和名称,但我真的只是在黑暗中拍摄,因为我还不是很擅长这个。

即使在我尝试添加任何pyvistaqt逻辑之前,它都无法加载基本选项卡小部件模板,从而产生此错误。

代码语言:javascript
复制
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-1-2f4308f7d135> in <module>
     46     MainWindow = QtWidgets.QMainWindow()
     47     ui = Ui_MainWindow()
---> 48     ui.setupUi(MainWindow)
     49     MainWindow.show()
     50     sys.exit(app.exec())

<ipython-input-1-2f4308f7d135> in setupUi(self, MainWindow)
     14         self.tab = QtWidgets.QWidget()
     15         self.tab.setObjectName("tab")
---> 16         self.widget = QtInteractor(self.tab)
     17         self.widget.setGeometry(QtCore.QRect(-11, -1, 811, 551))
     18         self.widget.setObjectName("widget")

~\anaconda3\lib\site-packages\pyvistaqt\plotting.py in __init__(self, parent, title, off_screen, multi_samples, line_smoothing, point_smoothing, polygon_smoothing, auto_update, **kwargs)
    223                 qvtk_kwargs[key] = kwargs.pop(key)
    224         with _no_base_plotter_init():
--> 225             QVTKRenderWindowInteractor.__init__(self, **qvtk_kwargs)
    226         BasePlotter.__init__(self, **kwargs)
    227         # backward compat for when we had this as a separate class

~\anaconda3\lib\site-packages\vtkmodules\qt\QVTKRenderWindowInteractor.py in __init__(self, parent, **kw)
    258             else:
    259                 wflags = Qt.WindowFlags()
--> 260             QWidget.__init__(self, parent, wflags | Qt.MSWindowsOwnDC)
    261         elif QVTKRWIBase == "QGLWidget":
    262             QGLWidget.__init__(self, parent)

TypeError: QWidget(parent: QWidget = None, flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.WindowFlags()): argument 1 has unexpected type 'QWidget'

有人能帮我吗?我发现pyqt是一个非常复杂的,很难理解的库,因为我需要一个pyvista图集成到pyqt中,所以我希望这个图能工作,这样我就可以利用它来尝试理解pyqt的无稽之谈。

EN

回答 1

Stack Overflow用户

发布于 2022-01-04 03:17:52

我建议改用PyQT5,我认为PyQT6还不受支持。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69122273

复制
相关文章

相似问题

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