# PyChat **Repository Path**: SouthIO/PyChat ## Basic Information - **Project Name**: PyChat - **Description**: Python大作业,基于PyQt5和Flask的简易聊天框程序。 - **Primary Language**: Python - **License**: GPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2023-01-21 - **Last Updated**: 2025-02-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: Python, Flask, Qt ## README # PyChat 简易聊天窗 ## 说明 ​ 非计算机专业Python大作业,功能并不完善。客户端使用的PyQt5+requests,服务器端使用的Flask,因为写这个的时候mySQL还没学完,所以没上数据库,后面或许会加。PyQt5是边学边写,写界面的时候图方便,一些地方处理得不好,导致加上服务端后变成屎山了,重写又太麻烦,只能先将就了。 ## 如何运行 ### 1、安装Python环境 我的Python版本是Windows下的3.7.6 ### 2、安装第三方库 ````shell pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ ```` ### 3、启动服务端 ````shell python server_main.py ```` ### 4、启动客户端 ```` python client_main.py ```` ## 效果展示 登陆界面 image-20230121183948650 注册界面 image-20230121180938840 主界面 image-20230121181053366 聊天界面 image-20230121182029224 ## 一些方案介绍 简单说明一下一些方案的实现过程,或许可以为同样在写类似功能代码的人提供一些思路。 ### 1、无边框页面 在Qt-designer中为页面添加一个QGraphics控件,铺满页面,置于后面,自己重写一个BackGround类,重写其鼠标点击和拖动事件,在Qt-designer中将QGraphics控件提升为BackGround类,可以实现鼠标点击背景拖动页面的功能。 无边框只需要设置`self.setWindowFlags(Qt.FramelessWindowHint)`即可。 ### 2、内嵌页面 Qt-designer新建QWidget作为内嵌页面,新建QMainWindow作为主页面,在主页面里加上Layout,需要内嵌的时候把内嵌QWidget加入layout即可。 ### 3、好友列表 重写QListWidgetItem类,在这个类里面新建widget,在widget里放头像之类的。 ### 4、聊天气泡 重写QListWidgetItem类,重写这个类的paintEvent函数,绘制气泡。 ### 5、富文本框 重写QTextBrowser类,重写里面的拖放函数`canInsertFromMimeData`和粘贴函数`insertFromMimeData`可以实现类似QQ聊天输入框一样的拖动文件加入输入框的效果。 如果重写的QTextBrowser不能输入中文,可以试试对其加入`self.setAttribute(Qt.WA_InputMethodEnabled, True)`