2016-05-02 10 views
0

このコードは、背景勾配を上から下に向かって実行するQLineEditを作成します。グラデーションを左右に移動するにはどうすればいいですか?QLineEditの背景に水平グラデーションを割り当てる方法

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() 

答えて

1

あなたは勾配が右上隅に左上から手放すと正しい軌道に乗っていました。問題は、QLineEditがまだ最終形状を持たず、rect()が大きすぎるということでした。 line.show()の後にグラデーションを設定した場合、それは機能します。下記の私の例をご覧ください:

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_()) 
関連する問題