我在我的程序中使用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_())
此代码没有错误,其结果是:
唯一的问题是vtk窗口没有占据所有的qt窗口(请看红色)。我试过self.setContentsMargins(0, 0, 0, 0)
,但它不起作用。
有什么方法可以去掉保证金吗?如有任何建议,我们将不胜感激。
发布于 2020-12-03 12:51:15
这与vtk无关,而是与Qt布局有关。
每次在小部件上设置布局时,Qt都会根据小部件(或应用程序的) style()
添加默认边距。
在大多数平台上,它的范围在6到10个像素之间,为了避免这种情况,布局必须明确地将内容边距设置为0。
self.vl.setContentsMargins(0, 0, 0, 0)
https://stackoverflow.com/questions/65126109
复制相似问题