2016-05-02 15 views
0

Der Code erstellt ein QLineEdit-Objekt, dessen Hintergrundgradient von oben nach unten verläuft. Wie man den Gradient von Seite zu Seite machen lässt (im Wesentlichen den Vertical-to-Horizontal-Gradient als Hintergrund verwenden)?So weisen Sie dem QLineEdit-Hintergrund den horizontalen Farbverlauf zu

enter image description here

line = QtGui.QLineEdit() 
    gradient = QtGui.QLinearGradient(QtCore.QRectF(line.rect()).topRight(), QtCore.QRectF(line.rect()).bottomRight()) # top bottm 
    gradient = QtGui.QLinearGradient(QtCore.QRectF(line.rect()).topLeft(), QtCore.QRectF(line.rect()).topRight()) # top bottm 

    gradient.setColorAt(0.0, QtGui.QColor("blue")) 
    gradient.setColorAt(1.0, QtGui.QColor("red")) 
    brush = QtGui.QBrush(gradient) 
    palette = line.palette() 
    palette.setBrush(QtGui.QPalette.Base, brush) 
    line.setPalette(palette) 
    line.show() 

Antwort

1

Sie auf dem richtigen Weg waren mit der Steigung von oben links nach oben rechts gehen zu lassen. Das Problem war, dass der QLineEdit noch nicht die endgültige Form hatte, so dass sein rect() zu groß war. Wenn Sie den Farbverlauf nach line.show() einstellen, funktioniert es. Siehe mein Beispiel unten:

import sys 
from PyQt4 import QtGui, QtCore 

app = QtGui.QApplication(sys.argv) 

line = QtGui.QLineEdit() 
rect = QtCore.QRectF(line.rect()) 
print rect # 640 by 480 pixels 

line.show() 

rect = QtCore.QRectF(line.rect()) 
print rect # 200 by 21 pixels 

horGradient = QtGui.QLinearGradient(rect.topLeft(), rect.topRight()) 
verGradient = QtGui.QLinearGradient(rect.topLeft(), rect.bottomLeft()) 

gradient = horGradient 

gradient.setColorAt(0.0, QtGui.QColor("blue")) 
gradient.setColorAt(1.0, QtGui.QColor("red")) 
brush = QtGui.QBrush(gradient) 
palette = line.palette() 
palette.setBrush(QtGui.QPalette.Base, brush) 
line.setPalette(palette) 

sys.exit(app.exec_())