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)
我的程序中使用的是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)