m0_55863845 2021-04-24 16:36 采纳率: 50%
浏览 125

练习用python写登录界面,界面出来后输用户名或密码就会闪退,请问什么原因?

这是用qt desgner写的UI文件转py文件内容:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_denglu(object):
    def setupUi(self, denglu):
        denglu.setObjectName("denglu")
        denglu.resize(342, 251)
        self.yonghuming = QtWidgets.QLabel(denglu)
        self.yonghuming.setGeometry(QtCore.QRect(56, 72, 51, 20))
        self.yonghuming.setObjectName("yonghuming")
        self.mima = QtWidgets.QLabel(denglu)
        self.mima.setGeometry(QtCore.QRect(57, 99, 41, 20))
        self.mima.setObjectName("mima")
        self.yonghulineEdit = QtWidgets.QLineEdit(denglu)
        self.yonghulineEdit.setGeometry(QtCore.QRect(113, 72, 133, 20))
        self.yonghulineEdit.setObjectName("yonghulineEdit")
        self.mimalineEdit = QtWidgets.QLineEdit(denglu)
        self.mimalineEdit.setGeometry(QtCore.QRect(113, 98, 133, 20))
        self.mimalineEdit.setObjectName("mimalineEdit")
        self.dengluButton = QtWidgets.QPushButton(denglu)
        self.dengluButton.setGeometry(QtCore.QRect(71, 170, 75, 23))
        self.dengluButton.setObjectName("dengluButton")
        self.zhuceButton = QtWidgets.QPushButton(denglu)
        self.zhuceButton.setGeometry(QtCore.QRect(171, 170, 75, 23))
        self.zhuceButton.setObjectName("zhuceButton")

        self.retranslateUi(denglu)
        QtCore.QMetaObject.connectSlotsByName(denglu)

    def retranslateUi(self, denglu):
        _translate = QtCore.QCoreApplication.translate
        denglu.setWindowTitle(_translate("denglu", "登录界面"))
        self.yonghuming.setText(_translate("denglu", "用户名:"))
        self.mima.setText(_translate("denglu", "密码:"))
        self.dengluButton.setText(_translate("denglu", "登录"))
        self.zhuceButton.setText(_translate("denglu", "注册"))

下面是主文件代码:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QDialog, QLabel, QLineEdit, QPushButton, \
    QGridLayout, QVBoxLayout, QHBoxLayout, QMessageBox
from denglu import Ui_denglu
from 注册 import Ui_zhuce
USER_PWD = {
        'la_vie': 'password'
    }
# 定义全局变量,用作用户名和密码。

class Demo(QWidget, Ui_denglu):
    def __init__(self):
        super(Demo, self).__init__()
        self.setupUi(self)
        self.lineedit_init()
        self.pushbutton_init()
        self.signin_page = Ui_zhuce()

    def lineedit_init(self):
        # 在输入行显示浅灰色的文字
        self.yonghulineEdit.setPlaceholderText('输入账号')
        self.mimalineEdit.setPlaceholderText('输入密码')
        # 将输入的密码变成小黑点
        self.mimalineEdit.setEchoMode(QLineEdit.Password)

        self.yonghulineEdit.textChanged.connect(self.check_input_func)
        self.mimalineEdit.textChanged.connect(self.check_input_func)

    def pushbutton_init(self):
        # 登录按钮在用户名和密码未输入的情况下不可用
        self.dengluButton.setEnabled(False)
        self.dengluButton.clicked.connect(self.check_login_func)
        # self.zhuceButton.clicked.connect(self.show_signin_page_func)

    def check_login_func(self):
        # 判断密码是否正确
        if USER_PWD.get(self.yonghulineEdit.text()) == self.mimalineEdit.text():
            QMessageBox.information(self, '提示', '登录成功!')
        else:
            QMessageBox.critical(self, '错误', '用户名或密码错误')

        self.yonghulineEdit.clear()
        self.mimalineEdit.clear()

    # def show_signin_page_func(self):
        # self.signin_page.exec_()

    def check_input_func(self):
        if self.yonghulineEdit.text() and self.mimalineEdit.text():
            self.denggluButton.setEnabled(True)
        else:
            self.dengluButton.setEnabled(False)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

运行代码后显示:退出代码为 1073741845

  • 写回答

1条回答 默认 最新

  • Loading_create 2023-03-22 18:20
    关注

    下面这一段代码有问题应该是。

    
    def check_input_func(self):
            if self.yonghulineEdit.text() and self.mimalineEdit.text():
                self.denggluButton.setEnabled(True)
            else:
                self.dengluButton.setEnabled(False

    我的建议是在pushbutton的点击事件中写一个

    password = self.mimalineEdit.text()
    id = self.yonghulineEdit.text()
    

    然后在用password和id直接做判断
    如果解决了你的问题,可以的话帮我点一个采纳

    评论

报告相同问题?

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类