Changement QLabel texte de façon dynamique dans PyQt4
Ma question est: comment puis-je modifier le texte dans un label? L'étiquette est à l'intérieur d'une mise en page, mais setText()
ne semble pas fonctionner - peut-être que je ne suis pas en train de faire.
Voici mon code:
c'est la Principale interface utilisateur windows, le un Qt-Designer donne:
class Ui_dashboard(QtGui.QMainWindow):
def setupUi(self, dashboard):
dashboard.setObjectName(_fromUtf8("dashboard"))
dashboard.resize(734, 703)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(_fromUtf8("../../../../Documents and Settings/cgarcia/Escritorio/metromara - imagenes - nerio/logoM.JPG")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
dashboard.setWindowIcon(icon)
dashboard.setWindowOpacity(1.0)
self.centralwidget = QtGui.QWidget(dashboard)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.frame = QtGui.QFrame(self.centralwidget)
self.frame.setGeometry(QtCore.QRect(30, 20, 261, 119))
self.frame.setFrameShape(QtGui.QFrame.Box)
self.frame.setFrameShadow(QtGui.QFrame.Plain)
self.frame.setObjectName(_fromUtf8("frame"))
self.gridLayout = QtGui.QGridLayout(self.frame)
self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
self.label_5 = QtGui.QLabel(self.frame)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_5.setFont(font)
self.label_5.setObjectName(_fromUtf8("label_5"))
self.gridLayout.addWidget(self.label_5, 4, 0, 1, 1)
self.label_4 = QtGui.QLabel(self.frame)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_4.setFont(font)
self.label_4.setObjectName(_fromUtf8("label_4"))
self.gridLayout.addWidget(self.label_4, 3, 0, 1, 1)
self.label_ci = QtGui.QLabel(self.frame)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_ci.setFont(font)
self.label_ci.setObjectName(_fromUtf8("label_ci"))
self.gridLayout.addWidget(self.label_ci, 1, 1, 1, 1)
self.label_cargo = QtGui.QLabel(self.frame)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_cargo.setFont(font)
self.label_cargo.setObjectName(_fromUtf8("label_cargo"))
self.gridLayout.addWidget(self.label_cargo, 2, 1, 1, 1)
self.label_gerencia = QtGui.QLabel(self.frame)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_gerencia.setFont(font)
self.label_gerencia.setObjectName(_fromUtf8("label_gerencia"))
self.gridLayout.addWidget(self.label_gerencia, 3, 1, 1, 1)
self.label_nombre = QtGui.QLabel(self.frame)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_nombre.setFont(font)
self.label_nombre.setObjectName(_fromUtf8("label_nombre"))
self.gridLayout.addWidget(self.label_nombre, 0, 1, 1, 1)
self.label_2 = QtGui.QLabel(self.frame)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_2.setFont(font)
self.label_2.setObjectName(_fromUtf8("label_2"))
self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
self.label = QtGui.QLabel(self.frame)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label.setFont(font)
self.label.setObjectName(_fromUtf8("label"))
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.label_3 = QtGui.QLabel(self.frame)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_3.setFont(font)
self.label_3.setObjectName(_fromUtf8("label_3"))
self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
self.label_departamento = QtGui.QLabel(self.frame)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_departamento.setFont(font)
self.label_departamento.setObjectName(_fromUtf8("label_departamento"))
self.gridLayout.addWidget(self.label_departamento, 4, 1, 1, 1)
self.treeView = QtGui.QTreeView(self.centralwidget)
self.treeView.setGeometry(QtCore.QRect(30, 160, 161, 481))
self.treeView.setFrameShape(QtGui.QFrame.Box)
self.treeView.setFrameShadow(QtGui.QFrame.Plain)
self.treeView.setObjectName(_fromUtf8("treeView"))
dashboard.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(dashboard)
self.menubar.setGeometry(QtCore.QRect(0, 0, 734, 20))
self.menubar.setObjectName(_fromUtf8("menubar"))
dashboard.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(dashboard)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
dashboard.setStatusBar(self.statusbar)
self.retranslateUi(dashboard)
QtCore.QMetaObject.connectSlotsByName(dashboard)
def retranslateUi(self, dashboard):
dashboard.setWindowTitle(_translate("dashboard", "Metro de Maracaibo.", None))
self.label_5.setText(_translate("dashboard", "DEPARTAMENTO", None))
self.label_4.setText(_translate("dashboard", "GERENCIA", None))
self.label_ci.setText(_translate("dashboard", "...", None))
self.label_cargo.setText(_translate("dashboard", "...", None))
self.label_gerencia.setText(_translate("dashboard", "...", None))
self.label_nombre.setText(_translate("dashboard", "...", None))
self.label_2.setText(_translate("dashboard", "C.I.:", None))
self.label.setText(_translate("dashboard", "NOMBRE", None))
self.label_3.setText(_translate("dashboard", "CARGO", None))
self.label_departamento.setText(_translate("dashboard", "...", None))
c'est la logique des interfaces:
class logica_login(Ui_Dialog):
def __init__(self):
QtGui.QDialog.__init__(self)
#QtGui.QMainWindow.__init__(self)
Dialog = Ui_Dialog(self)
self.setupUi(Dialog)
self.bloguin_aceptar.clicked.connect(self.validacion)
self.blogin_cancelar.clicked.connect(self.reject)
Dialog.show()
Dialog.exec_()
#PRINT DE PRUEBA
print('hola')
#METODO DE VALIDACION
#####################
def validacion(self):
#CONEXION A LA BASE DE DATOS.
#############################
db = QSqlDatabase.addDatabase("QPSQL")
db.setHostName("localhost")
db.setDatabaseName("postgres")
db.setUserName("postgres")
db.setPassword("1234")
#self.ui.label_nombre.setText(str(Ui_Dialog.le_user.text()))
#RESPUESTA EN CASO DE FALLO EN CONEXION CON LA BASE DE DATOS.
#############################################################
if not db.open():
QtGui.QMessageBox.about(self, "ERROR","LO SENTIMOS, EXPERIMENTAMOS PROBLEMAS DE CONEXION CON EL SERVIDOR.")
#CONSULTA A LA BASE DE DATOS DE LA CLAVE Y CONTRASEÑA
#####################################################
consulta = QSqlQueryModel()
consulta.setQuery("SELECT usuario, contraseña, id FROM usuarios")
lista = []
i = consulta.rowCount()
#BUCLE DE EXTRACCION Y REORDENACION DE DATOS EN LA LISTA "LISTA"
################################################################
while i >= 0:
db_user = consulta.record(i).value("usuario");
db_pass = consulta.record(i).value("contraseña");
db_id = consulta.record(i).value("id")
str_user = str(db_user)
str_pass = str(db_pass)
auth_db = (str_user, str_pass)
lista.append(auth_db)
i = (i-1)
print(lista)
user = self.le_user.text()
passw = self.le_pass.text()
for usrname, password in lista:
if ((user == usrname) and (passw == password)):
print('logueo exitoso')
QtGui.QMessageBox.about(self, "Logue Exitoso.", "ACCESO CONCEDIDO.")
self.deleteLater()
go = True
print(go)
dashboard.showMaximized()
#self.ui.label_nombre.setText(str(Ui_Dialog.le_user.text())) ### LOGICA_LOGIN NO TIENE ATRIBUTO UI
break;
elif ((user == usrname) and (passw != password)):
QtGui.QMessageBox.about(self, "ERROR","Contraseña Incorrecta.")
break;
elif ((user != usrname) and (passw == password)):
QtGui.QMessageBox.about(self, "ERROR","Nombre de usuario Incorrecto")
break;
else:
QtGui.QMessageBox.about(self, "ERROR","Nombre de usuario y Contraseña Incorrecto")
class logica_tablero(Ui_dashboard):
def __init__(self):
l_n = Ui_dashboard.label_nombre()
QtGui.QMainWindow.__init__(self)
self.ui = Ui_dashboard(self)
self.ui.setupUi(self)
#logica_tablero.ui.l_n.setText("hola")
Ui_dashboard.label_5.setText(("hola"))
def main():
app = QtGui.QApplication(sys.argv)
if 1 == 1 :
loginApp = logica_login()
loginApp.show()
else:
mainApp = Ui_dashboard()
mainApp.setupUi(dash)
dash.showMaximized()
#Ui_dashboard.label_nombre.setText(("hola"))
sys.exit(app.exec_())
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
## ESTA PARTE HA SIDO UN DOLOR DE CABEZA, NO OLVIDAR NI BORRAR.
#BUCLE DE DASHBOARD
#---------------------------------
dashboard = QtGui.QMainWindow()
mainApp = Ui_dashboard()
mainApp.setupUi(dashboard)
#BUCLE DE LOGIN
#---------------------------------
l = logica_login()
l
#---------------------------------
sys.exit(app.exec_())
Je veux changer les étiquettes une fois que l'utilisateur ouvre une session dans le programme. L'étiquette je veux changer est label_nombre
, et je veux le remplacer par le_user
, qui correspond à l'un des QLineEdits.
Mise à JOUR
J'ai fait toutes les modifications que vous m'avez dit de faire, le projet est assez bien organisé, mais maintenant j'obtiens ce résultat:
TypeError: descripteur 'init exige un sip.simplewrapper' objet, mais a reçu un "logica_login'
Mise à JOUR 2
*TypeError: descripteur 'init exige un sip.simplewrapper' objet, mais a reçu un "logica_login' -------------------------> RÉSOUDRE
Maintenant, j'ai le même problème qui a commencé tout cela face, l'étiquette l'habitude de changer son contenu.
OriginalL'auteur n3rio | 2013-11-14
Vous devez vous connecter pour publier un commentaire.
Vous n'êtes pas en utilisant les modules créés par pyuic correctement. Vous devriez jamais modifier directement ces modules - importés dans l'application principale.
Les classes de l'INTERFACE utilisateur que pyuic génère avoir un
setupUi
méthode. Cette méthode prend une instance de haut niveau de classe que vous avez créé dans Qt Designer, et il va ajouter tous les widgets de concepteur de cette instance. Donclabel_nombre
, par exemple, deviendrait un attribut de l'instance passée àsetupUi
. Habituellement, vous allez créer une sous-classe de haut-niveau de la classe, puis de passer dansself
que l'instance (voir ci-dessous).Je vous suggère de re-générer votre interface utilisateur des fichiers avec pyuic et de les enregistrer comme, disons
dialog_ui.py
etdashboard_ui.py
.La structure de votre programme serait alors quelque chose comme ceci:
OriginalL'auteur ekhumoro
Remplacer cette ligne dans
logica_tablero
::
merci beaucoup, je vais faire ce que vous dites et de revenir avec les résultats.
OriginalL'auteur Roberto Bonvallet