【问题标题】:Change QLabel text dynamically in PyQt4在 PyQt4 中动态更改 QLabel 文本
【发布时间】:2013-11-14 18:38:16
【问题描述】:

我的问题是:如何更改标签中的文本?标签在布局内,但 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' -------------------- ------> 解决

现在,我遇到了开始这一切的同样问题,标签不会改变它的内容。

【问题讨论】:

    标签: python text pyqt qlabel pyuic


    【解决方案1】:

    您没有正确使用 pyuic 创建的模块。您应该从不直接编辑这些模块 - 它们应该导入到您的主应用程序中。

    pyuic 生成的 UI 类有一个setupUi 方法。此方法采用您在 Qt 设计器中创建的顶级类的实例,并将设计器中的所有小部件添加到该实例。例如,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 "你应该永远直接编辑这些模块 - 它们应该被导入你的主应用程序。"
    【解决方案2】:

    替换logica_tablero中的这一行:

    self.ui.self.label_nombre.setText("hola")
    

    用这个:

    self.ui.label_nombre.setText("hola")
    

    【讨论】:

    • 谢谢,但它不起作用,标签没有改变,标签在布局内是一个障碍吗?
    • 非常感谢,我会照你说的做,然后回来。
    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 2013-05-21
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    相关资源
    最近更新 更多