Python Qt绑定:如何增加宽度为0的行的宽度

时间:2014-10-06 07:26:01

标签: python qt pyqt drawing pyside

使用以下简单示例(适用于我的计算机中的PySide或PyQt4):

import sys
import random
import numpy
from PySide import QtGui, QtCore

class Window(QtGui.QWidget):

    def __init__(self):
        super(Window, self).__init__()

        self.resize(800, 500)
        self.view = QtGui.QGraphicsView()
        self.scene = QtGui.QGraphicsScene()
        self.view.setScene(self.scene)
        self.setWindowTitle('Example')

        # Layout
        layout = QtGui.QGridLayout()
        layout.addWidget(self.view, 0, 0)
        self.setLayout(layout)

        # Styles
        self.pen = QtGui.QPen(QtCore.Qt.black, 0, QtCore.Qt.SolidLine)
        self.brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 255))

    def addLine(self, x0, y0, x1, y1):
        line = QtCore.QLineF(x0, -y0, x1, -y1)
        pen = QtGui.QPen(QtGui.QColor(250, 0, 0, 255), 0, QtCore.Qt.SolidLine)
        pen.setStyle(QtCore.Qt.CustomDashLine)
        pen.setDashPattern([1, 4, 5, 4])
        l = self.scene.addLine(line, pen)

    def addRect(self, left, top, width, height):
        rect = QtCore.QRectF(left, -top, width, abs(height))
        r = self.scene.addRect(rect, self.pen, self.brush)

    def fit(self):
        self.view.fitInView(self.scene.sceneRect())

    def resizeEvent(self, event = None):
        self.fit()


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    window.addRect(0, 1, 1, 1)
    window.addLine(-1, -1, 2, 2)
    window.addLine(0, 1, 1, 0)
    window.fit()
    sys.exit(app.exec_())

我能画出两条宽度恒定的红线;这意味着它们不会改变方形和线条的大小(坐标),如果我重新调整窗口大小,则无关紧要:

enter image description here enter image description here

这是因为我使用宽度为QtGui.Qpen的{​​{1}}。但是,如果我使用另一个宽度0,则观察到的线宽将在窗口重新调整大小时更改(或者如果方形和线条也具有其他尺寸,则会更改):

enter image description here enter image description here

是否可以更改(增加)线宽,使观察线比宽度设置为> 0时获得的线宽,同时在窗口调整大小或当窗口大小时保持相同的“观察”宽度方形/线条的尺寸各不相同?

修改

按照o11c的建议使用0会产生意外行为(至少我不希望这种情况发生);它会为图像添加边距(增加setCosmetic(True)的大小)。当scene.sceneRect()

时,这些边距似乎与QPen的宽度成正比

enter image description here

已创建与此问题相关的新问题。有关详细信息,请参阅question 26231374

1 个答案:

答案 0 :(得分:1)

根据Qt C ++文档,使用QPen上的setCosmetic function。我假设python包装器暴露了这个。