gpt4 book ai didi

python - 在 QtCore.Qt.CrossPattern 上设置图案颜色和线条粗细

转载 作者:太空宇宙 更新时间:2023-11-04 02:59:21 25 4
gpt4 key购买 nike

我在我的 QtGui.QGraphicsView 的初始化中使用以下内容来制作漂亮的网格/交叉图案。但不确定如何更改十字图案线条的背景颜色或粗细?使用 setColor 设置颜色,但这只会改变 crossPattern 的颜色,不会改变背景。

有没有办法改变这些,或者我应该使用不同类型的样式?

import PySide.QtGui as QtGui
import PySide.QtCore as QtCore

class NodeGraphView(QtGui.QGraphicsView):

def __init__(self, parent):
super(NodeGraphView, self).__init__(parent)

self.fg_brush = QtGui.QBrush()
self.fg_brush.setStyle(QtCore.Qt.CrossPattern)
self.fg_brush.setColor(QtGui.QColor(42, 42, 42, 255))

self.setBackgroundBrush(self.fg_brush)

最佳答案

View 背景基本上只是为了“填充”;交叉图案非常基本且不可配置(颜色除外,因为这是基本的填充属性)。但是绘制自己的网格并不难,然后你有更多的控制权(例如粗细、虚线/虚线、显示原点等):

  • 为网格线创建笔:给它颜色和宽度
  • 您可以将笔设置为具有恒定的“修饰”宽度;在那种情况下,它不会扩展
  • 向场景添加线条
  • 将线条设置为具有最低的 z 值,以便在其他所有内容之前绘制它们

示例:

from PyQt5.QtCore import QTimer, Qt
from PyQt5.QtGui import QPen
from PyQt5.QtWidgets import QApplication, QGraphicsScene, QGraphicsView

scale_fac = 1

def scale():
global scale_fac
scale_fac = scale_fac * 1.5
view.scale(scale_fac, scale_fac)

app = QApplication([])

scene = QGraphicsScene()
pen = QPen(Qt.red)
pen.setCosmetic(True) # ***
for x in range(0, 500, 50):
line = scene.addLine( x, 0, x, 500, pen)
line.setZValue(-10)
for y in range(0, 500, 50):
scene.addLine( 0, y, 500, y, pen)
line.setZValue(-10)

view = QGraphicsView()
view.setScene(scene)
view.show()

QTimer.singleShot(1000, scale)
QTimer.singleShot(2000, scale)
QTimer.singleShot(3000, scale)
app.exec()

如果未发出 setCosmetic(True),则线宽会随着放大而增加。

上面的好处是线条在场景中处于固定坐标。但是,如果缩小,则可能需要添加更多行,或使现有行更长。您可以通过覆盖场景的 drawBackground() 来做到这一点,该场景会在 View 中的场景矩形中被调用:您可以在此处调整直线端点。

关于python - 在 QtCore.Qt.CrossPattern 上设置图案颜色和线条粗细,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41427606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com