Установка цветов рисунка и толщины линий в QtCore.Qt.CrossPattern
Я использую следующее в начале моего 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)
2 ответа
Вид фона в основном только для "заливки"; шаблон креста очень простой и не настраиваемый (кроме цвета, потому что это базовое свойство заливки). Но это не сложно нарисовать вашу собственную сетку, и тогда у вас будет гораздо больше контроля (например, толщина, пунктир / пунктир, показ источника и т. Д.):
- создать ручку для линий сетки: придать ей цвет и ширину
- Вы можете настроить перо на постоянную "косметическую" ширину; в этом случае он не будет масштабироваться
- добавить строки в сцену
- установить линии для наименьшего значения 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()
, который вызывается с прямоугольником видимой сцены: там вы настраиваете конечные точки линии.
Хм, нашел, я также могу установить цвет фона, не влияя на сетку с помощью:
self.setObjectName("QGraphicsView")
frame_css = '''
QGraphicsView#QGraphicsView {
background-color: rgb(42,42,42);
}
'''
self.setStyleSheet(frame_css)