在PyQt/PySide中,可以通过以下步骤来保持QLinearGradient始终在中间:
gradient = QLinearGradient(start_x, start_y, end_x, end_y)
gradient.setCoordinateMode(QGradient.ObjectBoundingMode)
painter.setBrush(gradient)
这样,无论对象的大小如何变化,渐变都会始终保持在中间。
以下是一个完整的示例代码:
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QLinearGradient, QGradient
from PyQt5.QtCore import Qt
class MyWidget(QWidget):
def paintEvent(self, event):
painter = QPainter(self)
gradient = QLinearGradient(0, 0, self.width(), 0)
gradient.setColorAt(0, Qt.red)
gradient.setColorAt(1, Qt.blue)
gradient.setCoordinateMode(QGradient.ObjectBoundingMode)
painter.setBrush(gradient)
painter.drawRect(self.rect())
if __name__ == '__main__':
app = QApplication([])
widget = MyWidget()
widget.resize(400, 300)
widget.show()
app.exec_()
在这个示例中,我们创建了一个QWidget子类,并重写了它的paintEvent()方法。在paintEvent()方法中,我们创建了一个QLinearGradient对象,并将其设置为QWidget的画刷。通过设置渐变的起始点和结束点,以及坐标模式为QGradient.ObjectBoundingMode,我们确保了渐变始终保持在中间。最后,我们使用QPainter对象的drawRect()方法绘制了一个矩形,填充了渐变。
推荐的腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云