[pyar] [PyQt] Lista con objetos de formulario

Andrés Gattinoni andresgattinoni en gmail.com
Mar Ene 11 22:01:54 ART 2011


2011/1/11 Roberto Alsina <ralsina en netmanagers.com.ar>:
> On 1/11/2011 8:24 PM, Andrés Gattinoni wrote:
>>
>> El problema que tengo es que no sé qué widgets me convendría usar para
>> generar el listado de pendientes. Me gustaría que fuera como el de
>> Tasque [2].
>
> Es probable que termines cayendo en un QTreeView, que te va a llevar a
> definir modelos y esas cosas.
> Si es posible, yo trataria de lograrlo con un QTreeWidget.
>
>> Inicialmente lo creé con un QListWidget, pero así no sé cómo podría
>> hacer para que cuando hacés click, por ejemplo, en la fecha, te
>> convierta el campo en un ComboBox que te permita elegir la que querés.
>> Tampoco sabría cómo agregar el checkbox para marcar la tarea como
>> realizada.
>
> Con QListWidget, podes agregar el checkbox usando QListWidgetItem.checkState
> y setFlags() y aledaños. En Un QTreeWidget, usando los métodos de
> QTreeWidgetItem.
>
> En cuanto a usar un ComboBox para editarlo:
>
> 1) Podes simplemente pescar cuando el usuario hace el click y mostrar el
> combo
> 2) Podes usar QItemDelegate, pero eso te obliga a usar QTreeView y modelos.
>>
>> O me conviene usar tablas y agrear una fila para cada item?
>
> Yo normalmente hago las "tablas" de este tipo usando QTreeView/QTreeWidget
>

Gracias. Estuve mirando un poco los posts de Roberto de PyQt by
Example y me sirvieron bastante.
Creo que yendo por ese camino puedo lograr lo que quiero de forma
bastante sencilla.
Lo de modelos y vistas también lo voy a mirar, pero quizás deje su
implementación para más adelante.

Una cosa que me encontré probando QTreeWidget siguiendo el ejemplo de Roberto.
En el ejemplo se agregan items así:

item=QtGui.QTreeWidgetItem([task.text,str(task.date),tags])

Lo probé y me tiraba una excepción diciendo que estaba mal el tipo de
dato, que esperaba un QStringList. Supongo que tiene que ver con la
versión de PyQt (el ejemplo de Roberto, según dice, está pensado para
PyQt 4.4 y yo tengo PyQt 4.7.4).

Me terminó funcionando haciendo esto:

data = QtCore.QStringList()
data.append(task.description)
data.append("")
item = QtGui.QTreeWidgetItem(data)

Hay forma de hacerlo más lindo (léase, en menos de 4 líneas)?



More information about the pyar mailing list