我的问题是:如何更改标签中的文字?标签位于布局中,但setText()
似乎不起作用 - 也许我做得不对。
这是我的代码:
这是主窗口GUI,Qt-Designer提供了一个:
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))
这是接口的逻辑:
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_())
我想在用户登录程序后更改标签。我要更改的标签是label_nombre
,我想将其替换为le_user
,它对应于其中一个QLineEdits。
更新
我做了你告诉我做的所有改变,项目看起来非常有条理,但现在我得到了这个输出:
TypeError:描述符' init '需要'sip.simplewrapper'对象,但收到'logica_login'
更新2
* TypeError:描述符' init '需要'sip.simplewrapper'对象,但收到'logica_login'------------------- ------>的 SOLVE
现在,我遇到同样的问题,开始这一切,标签不会改变其内容。
答案 0 :(得分:4)
您没有正确使用pyuic创建的模块。您应该从不直接编辑这些模块 - 它们应该导入到您的主应用程序中。
pyuic生成的UI类具有setupUi
方法。此方法采用您在Qt Designer中创建的顶级类的实例,并将设计器中的所有小部件添加到该实例。因此,label_nombre
将成为传递给setupUi
的实例的属性。通常,您将创建顶级类的子类,然后传入self
作为实例(见下文)。
我建议您使用pyuic重新生成您的ui文件并将其另存为,dialog_ui.py
和dashboard_ui.py
。
你的程序结构将会变成这样:
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_())
答案 1 :(得分:3)
在logica_tablero
中替换此行:
self.ui.self.label_nombre.setText("hola")
用这个:
self.ui.label_nombre.setText("hola")