Created
November 25, 2017 05:30
-
-
Save eyllanesc/283c9bf900e029510b47f991422ffb3a to your computer and use it in GitHub Desktop.
Ejemplo para la pregunta https://es.stackoverflow.com/questions/120117/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
import time | |
from PyQt5.QtCore import * | |
from PyQt5.QtGui import * | |
from PyQt5.QtWidgets import * | |
class Delegado(QAbstractItemDelegate): | |
def __init__(self): | |
super(Delegado, self).__init__() | |
def paint(self, painter, option, index): | |
estilo = "QProgressBar#barraDelegado{border: 0px solidgrey; border-radius: 5px; text-align: center; color: grey; font-weight: bold;} " | |
estilo += "QProgressBar#barraDelegado::chunk {background-color: #CD96CD;}" | |
#f = open("../css/estilos.css") | |
barra = QProgressBar() | |
barra.setObjectName("barraDelegado") | |
value = index.data() | |
barra.resize(option.rect.size()) | |
barra.setMinimum(0) | |
barra.setMaximum(100) | |
barra.setAlignment(Qt.AlignCenter) | |
print(value) | |
barra.setValue(int(value)) | |
if barra.value() < 51: | |
barra.setStyleSheet(estilo) | |
elif barra.value() > 50 and barra.value() < 100: | |
barra.setStyleSheet("QProgressBar#barraDelegado{font-weight: bold; border: 0px solidgrey; border-radius: 5px; text-align: center; color: white} QProgressBar#barraDelegado::chunk {background-color: orange; color:red;}") | |
elif barra.value() > 99: | |
barra.setStyleSheet("QProgressBar#barraDelegado{font-weight: bold; border: 0px solidgrey; border-radius: 5px; text-align: center; color: white} QProgressBar#barraDelegado::chunk {background-color: lightgreen; color:red;}") | |
painter.save() | |
painter.translate(option.rect.topLeft()) | |
barra.render(painter) | |
painter.restore() | |
#f.close() | |
def createEditor(self, parent, option, index): | |
self.slider = QSlider(parent) | |
self.slider.setAutoFillBackground(True) | |
self.slider.setOrientation(Qt.Horizontal) | |
# slider.installEventFilter(self) | |
self.slider.setRange(0, 100) | |
#print("return slider") | |
self.slider.valueChanged.connect(self.imprime) | |
return self.slider | |
def updateEditorGeometry(self, editor, option, index): | |
editor.setGeometry(option.rect) | |
print("update geometry") | |
def setEditorData(self, editor, index): | |
#print("editor data") | |
#value = index.model().data(index, Qt.DisplayRole) | |
editor.setValue(int(index.data())) | |
def setModelData(self, widget, model, index): | |
print("columna: {0} Fila: {1}".format(index.column(), index.row())) | |
model.setData(model.index(index.row(), 1), str(widget.value()), Qt.DisplayRole) | |
value = widget.value() | |
widget.setToolTip(str(value)) | |
print(widget.value()) | |
#self.modelo.setData(self.modelo.index(0, 1), str(progress), Qt.DisplayRole) | |
def imprime(self, valor): | |
self.slider.setToolTip(str(valor)) | |
print(valor) | |
def sizeHint(self, option, index): | |
return QSize(200, 20) | |
class Hilo(QThread): | |
def __init__(self, modelo, *args, **kwargs): | |
QThread.__init__(self, *args, **kwargs) | |
self.modelo = modelo | |
def __del__(self): | |
print("Fruncion __del__") | |
self.wait() | |
def run(self): | |
for i in range(0, 100): | |
time.sleep(0.3) # artificial time delay | |
import random | |
row = random.randint(0, self.modelo.rowCount()-1) | |
ix = self.modelo.index(row, 1) | |
QMetaObject.invokeMethod(self.modelo, | |
"setData", Qt.QueuedConnection, | |
Q_ARG(QModelIndex, ix), | |
Q_ARG(QVariant, str(i))) | |
print("ejemplo {0}".format(i)) | |
class Window(QWidget): | |
def __init__(self, *args, **kwargs): | |
QWidget.__init__(self, *args, **kwargs) | |
self.setLayout(QVBoxLayout()) | |
obj = QTableView(self) | |
model = QStandardItemModel() | |
model.setColumnCount(3) | |
items = [("0", "0", "4") , ("0", "0", "2"), ("0", "0", "2")] | |
for item in items: | |
it = [QStandardItem(i) for i in item] | |
model.appendRow(it) | |
obj.setModel(model) | |
obj.setItemDelegateForColumn(1, Delegado()) | |
self.layout().addWidget(obj) | |
hilo = Hilo(model, self) | |
hilo.start() | |
def main(): | |
app = QApplication(sys.argv) | |
w = Window() | |
w.show() | |
sys.exit(app.exec_()) | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment