PyQT + VTK:QVTKRenderWindowInteractor是不可见的

时间:2015-05-29 15:04:41

标签: python pyqt vtk qwidget

我用 pyqt和VTK 制作了一个可视化3D数据的程序。 QVTKRenderWindowInteractor嵌入QMainWindow centralWidget

一切正常但如果我添加:

self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)

我得到一个洞(QVTKRenderWindowInteractor是100%透明的)。所有其他小部件都正确显示(menuBar,statusBar等)。

我尝试了几种组合,似乎问题并非来自我的样式表。我绝对不知道这里发生了什么。

欢迎任何帮助:)

编辑:这是一个示例(python 2.7和vtk。我使用python(x,y)):

#!/usr/bin/env python

import sys
import vtk
from vtk.qt4.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
from PyQt4 import Qt
from PyQt4 import QtGui, QtCore
class test(Qt.QMainWindow):
    """Test class"""
    def __init__(self, parent=None):
        Qt.QMainWindow.__init__(self, parent)

        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)

        self.setWindowTitle(self.tr("PyQt4 VTK test"))
        self.workspace = Qt.QWorkspace()
        self.setCentralWidget(self.workspace)
        self.frame = QtGui.QFrame(self.workspace)
        self.hbox = QtGui.QHBoxLayout()
        # create the widget
        self.widget = QVTKRenderWindowInteractor(self.frame)
        self.widget.Initialize()
        self.widget.Start()
        # if you dont want the 'q' key to exit comment this.
        self.widget.AddObserver("ExitEvent", lambda o, e, a=app: a.quit())
        self.cone = vtk.vtkConeSource()
        self.cone.SetResolution(8)
        self.coneMapper = vtk.vtkPolyDataMapper()
        self.coneMapper.SetInput(self.cone.GetOutput())
        self.coneActor = vtk.vtkActor()
        self.coneActor.SetMapper(self.coneMapper)
        self.ren = vtk.vtkRenderer()
        self.ren.AddActor(self.coneActor)
        self.renWin=self.widget.GetRenderWindow()
        self.renWin.AddRenderer(self.ren)
        self.hbox.addWidget(self.widget)
        self.frame.setLayout(self.hbox)
        self.workspace.addWindow(self.frame)

if __name__ == "__main__":
    app = Qt.QApplication(sys.argv)
    mainwindow = test()
    mainwindow.show()
    sys.exit(app.exec_())

0 个答案:

没有答案