2016-05-01 13 views
1

コードでは、QLineEditQPushButtonという1つのダイアログが作成されます。 ボタンをクリックすると、QLineEditがボタンのプッシュでトリガされたプロセスの進行状況を示すプログレスバーに変わります。プロセスが完了すると、QLineEditは通常の「LineEdit」の外観に戻ります。これを達成する方法は?ここでQLineEditの背景を進行中のバーにする方法

enter image description here

Photoshopの-EDのアイデアです:では enter image description here

from PyQt4 import QtCore, QtGui 
import time 

class Dialog(QtGui.QDialog): 
    def __init__(self, parent=None): 
     QtGui.QDialog .__init__(self, parent) 
     mainLayout = QtGui.QVBoxLayout() 
     lineEdit = QtGui.QLineEdit('ITEM 001') 
     mainLayout.addWidget(lineEdit) 
     button = QtGui.QPushButton('Push Button') 
     button.clicked.connect(self.buttonClicked) 
     mainLayout.addWidget(button) 
     self.setLayout(mainLayout) 

    def buttonClicked(self): 
     print 'button clicked' 
     for i in range(3): 
      time.sleep(1) 
      print '...processing %s'%i 

if __name__ == '__main__': 
    app = QtGui.QApplication([]) 
    window = Dialog() 
    window.resize(300, 50) 
    window.show() 
    app.exec_() 
+0

私はのQLineEditのsetPaletteメソッドを使用するだろうと思います。同様に、QLineEditの背景を設定する方法と同様です。たとえば背景を設定する方法を見てみましょう。画像。 –

+0

もちろん、良いアイデアです!ありがとう! – alphanumeric

答えて

2

enter image description here

プログレスバーがにQLineEditの下部にある細い線かもしれませんPyQt4 QLinearGradientは水平方向になります。 PySideでは、それは垂直グラデーションのように扱われるようです。 palette.setBrush(QPalette.Base, QBrush(QLinearGradient))で背景色を設定してQLineEditを作成します。ボタンを押すとプログレスバーの値が10%上がります。勾配が水平であるかもしれないPySideについては

enter image description here

from PyQt4 import QtCore, QtGui 
import time 


class Dialog(QtGui.QDialog): 
    value = 0.001 
    def __init__(self, parent=None): 
     QtGui.QDialog .__init__(self, parent) 
     mainLayout = QtGui.QVBoxLayout() 

     self.lineedit = QtGui.QLineEdit() 
     self.setValues() 
     mainLayout.addWidget(self.lineedit) 
     button = QtGui.QPushButton('Calculate') 
     button.clicked.connect(self.buttonClicked) 
     mainLayout.addWidget(button) 
     self.setLayout(mainLayout) 

    def setValues(self): 
     self.lineedit.setText('progress %s'%self.value) 
     palette = self.lineedit.palette() 
     QRectF = QtCore.QRectF(self.lineedit.rect()) 
     gradient = QtGui.QLinearGradient(QRectF.topLeft(), QRectF.topRight()) 
     gradient.setColorAt(self.value-0.001, QtGui.QColor('#f99e41')) 
     gradient.setColorAt(self.value, QtGui.QColor('#ffffff')) 
     gradient.setColorAt(self.value+0.001, QtGui.QColor('#ffffff')) 
     palette.setBrush(QtGui.QPalette.Base, QtGui.QBrush(gradient)) 
     self.lineedit.setPalette(palette) 

    def buttonClicked(self): 
     if self.value >0.9: 
      self.value = 0.001 
     else: 
      self.value=self.value+0.1 

     self.setValues() 
     time.sleep(1) 

if __name__ == '__main__': 
    app = QtGui.QApplication([]) 
    window = Dialog() 
    window.resize(300, 50) 
    window.show() 
    app.exec_() 

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

class Dialog(QtGui.QDialog): 
    value = 1.00 
    def __init__(self, parent=None): 
     QtGui.QDialog .__init__(self, parent) 
     mainLayout = QtGui.QVBoxLayout() 

     self.lineedit = QtGui.QLineEdit() 
     self.setValues() 
     mainLayout.addWidget(self.lineedit) 
     button = QtGui.QPushButton('Calculate') 
     button.clicked.connect(self.buttonClicked) 
     mainLayout.addWidget(button) 
     self.setLayout(mainLayout) 

    def setValues(self): 
     self.lineedit.setText('progress %s'%self.value) 
     palette = self.lineedit.palette() 
     QRectF = QtCore.QRectF(self.lineedit.rect()) 
     gradient = QtGui.QLinearGradient(QRectF.topLeft(), QRectF.topRight()) 
     gradient.setColorAt(self.value-0.001, QtGui.QColor('#ffffff')) 
     gradient.setColorAt(self.value, QtGui.QColor('#f99e41')) 
     gradient.setColorAt(self.value+0.001, QtGui.QColor('#f99e41')) 
     palette.setBrush(QtGui.QPalette.Base, QtGui.QBrush(gradient)) 
     self.lineedit.setPalette(palette) 

    def buttonClicked(self): 
     if self.value <0.1: 
      self.value = 1.00 
     else: 
      self.value=self.value-0.1 

     self.setValues() 


if __name__ == '__main__': 
    app = QtGui.QApplication([]) 
    window = Dialog() 
    window.resize(300, 50) 
window.show() 
app.exec_() 
関連する問題