Skip to content

Instantly share code, notes, and snippets.

@eyllanesc
Created November 25, 2017 05:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eyllanesc/283c9bf900e029510b47f991422ffb3a to your computer and use it in GitHub Desktop.
Save eyllanesc/283c9bf900e029510b47f991422ffb3a to your computer and use it in GitHub Desktop.
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