# 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
````
## 效果展示
登陆界面
注册界面
主界面
聊天界面
## 一些方案介绍
简单说明一下一些方案的实现过程,或许可以为同样在写类似功能代码的人提供一些思路。
### 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)`