2012-08-29 17 views
5

Ho creato per il mio plugin una GUI di inizio con 3 pulsanti. Funziona molto bene e se clicco su uno dei pulsanti viene avviata un'azione specifica. Finora funziona. Se clicco su uno dei pulsanti una nuova GUI con due pulsanti "ok" e "annulla" e appare un lineit. Se spingo su Annulla la GUI sarà chiusa, se premo su OK, voglio che il programma legga il testo dalla editline e lo memorizzi in una variabile. Questo non funziona finora.Come leggere il testo da QLineEdit in python?

Qui è la classe che contiene la finestra di dialogo:

from PyQt4.QtCore import pyqtSlot 
from PyQt4.QtGui import QDialog, QLineEdit 

from ui_grz import Ui_Dialog 

class grzDialog(QDialog): 

    def __init__(self): 
     QDialog.__init__(self) 
     # Set up the user interface from Designer. 
     self.ui = Ui_Dialog() 
     self.ui.setupUi(self) 

Questa è la classe che contiene degli la struttura della GUI dopo aver creato la GUI con Qt Designer e il comando pyuic4:

from PyQt4 import QtCore, QtGui 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    _fromUtf8 = lambda s: s 

class Ui_Dialog(object): 
    def setupUi(self, Dialog): 
     Dialog.setObjectName(_fromUtf8("Dialog")) 
     Dialog.resize(387, 153) 
     self.buttonBox = QtGui.QDialogButtonBox(Dialog) 
     self.buttonBox.setGeometry(QtCore.QRect(30, 110, 341, 32)) 
     self.buttonBox.setOrientation(QtCore.Qt.Horizontal) 
     self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) 
     self.buttonBox.setObjectName(_fromUtf8("buttonBox")) 
     self.label = QtGui.QLabel(Dialog) 
     self.label.setGeometry(QtCore.QRect(10, 10, 361, 51)) 
     self.label.setObjectName(_fromUtf8("label")) 
     self.lineEdit = QtGui.QLineEdit(Dialog) 
     self.lineEdit.setGeometry(QtCore.QRect(10, 60, 351, 31)) 
     self.lineEdit.setObjectName(_fromUtf8("lineEdit")) 

     self.retranslateUi(Dialog) 
     QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), Dialog.accept) 
     QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), Dialog.reject) 
     QtCore.QMetaObject.connectSlotsByName(Dialog) 

    def retranslateUi(self, Dialog): 
     Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "GRZ Analyse", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label.setText(QtGui.QApplication.translate("Dialog", "<html><head/><body><p><span style=\" font-weight:600;\">Bitte geben Sie hier den Schwellenwert für die GRZ-Analyse ein:</span></p><p>Bitte achten Sie auf eine korrekte Schreibweise (bspw. 2.5):</p></body></html>", None, QtGui.QApplication.UnicodeUTF8)) 

E in questa classe ho bisogno della variabile:

# Import the PyQt and QGIS libraries 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from qgis.core import * 

# Import the code for the dialog 
from ubgrzdialog import grzDialog 

class quickAnalysis: 

    def __init__(self, iface): 
     # Save reference to the QGIS interface 
     self.iface = iface 

    def grzAnalysis(self): 

     dlg = grzDialog() 
     dlg.show() 
     result = dlg.exec_() 
     if result == 1: 

      text = dlg.text() 
      QMessageBox.information(self.iface.mainWindow(),"test", "%s" %(text), QMessageBox.Ok) 

Questa è solo una breve parte di la classe, ma questa è la parte in cui ho la domanda su come leggere il testo dal widget LineEdit.

Avete idee o suggerimenti?

Grazie e scusa se si tratta di un doppio post, ma non ho trovato una risposta appropriata per il mio problema.

risposta

8

Come indicato nello documentation, il testo di uno QLineEdit può essere recuperato con il suo metodo text.

text = dlg.ui.lineEdit.text() 

Si noti che si tratta di un QString, non una stringa regolare, ma che non dovrebbe essere un problema in quanto si formatta con il vostro "%s" % text.

+0

Questo funziona. Grazie! – Sven