2016-05-01 3 views
1

Der Code erstellt einen einzelnen Dialog mit QLineEdit und QPushButton. Wenn die Schaltfläche geklickt wird, möchte ich die QLineEdit in einen Fortschrittsbalken verwandeln, der einen Fortschritt des Prozesses anzeigen würde, der mit dem Drücken des Knopfes ausgelöst wird. Wenn der Vorgang abgeschlossen ist, sollte die QLineEdit wieder zu ihrem normalen "LineEdit" -Look zurückkehren. Wie erreiche ich das?So wird der QLineEdit-Hintergrund in eine Fortschrittsleiste umgewandelt

enter image description here

Hier ist die Photoshop-ed Idee: 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

Ich denke, dass ich die SetPalette Methode von QLineEdit verwenden würde. Ähnlich wie Sie den Hintergrund eines QLineEdit festlegen. Versuchen Sie, wie Sie Hintergründe mit z. ein Bild. –

+0

Sicher, es ist eine gute Idee! Vielen Dank! – alphanumeric

Antwort

2

In:

enter image description here

Ein Fortschrittsbalken eine dünne Linie am unteren Rand des QLineEdit sein könnte PyQt4 die QLinearGradient bekommt eine horizontale Ausrichtung. Während PySide scheint es behandelt wie es ist ein vertikaler Farbverlauf. Der Code erstellt eine QLineEdit mit seiner Hintergrundfarbe über palette.setBrush(QPalette.Base, QBrush(QLinearGradient)) festgelegt. Durch Drücken der Taste wird der Fortschrittsbalkenwert um 10% erhöht.

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

Für pyside wo der Gradient könnte horizontal sein:

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_() 
Verwandte Themen