修改部分UI

This commit is contained in:
shuaikangzhou 2023-10-29 23:15:46 +08:00
parent e870aa4c29
commit bb267c348e
14 changed files with 221 additions and 58 deletions

View File

@ -4,13 +4,19 @@
<option name="autoReloadType" value="SELECTIVE" /> <option name="autoReloadType" value="SELECTIVE" />
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="84e65474-7da9-466d-baf3-cc88dde3ffdd" name="变更" comment="增加群二维码"> <list default="true" id="84e65474-7da9-466d-baf3-cc88dde3ffdd" name="变更" comment="增加几个图标">
<change afterPath="$PROJECT_DIR$/app/Ui/ICON.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/Ui/MyComponents/Contact.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/Ui/MyComponents/__init__.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/config.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/data/icons/default_avatar.svg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/app/utils/__init__.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/DataBase/data.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/DataBase/data.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/app/DataBase/data.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/DataBase/data.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/DataBase/output.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/DataBase/output.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/app/Ui/__init__.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/Ui/__init__.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Ui/contact/contact.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/Ui/contact/contact.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/app/Ui/contact/contact.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/Ui/contact/contact.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Ui/contact/contactUi.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/Ui/contact/contactUi.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/app/Ui/decrypt/decrypt.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/Ui/decrypt/decrypt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/app/Ui/contact/contactUi.ui" beforeDir="false" afterPath="$PROJECT_DIR$/app/Ui/contact/contactUi.ui" afterDir="false" /> <change beforePath="$PROJECT_DIR$/app/Ui/mainview.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/Ui/mainview.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" /> <change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
@ -74,7 +80,7 @@
<recent name="D:\Project\PythonProject\WeChatMsg\app\Ui" /> <recent name="D:\Project\PythonProject\WeChatMsg\app\Ui" />
</key> </key>
</component> </component>
<component name="RunManager" selected="Python.output"> <component name="RunManager" selected="Python.main">
<configuration name="data (1)" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true"> <configuration name="data (1)" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="WeChatMsg" /> <module name="WeChatMsg" />
<option name="INTERPRETER_OPTIONS" value="" /> <option name="INTERPRETER_OPTIONS" value="" />
@ -96,6 +102,27 @@
<option name="INPUT_FILE" value="" /> <option name="INPUT_FILE" value="" />
<method v="2" /> <method v="2" />
</configuration> </configuration>
<configuration name="decrypt" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="WeChatMsg" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/app/Ui/decrypt" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/app/Ui/decrypt/decrypt.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="main" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true"> <configuration name="main" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="WeChatMsg" /> <module name="WeChatMsg" />
<option name="INTERPRETER_OPTIONS" value="" /> <option name="INTERPRETER_OPTIONS" value="" />
@ -159,34 +186,13 @@
<option name="INPUT_FILE" value="" /> <option name="INPUT_FILE" value="" />
<method v="2" /> <method v="2" />
</configuration> </configuration>
<configuration name="test" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="WeChatMsg" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/TEST" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/TEST/test.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<recent_temporary> <recent_temporary>
<list> <list>
<item itemvalue="Python.main" /> <item itemvalue="Python.main" />
<item itemvalue="Python.decrypt" />
<item itemvalue="Python.output" /> <item itemvalue="Python.output" />
<item itemvalue="Python.report" /> <item itemvalue="Python.report" />
<item itemvalue="Python.data (1)" /> <item itemvalue="Python.data (1)" />
<item itemvalue="Python.test" />
</list> </list>
</recent_temporary> </recent_temporary>
</component> </component>
@ -419,7 +425,21 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1698248457797</updated> <updated>1698248457797</updated>
</task> </task>
<option name="localTasksCounter" value="32" /> <task id="LOCAL-00032" summary="支持导出csv格式聊天记录">
<created>1698331547560</created>
<option name="number" value="00032" />
<option name="presentableId" value="LOCAL-00032" />
<option name="project" value="LOCAL" />
<updated>1698331547560</updated>
</task>
<task id="LOCAL-00033" summary="增加几个图标">
<created>1698331665669</created>
<option name="number" value="00033" />
<option name="presentableId" value="LOCAL-00033" />
<option name="project" value="LOCAL" />
<updated>1698331665669</updated>
</task>
<option name="localTasksCounter" value="34" />
<servers /> <servers />
</component> </component>
<component name="UnknownFeatures"> <component name="UnknownFeatures">
@ -471,7 +491,9 @@
<MESSAGE value="match语法说明" /> <MESSAGE value="match语法说明" />
<MESSAGE value="update readme" /> <MESSAGE value="update readme" />
<MESSAGE value="增加群二维码" /> <MESSAGE value="增加群二维码" />
<option name="LAST_COMMIT_MESSAGE" value="增加群二维码" /> <MESSAGE value="支持导出csv格式聊天记录" />
<MESSAGE value="增加几个图标" />
<option name="LAST_COMMIT_MESSAGE" value="增加几个图标" />
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" /> <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" />
<option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="true" /> <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="true" />
</component> </component>
@ -480,12 +502,12 @@
<breakpoints> <breakpoints>
<line-breakpoint enabled="true" suspend="THREAD" type="python-line"> <line-breakpoint enabled="true" suspend="THREAD" type="python-line">
<url>file://$PROJECT_DIR$/app/DataBase/output.py</url> <url>file://$PROJECT_DIR$/app/DataBase/output.py</url>
<line>41</line> <line>42</line>
<option name="timeStamp" value="3" /> <option name="timeStamp" value="3" />
</line-breakpoint> </line-breakpoint>
<line-breakpoint enabled="true" suspend="THREAD" type="python-line"> <line-breakpoint enabled="true" suspend="THREAD" type="python-line">
<url>file://$PROJECT_DIR$/app/DataBase/output.py</url> <url>file://$PROJECT_DIR$/app/DataBase/output.py</url>
<line>410</line> <line>412</line>
<option name="timeStamp" value="7" /> <option name="timeStamp" value="7" />
</line-breakpoint> </line-breakpoint>
</breakpoints> </breakpoints>

View File

@ -89,17 +89,47 @@ class Me:
self.province = None self.province = None
def is_db_exist() -> bool:
"""
判断数据库是否正常使用
"""
global DB
global cursor
if DB and cursor:
try:
sql = 'select * from userinfo where id=2'
cursor.execute(sql)
result = cursor.fetchone()
me = Me(result[2])
except Exception as e:
return False
return True
def init_database():
global DB
global cursor
if os.path.exists('./app/DataBase/Msg.db'):
DB = sqlite3.connect("./app/DataBase/Msg.db", check_same_thread=False)
# '''创建游标'''
cursor = DB.cursor()
if os.path.exists('./Msg.db'):
DB = sqlite3.connect("./Msg.db", check_same_thread=False)
# '''创建游标'''
cursor = DB.cursor()
def decrypt(db, key): def decrypt(db, key):
if not key: if not key:
print('缺少数据库密钥') print('缺少数据库密钥')
return False return False
if not db: if not db:
print('没有数据库文件') print('没有数据库文件')
return False
if os.path.exists('./app/DataBase/Msg.db'): if os.path.exists('./app/DataBase/Msg.db'):
print('/app/DataBase/Msg.db 已经存在') print('/app/DataBase/Msg.db 已经存在')
return True return True
cmd = './sqlcipher-3.0.1/bin/sqlcipher-shell32.exe' cmd = './sqlcipher-3.0.1/bin/sqlcipher-shell32.exe'
print(os.path.abspath('.'))
param = f""" param = f"""
PRAGMA key = '{key}'; PRAGMA key = '{key}';
PRAGMA cipher_migrate; PRAGMA cipher_migrate;
@ -107,7 +137,6 @@ def decrypt(db, key):
SELECT sqlcipher_export('Msg'); SELECT sqlcipher_export('Msg');
DETACH DATABASE Msg; DETACH DATABASE Msg;
""" """
with open('./app/data/config.txt', 'w') as f: with open('./app/data/config.txt', 'w') as f:
f.write(param) f.write(param)
p = os.system(f"{os.path.abspath('.')}{cmd} {db} < ./app/data/config.txt") p = os.system(f"{os.path.abspath('.')}{cmd} {db} < ./app/data/config.txt")

6
app/Ui/ICON.py Normal file
View File

@ -0,0 +1,6 @@
from PyQt5.QtGui import QIcon
class Icon:
MainWindow = QIcon('./app/data/icons/logo.svg')
Default_avatar = QIcon('./app/data/icons/default_avatar.svg')

View File

@ -0,0 +1,100 @@
from datetime import datetime
from PyQt5 import QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class Contact(QtWidgets.QPushButton):
"""
联系人类继承自pyqt的按钮里面封装了联系人头像等标签
"""
usernameSingal = pyqtSignal(str)
def __init__(self, Ui, id=None, contact=None):
super(Contact, self).__init__(Ui)
self.layoutWidget = QtWidgets.QWidget(Ui)
self.layoutWidget.setObjectName("layoutWidget")
self.gridLayout1 = QtWidgets.QGridLayout(self.layoutWidget)
self.gridLayout1.setSizeConstraint(QtWidgets.QLayout.SetMaximumSize)
self.gridLayout1.setContentsMargins(10, 10, 10, 10)
self.gridLayout1.setSpacing(10)
self.gridLayout1.setObjectName("gridLayout1")
self.label_time = QtWidgets.QLabel(self.layoutWidget)
font = QtGui.QFont()
font.setPointSize(8)
self.label_time.setFont(font)
self.label_time.setLayoutDirection(QtCore.Qt.RightToLeft)
self.label_time.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
self.label_time.setObjectName("label_time")
self.gridLayout1.addWidget(self.label_time, 0, 2, 1, 1)
self.label_remark = QtWidgets.QLabel(self.layoutWidget)
font = QtGui.QFont()
font.setFamily("Adobe 黑体 Std R")
font.setPointSize(10)
self.label_remark.setFont(font)
self.label_remark.setObjectName("label_remark")
self.gridLayout1.addWidget(self.label_remark, 0, 1, 1, 1)
self.label_msg = QtWidgets.QLabel(self.layoutWidget)
font = QtGui.QFont()
font.setPointSize(8)
self.label_msg.setFont(font)
self.label_msg.setObjectName("label_msg")
self.gridLayout1.addWidget(self.label_msg, 1, 1, 1, 2)
self.label_avatar = QtWidgets.QLabel(self.layoutWidget)
self.label_avatar.setMinimumSize(QtCore.QSize(60, 60))
self.label_avatar.setMaximumSize(QtCore.QSize(60, 60))
self.label_avatar.setLayoutDirection(QtCore.Qt.RightToLeft)
self.label_avatar.setAutoFillBackground(False)
self.label_avatar.setStyleSheet("background-color: #ffffff;")
self.label_avatar.setInputMethodHints(QtCore.Qt.ImhNone)
self.label_avatar.setFrameShape(QtWidgets.QFrame.NoFrame)
self.label_avatar.setFrameShadow(QtWidgets.QFrame.Plain)
self.label_avatar.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
self.label_avatar.setObjectName("label_avatar")
self.gridLayout1.addWidget(self.label_avatar, 0, 0, 2, 1)
self.gridLayout1.setColumnStretch(0, 1)
self.gridLayout1.setColumnStretch(1, 6)
self.gridLayout1.setRowStretch(0, 5)
self.gridLayout1.setRowStretch(1, 3)
self.setLayout(self.gridLayout1)
self.setStyleSheet(
"QPushButton {background-color: rgb(220,220,220);}"
"QPushButton:hover{background-color: rgb(208,208,208);}\n"
)
self.msgCount = contact[0]
self.username = contact[1]
self.conversationTime = contact[6]
self.msgType = contact[7]
self.digest = contact[8]
hasTrunc = contact[10]
attrflag = contact[11]
if hasTrunc == 0:
if attrflag == 0:
self.digest = '[动画表情]'
elif attrflag == 67108864:
try:
remark = data.get_conRemark(contact[9])
msg = self.digest.split(':')[1].strip('\n').strip()
self.digest = f'{remark}:{msg}'
except Exception as e:
pass
else:
pass
self.show_info(id)
def show_info(self, id):
self.avatar = data.get_avator(self.username)
# print(avatar)
self.conRemark = data.get_conRemark(self.username)
self.nickname, self.alias = data.get_nickname(self.username)
time = datetime.now().strftime("%m-%d %H:%M")
msg = '还没说话'
pixmap = QPixmap(self.avatar).scaled(60, 60) # 按指定路径找到图片
self.label_avatar.setPixmap(pixmap) # 在label上显示图片
self.label_remark.setText(self.conRemark)
self.label_msg.setText(self.digest)
self.label_time.setText(data.timestamp2str(self.conversationTime)[2:])
def show_msg(self):
self.usernameSingal.emit(self.username)

View File

@ -0,0 +1 @@
from . import Contact

View File

@ -7,10 +7,12 @@
@Version : Python3.10 @Version : Python3.10
@comment : ··· @comment : ···
""" """
from . import mainview
# 文件__init__.py # 文件__init__.py
# from login import login # from login import login
from . import mainwindow from . import mainwindow
from . import mainview from .ICON import Icon
from .MyComponents import *
from .decrypt import decrypt from .decrypt import decrypt
# __all__ = ["decrypt", 'mainview'] __all__ = ["decrypt", 'mainview', 'Contact', 'Icon']

View File

@ -43,7 +43,7 @@ class ContactController(QWidget, Ui_Dialog):
self.ta_avatar = None self.ta_avatar = None
self.setupUi(self) self.setupUi(self)
self.setWindowTitle('WeChat') self.setWindowTitle('WeChat')
self.setWindowIcon(QIcon('./app/data/icon.png')) self.setWindowIcon(QIcon('./app/data/icons/logo.svg'))
# self.setStyleSheet('''QWidget{background-color:rgb(255, 255, 255);}''') # self.setStyleSheet('''QWidget{background-color:rgb(255, 255, 255);}''')
self.initui() self.initui()
self.Me = Me self.Me = Me
@ -199,11 +199,9 @@ class ContactController(QWidget, Ui_Dialog):
reply = QMessageBox(self) reply = QMessageBox(self)
reply.setIcon(QMessageBox.Information) reply.setIcon(QMessageBox.Information)
reply.setWindowTitle('OK') reply.setWindowTitle('OK')
reply.setText("导出聊天记录成功") reply.setText(f"导出聊天记录成功\n在.\\data\\目录下")
reply.addButton("确认", QMessageBox.AcceptRole) reply.addButton("确认", QMessageBox.AcceptRole)
reply.addButton("取消", QMessageBox.RejectRole) reply.addButton("取消", QMessageBox.RejectRole)
# reply.addButton("忽略", QMessageBox.DestructiveRole)
print(reply)
api = reply.exec_() api = reply.exec_()
self.userinfo.progressBar.setVisible(False) self.userinfo.progressBar.setVisible(False)

View File

@ -28,13 +28,12 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog):
super(DecryptControl, self).__init__(parent) super(DecryptControl, self).__init__(parent)
self.setupUi(self) self.setupUi(self)
self.setWindowTitle('解密') self.setWindowTitle('解密')
self.setWindowIcon(QIcon('./app/data/icon.png')) self.setWindowIcon(QIcon('./app/data/icons/logo.svg'))
self.btn_db.clicked.connect(self.get_db) self.btn_db.clicked.connect(self.get_db)
self.btn_xml.clicked.connect(self.get_xml) self.btn_xml.clicked.connect(self.get_xml)
self.pushButton_3.clicked.connect(self.decrypt) self.pushButton_3.clicked.connect(self.decrypt)
self.xml_path = None self.xml_path = None
self.db_path = None self.db_path = None
# self.db_exist()
def db_exist(self): def db_exist(self):
if os.path.exists('./app/DataBase/Msg.db'): if os.path.exists('./app/DataBase/Msg.db'):
@ -74,11 +73,9 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog):
if not self.xml_path: if not self.xml_path:
return False return False
pid = self.pid(self.xml_path) pid = self.pid(self.xml_path)
print(pid)
if not pid: if not pid:
return False return False
key = self.key(pid) key = self.key(pid)
print(key)
return key return key
def pid(self, xml_path): def pid(self, xml_path):
@ -86,25 +83,22 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog):
# 根节点 # 根节点
root = tree.getroot() root = tree.getroot()
# 标签名 # 标签名
print('root_tag:', root.tag)
for stu in root: for stu in root:
if stu.attrib["name"] == '_auth_uin': if stu.attrib["name"] == '_auth_uin':
return stu.attrib['value'] return stu.attrib['value']
return False return False
def key(self, uin, IMEI='1234567890ABCDEF'): def key(self, uin, IMEI='1234567890ABCDEF'):
print(IMEI, uin)
m = hashlib.md5() m = hashlib.md5()
m.update(bytes((IMEI + uin).encode('utf-8'))) m.update(bytes((IMEI + uin).encode('utf-8')))
psw = m.hexdigest() psw = m.hexdigest()
return psw[:7] return psw[:7]
def btnEnterClicked(self): def btnEnterClicked(self):
print("enter clicked") # print("enter clicked")
# 中间可以添加处理逻辑 # 中间可以添加处理逻辑
self.DecryptSignal.emit('ok') self.DecryptSignal.emit('ok')
# self.close() self.close()
def progressBar_view(self, value): def progressBar_view(self, value):
""" """
@ -112,16 +106,17 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog):
:param value: 进度0-100 :param value: 进度0-100
:return: None :return: None
""" """
self.progressBar.setProperty('value', value) self.progressBar.setProperty('value', value)
if value == '100': if value == '100':
QMessageBox.information(self, "解密成功", "请退出该界面", QMessageBox.information(self, "解密成功", "请退出该界面",
QMessageBox.Yes) QMessageBox.Yes)
self.btnExitClicked() self.btnExitClicked()
data.init_database()
def btnExitClicked(self): def btnExitClicked(self):
print("Exit clicked") # print("Exit clicked")
# self.close() self.DecryptSignal.emit('ok')
self.close()
class DecryptThread(QThread): class DecryptThread(QThread):

View File

@ -7,6 +7,7 @@
@Version : Python3.10 @Version : Python3.10
@comment : 主窗口 @comment : 主窗口
""" """
import os.path
from PyQt5.QtCore import * from PyQt5.QtCore import *
from PyQt5.QtGui import * from PyQt5.QtGui import *
@ -14,6 +15,7 @@ from PyQt5.QtWidgets import *
from app.DataBase import data from app.DataBase import data
from . import mainwindow from . import mainwindow
from .ICON import Icon
from .chat import chat from .chat import chat
from .contact import contact from .contact import contact
@ -26,7 +28,7 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow):
super(MainWinController, self).__init__(parent) super(MainWinController, self).__init__(parent)
self.setupUi(self) self.setupUi(self)
self.setWindowTitle('WeChat') self.setWindowTitle('WeChat')
self.setWindowIcon(QIcon('./app/data/icon.png')) self.setWindowIcon(Icon.MainWindow)
self.Me = data.get_myinfo() self.Me = data.get_myinfo()
self.setAttribute(Qt.WA_AttributeCount) self.setAttribute(Qt.WA_AttributeCount)
@ -78,6 +80,8 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow):
def show_avatar(self): def show_avatar(self):
avatar = data.get_avator(self.Me.username) avatar = data.get_avator(self.Me.username)
if not os.path.exists(avatar):
avatar = './app/data/icons/default_avatar.svg'
pixmap = QPixmap(avatar).scaled(80, 80) # 按指定路径找到图片 pixmap = QPixmap(avatar).scaled(80, 80) # 按指定路径找到图片
self.myavatar.setPixmap(pixmap) # 在label上显示图片 self.myavatar.setPixmap(pixmap) # 在label上显示图片

0
app/config.py Normal file
View File

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 27 KiB

1
app/data/icons/logo.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1698592095496" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5243" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M217.9 356.5c-14.1 0-25.5 11.4-25.5 25.5s11.4 25.5 25.5 25.5 25.5-11.4 25.5-25.5-11.4-25.5-25.5-25.5zM217.4 433.7c-11.2 0-20.4 9.2-20.4 20.4v174.4c0 11.2 9.2 20.4 20.4 20.4s20.4-9.2 20.4-20.4V454.1c0-11.2-9.2-20.4-20.4-20.4z" fill="#6B400D" p-id="5244"></path><path d="M878.7 379.5v-86c0-96.3-57.5-153.7-153.7-153.7H218c-96.3 0-153.7 57.5-153.7 153.7v320.7C64.3 710.5 121.8 768 218 768h45.8v120.4L449.9 768h11.2c17.2 11.3 39 17.5 64.6 17.5h161.6l130.7 85v-85.1h33.5c66.6 0 107.9-41.3 107.9-107.9V484.8c-0.1-56.9-30.3-95.3-80.7-105.3zM417.8 484.8v192.8c0 16.2 2.5 31 7.2 44l-106.1 70.1v-74.9h-101c-67.7-0.3-102.2-34.8-102.5-102.5V293.5c0.3-67.7 34.8-102.2 102.5-102.5H725c67.7 0.3 102.2 34.8 102.5 102.5v83.3H525.7c-66.5 0.1-107.9 41.4-107.9 108z m490.4 192.7c-0.2 38.6-18.2 56.6-56.7 56.7h-87.2v40.3l-61-40.3H525.7c-38.5-0.2-56.6-18.2-56.7-56.7V484.8c0.2-38.6 18.2-56.6 56.7-56.7h325.7c38.5 0.2 56.6 18.2 56.7 56.7v192.7z" fill="#6B400D" p-id="5245"></path><path d="M851.4 428.1H525.7c-38.5 0.2-56.6 18.2-56.7 56.7v192.8c0.2 38.5 18.2 56.6 56.7 56.7h177.5l61 40.3v-40.3h87.2c38.5-0.2 56.6-18.2 56.7-56.7V484.8c-0.1-38.6-18.1-56.6-56.7-56.7zM567 627.4c-21.1 0-38.3-17.2-38.3-38.3 0-21.1 17.2-38.3 38.3-38.3 21.1 0 38.3 17.2 38.3 38.3 0 21.1-17.2 38.3-38.3 38.3z m122.2 0c-21.1 0-38.3-17.2-38.3-38.3 0-21.1 17.2-38.3 38.3-38.3 21.1 0 38.3 17.2 38.3 38.3 0 21.1-17.2 38.3-38.3 38.3z m122.3 0c-21.1 0-38.3-17.2-38.3-38.3 0-21.1 17.2-38.3 38.3-38.3 21.1 0 38.3 17.2 38.3 38.3 0 21.1-17.2 38.3-38.3 38.3z" fill="#FFD524" p-id="5246"></path><path d="M567 550.8c-21.1 0-38.3 17.2-38.3 38.3 0 21.1 17.2 38.3 38.3 38.3 21.1 0 38.3-17.2 38.3-38.3 0-21.1-17.2-38.3-38.3-38.3zM689.2 550.8c-21.1 0-38.3 17.2-38.3 38.3 0 21.1 17.2 38.3 38.3 38.3 21.1 0 38.3-17.2 38.3-38.3 0-21.1-17.2-38.3-38.3-38.3zM811.5 550.8c-21.1 0-38.3 17.2-38.3 38.3 0 21.1 17.2 38.3 38.3 38.3 21.1 0 38.3-17.2 38.3-38.3 0-21.1-17.2-38.3-38.3-38.3z" fill="#6B400D" p-id="5247"></path></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

0
app/utils/__init__.py Normal file
View File

View File

@ -2,6 +2,7 @@ import sys
from PyQt5.QtWidgets import * from PyQt5.QtWidgets import *
import app.DataBase.data as DB
from app.Ui import * from app.Ui import *
@ -15,6 +16,9 @@ class ViewController:
登录界面 登录界面
:return: :return:
""" """
if DB.is_db_exist():
self.loadMainWinView()
else:
self.viewDecrypt = decrypt.DecryptControl() # 需要将view login设为成员变量 self.viewDecrypt = decrypt.DecryptControl() # 需要将view login设为成员变量
self.viewDecrypt.DecryptSignal.connect(self.loadMainWinView) self.viewDecrypt.DecryptSignal.connect(self.loadMainWinView)
self.viewDecrypt.registerSignal.connect(self.loadRegisterView) self.viewDecrypt.registerSignal.connect(self.loadRegisterView)
@ -31,7 +35,7 @@ class ViewController:
# self.viewDecrypt.DecryptSignal.connect(self.loadDecryptView) # self.viewDecrypt.DecryptSignal.connect(self.loadDecryptView)
# self.viewDecrypt.show() # self.viewDecrypt.show()
def loadMainWinView(self, username): def loadMainWinView(self, username=None):
""" """
聊天界面 聊天界面
:param username: 账号 :param username: 账号