Change QLabel text dynamically in PyQt4
Solution 1
You are not using the modules created by pyuic correctly. You should never directly edit these modules - they should imported into your main application.
The UI classes that pyuic generates have a setupUi
method. This method takes an instance of the top-level class that you created in Qt Designer, and it will add all the widgets from designer to that instance. So label_nombre
, for example, would become an attribute of the instance passed to setupUi
. Usually, you will create a subclass of the top-level class, and then pass in self
as the instance (see below).
I would suggest that you re-generate your ui files with pyuic and save them as, say dialog_ui.py
and dashboard_ui.py
.
The structure of your program would then become something like this:
from PyQt4 import QtCore, QtGui
from dashboard_ui import Ui_dashboard
from dialog_ui import Ui_Dialog
class logica_login(QtGui.QDialog, Ui_Dialog):
def __init__(self):
QtGui.QDialog.__init__(self)
self.setupUi(self)
self.bloguin_aceptar.clicked.connect(self.validacion)
self.blogin_cancelar.clicked.connect(self.reject)
def validacion(self):
...
class logica_tablero(QtGui.QMainWindow, Ui_dashboard):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)
self.label_nombre.setText("hola")
...
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
login = logica_login()
if login.exec_() == QtGui.QDialog.Accepted:
dashboard = logica_tablero()
dashboard.showMaximized()
sys.exit(app.exec_())
Solution 2
Replace this line in logica_tablero
:
self.ui.self.label_nombre.setText("hola")
with this:
self.ui.label_nombre.setText("hola")
n3rio
Updated on August 02, 2020Comments
-
n3rio almost 4 years
My question is: how can I change the text in a label? The label is inside a layout, but
setText()
does not seem to work - maybe I am not doing it right.Here is my code:
this is the Main windows GUI, the one Qt-Designer gives:
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))
this is the logic of the 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_())
I want to change the labels once the user logs in to the program. The label I want to change is
label_nombre
, and I want to replace it forle_user
, which corresponds to one of the QLineEdits.UPDATE
I made all the changes you told me to do, the project is looking pretty much organized, but now i am getting this output:
TypeError: descriptor 'init' requires a 'sip.simplewrapper' object but received a 'logica_login'
UPDATE 2
*TypeError: descriptor 'init' requires a 'sip.simplewrapper' object but received a 'logica_login' -------------------------> SOLVE
Now, I have the same problem that began this all deal, the label wont change its content.