通过Trae向DeepSeek发问:

修改view.py程序,实现用pyQT5显示登录页面,实现用户在图形界面输入用户名和密码的需求,登录成功和失败的提醒均在窗口中以文字的方式显示。

根据DeepSeek回复,结合个人调试,并将错误提交DeepSeek,最终实现PyQt5图形界面登录功能。

以下是完整的代码实现:

#model.py
# 模型 (Model)
class UserModel:
    def __init__(self):
        # 模拟数据库中的用户表
        self.users = {
            'admin': '123456',
            'user1': 'password1',
            'user2': 'password2'
        }
    
    def authenticate(self, username, password):
        """验证用户凭据"""
        return username in self.users and self.users[username] == password

# view.py
# 
from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, 
                            QPushButton, QVBoxLayout, QMessageBox)
from PyQt5.QtCore import Qt

class LoginView(QWidget):
    def __init__(self, controller=None):
        super().__init__()
        self.controller = controller
        self.init_ui()
        
    def init_ui(self):
        self.setWindowTitle('系统登录')
        self.resize(300, 200)
        
        layout = QVBoxLayout()
        
        # 用户名输入
        self.lbl_user = QLabel('用户名:')
        self.txt_user = QLineEdit()
        layout.addWidget(self.lbl_user)
        layout.addWidget(self.txt_user)
        
        # 密码输入
        self.lbl_pass = QLabel('密码:')
        self.txt_pass = QLineEdit()
        self.txt_pass.setEchoMode(QLineEdit.Password)
        layout.addWidget(self.lbl_pass)
        layout.addWidget(self.txt_pass)
        
        # 登录按钮
        self.btn_login = QPushButton('登录')
        self.btn_login.clicked.connect(self.on_login)
        layout.addWidget(self.btn_login)
        
        # 状态显示
        self.lbl_status = QLabel()
        self.lbl_status.setAlignment(Qt.AlignCenter)
        layout.addWidget(self.lbl_status)
        
        self.setLayout(layout)
        
    def on_login(self):
        username = self.txt_user.text()
        password = self.txt_pass.text()
        if self.controller:
            self.controller.handle_login(username, password)
            
    def show_success(self, username):
        self.lbl_status.setText(f"欢迎, {username}!")
        self.lbl_status.setStyleSheet("color: green")
        
    def show_failure(self):
        self.lbl_status.setText("用户名或密码错误!")
        self.lbl_status.setStyleSheet("color: red")
        
    def show(self):
        super().show()
        self.txt_user.setFocus()

# controller.py
# 控制器 (Controller) 
class LoginController:
    def __init__(self, model, view):
        self.model = model
        self.view = view
        self.view.controller = self  # 设置view的controller引用
        
    def run(self):
        self.view.show()  # 直接调用view的show方法
        
    def handle_login(self, username, password):
        if self.model.authenticate(username, password):
            self.view.show_success(username)
        else:
            self.view.show_failure()
# main.py
# 主程序入口
import sys
from PyQt5.QtWidgets import QApplication
from model import UserModel
from view import LoginView
from controller import LoginController
def main():
    app = QApplication(sys.argv)  # 创建QApplication实例
    
    # 初始化MVC组件
    model = UserModel()
    view = LoginView()
    controller = LoginController(model, view)
    
    # 启动应用
    controller.run()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

以上代码运行正常。

通过Trae请DeepSeek帮我检查以上代码是否符合MVC框架,检查结果为:

总结 :当前mvctest2项目完全符合MVC架构设计原则,各层职责明确,耦合度低。建议继续保持这种架构方式。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐