pyqt vtk:如何删除边距?

pyqt vtk: How to remove the margin?

我的程序中使用的是pyqt5+vtk,代码为:

import sys
import vtk

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor

class MainWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__()
        self.setStyleSheet('background-color: rgb(255,0,0)')
        self.setContentsMargins(0, 0, 0, 0)
        self.frame = QFrame()

        self.vl = QVBoxLayout()
        self.setLayout(self.vl)
        self.vtkWidget = QVTKRenderWindowInteractor(self.frame)
        self.vtkWidget.setContentsMargins(0, 0, 0, 0)
        self.vl.addWidget(self.vtkWidget)

        self.ren = vtk.vtkRenderer()
        self.vtkWidget.GetRenderWindow().AddRenderer(self.ren)
        self.iren = self.vtkWidget.GetRenderWindow().GetInteractor()

        # Create source
        source = vtk.vtkSphereSource()
        source.SetCenter(0, 0, 0)
        source.SetRadius(5.0)

        # Create a mapper
        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInputConnection(source.GetOutputPort())

        # Create an actor
        actor = vtk.vtkActor()
        actor.SetMapper(mapper)

        self.ren.AddActor(actor)

        self.ren.ResetCamera()

        self.show()
        self.iren.Initialize()


if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = MainWindow()

    sys.exit(app.exec_())

这段代码没有bug,结果是:

唯一的问题是vtk window 没有占据所有qt window(请看红色)。我已经试过了self.setContentsMargins(0, 0, 0, 0),但还是不行。

有什么方法可以去除边距吗?如有任何建议,我们将不胜感激。

这与vtk无关,与Qt布局有关。

每次在小部件上设置布局时,Qt 都会根据小部件(或应用程序)添加默认边距 style()

在大多数平台上,它的范围在 6 到 10 像素之间,为了避免这种情况,内容边距必须明确设置为 0 对于布局:

self.vl.setContentsMargins(0, 0, 0, 0)