从mayavi scen中删除工具栏

2024-09-28 21:53:31 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以删除/隐藏使用mayavi打印时默认创建的标准工具栏?我发现了这个:How to remove Mayavi toolbar in python using code

但我不知道该在哪里插入代码。有比这更简单的吗mlab.toolbar.setVisible(假)?在


Tags: to代码in标准coderemovehow工具栏
2条回答

在图形上,可以很容易地这样做:

fig = mlab.figure(1)
fig.scene.scene_editor._tool_bar.setVisible(False)
import os
os.environ['ETS_TOOLKIT'] = 'qt4'
os.environ['QT_API'] = 'pyqt5' 

from traits.api import HasTraits, Instance, on_trait_change
from traitsui.api import View, Item
from mayavi.core.ui.api import MayaviScene, MlabSceneModel, SceneEditor
from PyQt5.QtWidgets import *
from main import Ui_MainWindow
import sys
from traitsui.api import Handler


class Visualization(HasTraits):
    scene = Instance(MlabSceneModel, ())

    @on_trait_change('scene.activated')
    def update_plot(self):
        self.scene.mlab.test_points3d()

    view = View(Item('scene', editor=SceneEditor(scene_class=MayaviScene),
                 height=250, width=300, show_label=False),
            resizable=True  # We need this to resize with the parent widget
            )


class DisableToolbarHandler(Handler):
    def position(self, info):
        editor = info.ui.get_editors('scene')[0]
        editor._scene._tool_bar.setVisible(False)


class MayaviQWidget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        layout = QVBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)
        self.visualization = Visualization()
        self.ui = self.visualization.edit_traits(handler=DisableToolbarHandler(), kind='subpanel').control
        layout.addWidget(self.ui)
        self.ui.setParent(self)


class Action(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(Action, self).__init__(parent)
        self.setupUi(self)
        self.splitter.setSizes([100, 300])
        self.splitter_2.setSizes([400, 100])

        container = QWidget()
        mayavi_widget = MayaviQWidget(container)
        self.Layout.addWidget(mayavi_widget)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    action = Action()
    action.show()
    sys.exit(app.exec_())

相关问题 更多 >