【问题标题】:Margins in PyQtGraph's GraphicsLayoutPyQtGraph 的 GraphicsLayout 中的边距
【发布时间】:2015-01-21 10:00:44
【问题描述】:

使用 PyQtGraph 进行简单的图形布局:

from pyqtgraph.Qt import QtGui, QtCore                                              
import pyqtgraph as pg                                                              

app = QtGui.QApplication([])                                                        
view = pg.GraphicsView()                                                            
l = pg.GraphicsLayout(border='g')                                                   
view.setCentralItem(l)                                                              
view.show()                                                                         
view.resize(800,600)                                                                

l.addPlot(0, 0)                                                                     
l.addPlot(1, 0)                                                                     

l.layout.setSpacing(0.)                                                             
l.setContentsMargins(0., 0., 0., 0.)                                                

if __name__ == '__main__':                                                          
    import sys                                                                      
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):         
        QtGui.QApplication.instance().exec_() 

输出:

我怎样才能摆脱绿色外线和窗口边框之间的小边距?

我可以做到这一点并使用l.setContentsMargins(-10., -10., -10., -10.),这很有效:

但在我看来,这像是一个肮脏的把戏,应该有另一个参数来设置该边距。这可能吗?是否有另一个边距参数可以设置为0 以获得相同的结果?

【问题讨论】:

    标签: python pyqt pyqtgraph


    【解决方案1】:

    我认为这可能是一个 Qt 错误。有一个简单的解决方法:

    l = pg.GraphicsLayout()
    l.layout.setContentsMargins(0, 0, 0, 0)
    

    为了理解这一点,让我们看一个修改后的例子:

    from pyqtgraph.Qt import QtGui, QtCore
    import pyqtgraph as pg
    
    app = QtGui.QApplication([])
    view = pg.GraphicsView()
    view.show()
    view.resize(800,600)
    
    class R(QtGui.QGraphicsWidget):
        # simple graphics widget that draws a rectangle around its geometry
        def boundingRect(self):
            return self.mapRectFromParent(self.geometry()).normalized()
        def paint(self, p, *args):
            p.setPen(pg.mkPen('y'))
            p.drawRect(self.boundingRect())
    
    l = QtGui.QGraphicsGridLayout()
    r1 = R()
    r2 = R()
    r3 = R()
    r1.setLayout(l)
    l.addItem(r2, 0, 0)
    l.addItem(r3, 1, 0)
    
    view.scene().addItem(r1)
    

    在此示例中,调用l.setContentsMargins(...) 具有预期效果,但调用r1.setContentsMargins(...) 没有。不过,Qt 文档建议效果应该是相同的:http://qt-project.org/doc/qt-4.8/qgraphicswidget.html#setContentsMargins

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 2014-09-05
      • 1970-01-01
      • 2014-03-21
      • 1970-01-01
      • 2015-05-11
      • 2011-08-18
      • 1970-01-01
      • 2018-09-28
      相关资源
      最近更新 更多