2011-12-25 15 views
9

Sono nuovo alla programmazione Qt e GUI in generale, ma ho fatto un bel po 'di codifica nei moduli di scrittura Python e così via. Devo sviluppare semplici GUI per alcuni dei miei vecchi moduli.applica le funzioni python direttamente a Qt designer come segnali

Quello che sto cercando di fare può essere rappresentato dalla seguente semplice esempio:

def f(x, y): 
    z = x + y 
    return z 

Per questa funzione darò due formazioni modifiche per x ed y e una per z. Ora creo un pulsante 'calcola' e quando lo faccio voglio che x e y dalle line-edits eseguano la funzione f(x,y) e forniscano l'output a z.

C'è un modo per farlo direttamente in Qt Designer aggiungendo la funzione f(x,y) scritta in python?

Se no quali sono le alternative?

risposta

16

Il flusso di lavoro di base quando si scrive una gui PyQt4 è:

  1. design dell'interfaccia utente usando Qt Designer.
  2. Generare un modulo Python dal file dell'interfaccia utente utilizzando pyuic4.
  3. Creare un modulo Applicazione per la logica del programma principale.
  4. Importare la classe GUI nel modulo Applicazione.
  5. Collegare la GUI alla logica del programma.

Quindi, dato il file UI calc.ui, si potrebbe generare il modulo di interfaccia utente con:

pyuic4 -w calc.ui > calc_ui.py 

e quindi creare un qualcosa di modulo di domanda come questa:

from PyQt4 import QtGui, QtCore 
from calc_ui import CalculatorUI 

class Calculator(CalculatorUI): 
    def __init__(self): 
     CalculatorUI.__init__(self) 
     self.buttonCalc.clicked.connect(self.handleCalculate) 

    def handleCalculate(self): 
     x = int(self.lineEditX.text()) 
     y = int(self.lineEditY.text()) 
     self.lineEditZ.setText(str(x + y)) 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Calculator() 
    window.show() 
    sys.exit(app.exec_()) 

Nota che aiuta per impostare objectName per ogni widget nell'Editor proprietà di Designer in modo che possano essere facilmente identificati in seguito. In particolare, lo objectName del modulo principale diventerà il nome di classe della classe della GUI che viene importata (supponendo che venga utilizzato il flag "-w" su pyuic4).

+1

restituisce l'errore seguente: il programma di debug ha generato l'eccezione non gestito AttributeError "L'oggetto 'Calculator' non ha attributo 'buttonCalc'. Cosa è andato storto? Ho chiamato l'oggetto button come buttonCalc in Qt Designer – linuS

+1

Assicurati di eseguire nuovamente 'pyuic4' ogni volta che salvi le modifiche al tuo file ui Se questo non lo risolve, prova [questo file ui] (http://pastebin.com/Ciu8p4ry) come un esempio che funziona con lo script nella mia risposta. – ekhumoro

+0

di nuovo lo stesso problema Dal modo in cui sto usando Eric IDE – linuS