Diferència entre revisions de la pàgina «PyQt4: utilitzant Qt Designer 2: diàlegs i ListWidget»
Línia 21: | Línia 21: | ||
== Diàleg (class EntraDades) == | == Diàleg (class EntraDades) == | ||
+ | Un diàleg és un "subformulari" secundari que ens pregunta algunes dades i es tanca de seguida que les hem omplert. No cal, doncs, que estigui actiu sempre, només quan es requereix la seva funcionalitat concreta. | ||
+ | |||
+ | Per lo senzilla que és l'aplicació podríem utilitzar un Diàleg estàndard, en particular un '''QInputDialog''' (una simple línia de text). Podem veure alguns exemples aquí: | ||
* http://zetcode.com/tutorials/pyqt4/dialogs/ | * http://zetcode.com/tutorials/pyqt4/dialogs/ | ||
− | ... | + | De totes maneres, per exercitar-nos podem fer '''el nostre propi diàleg amb el Qt-Designer'''. L'avantatge és que si volem podem ampliar els paràmetres que se li demanen a l'usuari: |
+ | |||
+ | [[Fitxer:qtlist-dialeg.png|300px]] | ||
+ | |||
+ | Per crear-lo, tingueu en compte: | ||
+ | * Crear un "Dialog with buttons" | ||
+ | * Afegir el camp de text (QTextEdit o QLineEdit). | ||
+ | * Canviar el nom del camp de text per "text" (si volem que ens funcioni el codi de després). | ||
+ | |||
<br> | <br> | ||
Revisió del 13:23, 12 feb 2013
Contingut
Intro
Requisit: realitzar anterior article PyQt4: utilitzant Qt Designer.
Tenir en compte l'arquitectura Model-Vista (Model-View): http://doc.qt.digia.com/stable/model-view-programming.html
...TODO...
Main Window (class Pantalla)
Amb Qt-Designer crea la següent MainWindow:
ListWidget
El Widget principal que apareix és un QListWidget, que és el que volem aprendre. Pots llegir aquí algunes pistes de com fer-ho:
De fet, és molt similar a utilitzar una llista de Python.
Diàleg (class EntraDades)
Un diàleg és un "subformulari" secundari que ens pregunta algunes dades i es tanca de seguida que les hem omplert. No cal, doncs, que estigui actiu sempre, només quan es requereix la seva funcionalitat concreta.
Per lo senzilla que és l'aplicació podríem utilitzar un Diàleg estàndard, en particular un QInputDialog (una simple línia de text). Podem veure alguns exemples aquí:
De totes maneres, per exercitar-nos podem fer el nostre propi diàleg amb el Qt-Designer. L'avantatge és que si volem podem ampliar els paràmetres que se li demanen a l'usuari:
Per crear-lo, tingueu en compte:
- Crear un "Dialog with buttons"
- Afegir el camp de text (QTextEdit o QLineEdit).
- Canviar el nom del camp de text per "text" (si volem que ens funcioni el codi de després).
Aplicació: classes derivades i run.py
El codi:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from PyQt4 import *
from main import *
from EntraDades import *
import sys
# http://www.diotavelli.net/PyQtWiki/Adding%20items%20to%20a%20list%20widget
# http://zetcode.com/tutorials/pyqt4/dialogs/
app = 0
class EntraDades(QtGui.QDialog,Ui_EntraDades):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self,parent)
self.setupUi(self)
class Pantalla(QtGui.QMainWindow,Ui_Principal):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self,parent)
self.setupUi(self)
# llista
self.dades = list()
# primer element d'exemple
self.dades.append("hola que tal")
self.regeneraView()
def esborraView(self):
# OJU! no es pot fer amb un for
item = self.llista.takeItem( 0 )
while item:
del item
item = self.llista.takeItem( 0 )
def regeneraView(self):
self.esborraView()
for missatge in self.dades:
item = QtGui.QListWidgetItem( missatge )
self.llista.addItem( item )
# SLOTS
def afegir(self):
# exemple custom dialog
dialeg = EntraDades(self)
ok = dialeg.exec_()
text = dialeg.text.toPlainText()
# EXEMPLE QINPUTDIALOG
#text, ok = QtGui.QInputDialog.getText( self, "Diàleg d'entrada", "Entra dades:" )
# processem
if ok:
self.dades.append( text )
#self.llista.addItem( text )
self.regeneraView()
def eliminar(self):
# cal esborrar de la view:
row = self.llista.currentRow()
item = self.llista.takeItem( row )
del item
# ...i del model
del self.dades[ row ]
def edita(self):
item = self.llista.currentItem()
if item:
self.llista.editItem( item )
def guardar(self):
print "guardar"
def carregar(self):
print "carregar"
def sortir(self):
print "sortint..."
global app
app.quit()
if __name__ == "__main__":
global app
app = QtGui.QApplication(sys.argv)
p = Pantalla()
p.show()
sys.exit(app.exec_())