[pyar] [PyQt] Lista con objetos de formulario

146 views
Skip to first unread message

Andrés Gattinoni

unread,
Jan 11, 2011, 6:24:58 PM1/11/11
to Python Argentina
Cómo va, gente?

Estoy empezando a jugar con PyQt luego de ver un rato de la charla de
Roberto Alsina en La Tribu (la primera).

Como para meterme en tema quise hacer una versión en python de
Tasque[0]. Para los que no lo conozcan, Tasque es una aplicación muy
sencilla para manejar listas de pendientes (to-do lists) que tiene la
virtud de estar integrado a Remember the Milk [1]. A nivel interfaz
gráfica y funcionalidad me gusta porque es muy sencilla y práctica,
pero funciona bastante mal y está hecha en C#, así que quería hacer
una versión en Python (por lo menos para aprender PyQt).

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].
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.
O me conviene usar tablas y agrear una fila para cada item?

Qué me recomiendan?

Saludos,

A

[0] http://live.gnome.org/Tasque
[1] http://www.rememberthemilk.com/
[2] http://live.gnome.org/Tasque/Screenshots
_______________________________________________
pyar mailing list py...@python.org.ar
http://listas.python.org.ar/listinfo/pyar

PyAr - Python Argentina - Sitio web: http://www.python.org.ar/

Ramiro Algozino

unread,
Jan 11, 2011, 6:44:04 PM1/11/11
to Python Argentina
2011/1/11 Andrés Gattinoni <andresg...@gmail.com>:

Hola Andrés!

Tal vez estos links te ayuden:

http://lateral.netmanagers.com.ar/stories/BBS47.html
http://nomuerde.netmanagers.com.ar/6.html

Disculpa que no pueda ser de mucha mayor ayuda.. :(

Éxtos con eso! seguro te va a encantar PyQt!

--
Ramiro Algozino

Diego Sarmentero

unread,
Jan 11, 2011, 7:03:41 PM1/11/11
to Python Argentina
Y quizás lo podes hacer con una tabla, pero me parece que la mejor
manera seria usando Model/View, el cual es un recurso muy copado de
Qt!

http://doc.qt.nokia.com/4.7-snapshot/model-view-programming.html

Puede ser un poco largo para leer por ahí, pero no tiene desperdicio.

2011/1/11 Andrés Gattinoni <andresg...@gmail.com>:

--
Diego Sarmentero

Blog: http://diegosarmentero.com.ar
Twitter: http://twitter.com/diegosarmentero

Roberto Alsina

unread,
Jan 11, 2011, 7:21:21 PM1/11/11
to py...@python.org.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

Roberto Alsina

unread,
Jan 11, 2011, 7:34:26 PM1/11/11
to py...@python.org.ar
On 1/11/2011 9:21 PM, Roberto Alsina wrote:
> 2) Podes usar QItemDelegate, pero eso te obliga a usar QTreeView y
> modelos.

Aunque parece que es posible usar QItemDelegate con QTreeWidget usando
setItemDelegate y amigos con QTreeWidget ( siempre se aprende algo nuevo :-)

Andrés Gattinoni

unread,
Jan 11, 2011, 8:01:54 PM1/11/11
to Python Argentina
2011/1/11 Roberto Alsina <ral...@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)?

Reply all
Reply to author
Forward
0 new messages