PyQt4: utilitzant Qt Designer 2: diàlegs i ListWidget

De Cacauet Wiki
Revisió de 11:44, 7 feb 2013; Enric (Discussió | contribucions)

(dif) ←Versió més antiga | Versió actual (dif) | Versió més nova→ (dif)
Dreceres ràpides: navegació, cerca

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

...TODO...

Diàleg

...TODO...

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_())