mirror of
https://github.com/LC044/WeChatMsg
synced 2025-02-22 10:52:18 +08:00
修改部分UI
This commit is contained in:
parent
e870aa4c29
commit
bb267c348e
@ -4,13 +4,19 @@
|
||||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<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$/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/contactUi.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/Ui/contact/contactUi.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/decrypt/decrypt.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/Ui/decrypt/decrypt.py" 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" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
@ -74,7 +80,7 @@
|
||||
<recent name="D:\Project\PythonProject\WeChatMsg\app\Ui" />
|
||||
</key>
|
||||
</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">
|
||||
<module name="WeChatMsg" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
@ -96,6 +102,27 @@
|
||||
<option name="INPUT_FILE" value="" />
|
||||
<method v="2" />
|
||||
</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">
|
||||
<module name="WeChatMsg" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
@ -159,34 +186,13 @@
|
||||
<option name="INPUT_FILE" value="" />
|
||||
<method v="2" />
|
||||
</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>
|
||||
<list>
|
||||
<item itemvalue="Python.main" />
|
||||
<item itemvalue="Python.decrypt" />
|
||||
<item itemvalue="Python.output" />
|
||||
<item itemvalue="Python.report" />
|
||||
<item itemvalue="Python.data (1)" />
|
||||
<item itemvalue="Python.test" />
|
||||
</list>
|
||||
</recent_temporary>
|
||||
</component>
|
||||
@ -419,7 +425,21 @@
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1698248457797</updated>
|
||||
</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 />
|
||||
</component>
|
||||
<component name="UnknownFeatures">
|
||||
@ -471,7 +491,9 @@
|
||||
<MESSAGE value="match语法说明" />
|
||||
<MESSAGE value="update readme" />
|
||||
<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="REFORMAT_BEFORE_PROJECT_COMMIT" value="true" />
|
||||
</component>
|
||||
@ -480,12 +502,12 @@
|
||||
<breakpoints>
|
||||
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
||||
<url>file://$PROJECT_DIR$/app/DataBase/output.py</url>
|
||||
<line>41</line>
|
||||
<line>42</line>
|
||||
<option name="timeStamp" value="3" />
|
||||
</line-breakpoint>
|
||||
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
||||
<url>file://$PROJECT_DIR$/app/DataBase/output.py</url>
|
||||
<line>410</line>
|
||||
<line>412</line>
|
||||
<option name="timeStamp" value="7" />
|
||||
</line-breakpoint>
|
||||
</breakpoints>
|
||||
|
@ -89,17 +89,47 @@ class Me:
|
||||
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):
|
||||
if not key:
|
||||
print('缺少数据库密钥')
|
||||
return False
|
||||
if not db:
|
||||
print('没有数据库文件')
|
||||
return False
|
||||
if os.path.exists('./app/DataBase/Msg.db'):
|
||||
print('/app/DataBase/Msg.db 已经存在')
|
||||
return True
|
||||
cmd = './sqlcipher-3.0.1/bin/sqlcipher-shell32.exe'
|
||||
print(os.path.abspath('.'))
|
||||
param = f"""
|
||||
PRAGMA key = '{key}';
|
||||
PRAGMA cipher_migrate;
|
||||
@ -107,7 +137,6 @@ def decrypt(db, key):
|
||||
SELECT sqlcipher_export('Msg');
|
||||
DETACH DATABASE Msg;
|
||||
"""
|
||||
|
||||
with open('./app/data/config.txt', 'w') as f:
|
||||
f.write(param)
|
||||
p = os.system(f"{os.path.abspath('.')}{cmd} {db} < ./app/data/config.txt")
|
||||
|
6
app/Ui/ICON.py
Normal file
6
app/Ui/ICON.py
Normal 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')
|
100
app/Ui/MyComponents/Contact.py
Normal file
100
app/Ui/MyComponents/Contact.py
Normal 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)
|
1
app/Ui/MyComponents/__init__.py
Normal file
1
app/Ui/MyComponents/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
from . import Contact
|
@ -7,10 +7,12 @@
|
||||
@Version : Python3.10
|
||||
@comment : ···
|
||||
"""
|
||||
from . import mainview
|
||||
# 文件__init__.py
|
||||
# from login import login
|
||||
from . import mainwindow
|
||||
from . import mainview
|
||||
from .ICON import Icon
|
||||
from .MyComponents import *
|
||||
from .decrypt import decrypt
|
||||
|
||||
# __all__ = ["decrypt", 'mainview']
|
||||
__all__ = ["decrypt", 'mainview', 'Contact', 'Icon']
|
||||
|
@ -43,7 +43,7 @@ class ContactController(QWidget, Ui_Dialog):
|
||||
self.ta_avatar = None
|
||||
self.setupUi(self)
|
||||
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.initui()
|
||||
self.Me = Me
|
||||
@ -199,11 +199,9 @@ class ContactController(QWidget, Ui_Dialog):
|
||||
reply = QMessageBox(self)
|
||||
reply.setIcon(QMessageBox.Information)
|
||||
reply.setWindowTitle('OK')
|
||||
reply.setText("导出聊天记录成功")
|
||||
reply.setText(f"导出聊天记录成功\n在.\\data\\目录下")
|
||||
reply.addButton("确认", QMessageBox.AcceptRole)
|
||||
reply.addButton("取消", QMessageBox.RejectRole)
|
||||
# reply.addButton("忽略", QMessageBox.DestructiveRole)
|
||||
print(reply)
|
||||
api = reply.exec_()
|
||||
self.userinfo.progressBar.setVisible(False)
|
||||
|
||||
|
@ -28,13 +28,12 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog):
|
||||
super(DecryptControl, self).__init__(parent)
|
||||
self.setupUi(self)
|
||||
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_xml.clicked.connect(self.get_xml)
|
||||
self.pushButton_3.clicked.connect(self.decrypt)
|
||||
self.xml_path = None
|
||||
self.db_path = None
|
||||
# self.db_exist()
|
||||
|
||||
def db_exist(self):
|
||||
if os.path.exists('./app/DataBase/Msg.db'):
|
||||
@ -74,11 +73,9 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog):
|
||||
if not self.xml_path:
|
||||
return False
|
||||
pid = self.pid(self.xml_path)
|
||||
print(pid)
|
||||
if not pid:
|
||||
return False
|
||||
key = self.key(pid)
|
||||
print(key)
|
||||
return key
|
||||
|
||||
def pid(self, xml_path):
|
||||
@ -86,25 +83,22 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog):
|
||||
# 根节点
|
||||
root = tree.getroot()
|
||||
# 标签名
|
||||
print('root_tag:', root.tag)
|
||||
for stu in root:
|
||||
if stu.attrib["name"] == '_auth_uin':
|
||||
return stu.attrib['value']
|
||||
return False
|
||||
|
||||
def key(self, uin, IMEI='1234567890ABCDEF'):
|
||||
|
||||
print(IMEI, uin)
|
||||
m = hashlib.md5()
|
||||
m.update(bytes((IMEI + uin).encode('utf-8')))
|
||||
psw = m.hexdigest()
|
||||
return psw[:7]
|
||||
|
||||
def btnEnterClicked(self):
|
||||
print("enter clicked")
|
||||
# print("enter clicked")
|
||||
# 中间可以添加处理逻辑
|
||||
self.DecryptSignal.emit('ok')
|
||||
# self.close()
|
||||
self.close()
|
||||
|
||||
def progressBar_view(self, value):
|
||||
"""
|
||||
@ -112,16 +106,17 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog):
|
||||
:param value: 进度0-100
|
||||
:return: None
|
||||
"""
|
||||
|
||||
self.progressBar.setProperty('value', value)
|
||||
if value == '100':
|
||||
QMessageBox.information(self, "解密成功", "请退出该界面",
|
||||
QMessageBox.Yes)
|
||||
self.btnExitClicked()
|
||||
data.init_database()
|
||||
|
||||
def btnExitClicked(self):
|
||||
print("Exit clicked")
|
||||
# self.close()
|
||||
# print("Exit clicked")
|
||||
self.DecryptSignal.emit('ok')
|
||||
self.close()
|
||||
|
||||
|
||||
class DecryptThread(QThread):
|
||||
|
@ -7,6 +7,7 @@
|
||||
@Version : Python3.10
|
||||
@comment : 主窗口
|
||||
"""
|
||||
import os.path
|
||||
|
||||
from PyQt5.QtCore import *
|
||||
from PyQt5.QtGui import *
|
||||
@ -14,6 +15,7 @@ from PyQt5.QtWidgets import *
|
||||
|
||||
from app.DataBase import data
|
||||
from . import mainwindow
|
||||
from .ICON import Icon
|
||||
from .chat import chat
|
||||
from .contact import contact
|
||||
|
||||
@ -26,7 +28,7 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow):
|
||||
super(MainWinController, self).__init__(parent)
|
||||
self.setupUi(self)
|
||||
self.setWindowTitle('WeChat')
|
||||
self.setWindowIcon(QIcon('./app/data/icon.png'))
|
||||
self.setWindowIcon(Icon.MainWindow)
|
||||
self.Me = data.get_myinfo()
|
||||
self.setAttribute(Qt.WA_AttributeCount)
|
||||
|
||||
@ -78,6 +80,8 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow):
|
||||
|
||||
def show_avatar(self):
|
||||
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) # 按指定路径找到图片
|
||||
self.myavatar.setPixmap(pixmap) # 在label上显示图片
|
||||
|
||||
|
0
app/config.py
Normal file
0
app/config.py
Normal file
1
app/data/icons/default_avatar.svg
Normal file
1
app/data/icons/default_avatar.svg
Normal 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
1
app/data/icons/logo.svg
Normal 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
0
app/utils/__init__.py
Normal file
16
main.py
16
main.py
@ -2,6 +2,7 @@ import sys
|
||||
|
||||
from PyQt5.QtWidgets import *
|
||||
|
||||
import app.DataBase.data as DB
|
||||
from app.Ui import *
|
||||
|
||||
|
||||
@ -15,11 +16,14 @@ class ViewController:
|
||||
登录界面
|
||||
:return:
|
||||
"""
|
||||
self.viewDecrypt = decrypt.DecryptControl() # 需要将view login设为成员变量
|
||||
self.viewDecrypt.DecryptSignal.connect(self.loadMainWinView)
|
||||
self.viewDecrypt.registerSignal.connect(self.loadRegisterView)
|
||||
self.viewDecrypt.show()
|
||||
self.viewDecrypt.db_exist()
|
||||
if DB.is_db_exist():
|
||||
self.loadMainWinView()
|
||||
else:
|
||||
self.viewDecrypt = decrypt.DecryptControl() # 需要将view login设为成员变量
|
||||
self.viewDecrypt.DecryptSignal.connect(self.loadMainWinView)
|
||||
self.viewDecrypt.registerSignal.connect(self.loadRegisterView)
|
||||
self.viewDecrypt.show()
|
||||
self.viewDecrypt.db_exist()
|
||||
|
||||
def loadRegisterView(self):
|
||||
"""
|
||||
@ -31,7 +35,7 @@ class ViewController:
|
||||
# self.viewDecrypt.DecryptSignal.connect(self.loadDecryptView)
|
||||
# self.viewDecrypt.show()
|
||||
|
||||
def loadMainWinView(self, username):
|
||||
def loadMainWinView(self, username=None):
|
||||
"""
|
||||
聊天界面
|
||||
:param username: 账号
|
||||
|
Loading…
Reference in New Issue
Block a user