From 38080499cd537372c3e1631231c4062573090d51 Mon Sep 17 00:00:00 2001
From: shuaikangzhou <863909694@qq.com>
Date: Thu, 16 Nov 2023 22:39:59 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=81=8A=E5=A4=A9=E8=AE=B0?=
=?UTF-8?q?=E5=BD=95=E5=AF=BC=E5=87=BAcsv=E6=A0=BC=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/workspace.xml | 53 ++++++++++---------
app/DataBase/msg.py | 40 +++++++++++++--
app/DataBase/output_pc.py | 44 ++++++++--------
app/components/bubble_message.py | 14 +----
app/data/icons/search.svg | 1 +
app/ui_pc/Icon.py | 1 +
app/ui_pc/contact/contactInfo.py | 16 +++---
app/ui_pc/contact/contactUi.py | 40 +++++++++++----
app/ui_pc/contact/contactUi.ui | 79 +++++++++++++++++++----------
app/ui_pc/contact/contact_window.py | 6 ++-
10 files changed, 189 insertions(+), 105 deletions(-)
create mode 100644 app/data/icons/search.svg
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index f9c3bb3..5aae1dd 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,9 +5,16 @@
+
+
+
+
+
+
+
+
-
@@ -125,27 +132,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -209,6 +195,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -233,10 +240,10 @@
+
-
diff --git a/app/DataBase/msg.py b/app/DataBase/msg.py
index ea8ed4a..f08acfe 100644
--- a/app/DataBase/msg.py
+++ b/app/DataBase/msg.py
@@ -3,9 +3,43 @@ import sqlite3
DB = None
cursor = None
-misc_path = "./app/Database/Msg/MSG0.db"
+msg_path = "./app/Database/Msg/MSG0.db"
# misc_path = './Msg/Misc.db'
-if os.path.exists(misc_path):
- DB = sqlite3.connect(misc_path, check_same_thread=False)
+if os.path.exists(msg_path):
+ DB = sqlite3.connect(msg_path, check_same_thread=False)
# '''创建游标'''
cursor = DB.cursor()
+
+
+def init_database():
+ global DB
+ global cursor
+ if not DB:
+ if os.path.exists(msg_path):
+ DB = sqlite3.connect(msg_path, check_same_thread=False)
+ # '''创建游标'''
+ cursor = DB.cursor()
+
+
+def get_messages(username_):
+ sql = '''
+ select localId,TalkerId,Type,SubType,IsSender,CreateTime,Status,StrContent,strftime('%Y-%m-%d %H:%M:%S',CreateTime,'unixepoch','localtime') as StrTime
+ from MSG
+ where StrTalker=?
+ order by CreateTime
+ '''
+ cursor.execute(sql, [username_])
+ result_ = cursor.fetchall()
+ return result_
+
+
+if __name__ == '__main__':
+ from pprint import pprint
+
+ msg_path = './Msg/MSG3.db'
+ init_database()
+
+ username = 'wxid_0o18ef858vnu22'
+ result = get_messages(username)
+ pprint(result)
+ pprint(len(result))
diff --git a/app/DataBase/output_pc.py b/app/DataBase/output_pc.py
index b1bffb2..34bf547 100644
--- a/app/DataBase/output_pc.py
+++ b/app/DataBase/output_pc.py
@@ -1,8 +1,10 @@
import os
-import numpy as np
import pandas as pd
-from PyQt5.QtCore import pyqtSignal
+from PyQt5.QtCore import pyqtSignal, QThread
+
+from . import msg
+from ..log import log
class Output(QThread):
@@ -17,32 +19,34 @@ class Output(QThread):
DOCX = 1
HTML = 2
- def __init__(self, ta_u, parent=None, type_=DOCX):
+ def __init__(self, contact, parent=None, type_=DOCX):
super().__init__(parent)
self.sec = 2 # 默认1000秒
- self.ta_username = ta_u
+ self.contact = contact
+ self.ta_username = contact.wxid
self.msg_id = 0
self.output_type = type_
self.total_num = 0
+ self.num = 0
@log
def to_csv(self, conRemark, path):
- origin_docx_path = f"{os.path.abspath('.')}/data/聊天记录/{conRemark}"
- filename = f"{os.path.abspath('.')}/data/聊天记录/{conRemark}/{conRemark}.csv"
- last_timestamp = 1601968667000
- columns = ["用户名", "消息内容", "发送时间", "发送状态", "消息类型", "isSend", "msgId"]
- df = pd.DataFrame()
- df["用户名"] = np.array(list(map(lambda x: x[7], messages)))
- df["消息内容"] = np.array(list(map(lambda x: x[8], messages)))
- df["发送时间"] = np.array(list(map(lambda x: time_format(x[6]), messages)))
- df["发送状态"] = np.array(list(map(lambda x: x[3], messages)))
- df["消息类型"] = np.array(list(map(lambda x: x[2], messages)))
- df["isSend"] = np.array(list(map(lambda x: x[4], messages)))
- df["msgId"] = np.array(list(map(lambda x: x[0], messages)))
- df.to_csv(filename)
- # df.to_csv('data.csv')
- print(df)
- self.progressSignal.emit(self.num)
+ origin_docx_path = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}"
+ if not os.path.exists(origin_docx_path):
+ os.mkdir(origin_docx_path)
+ filename = f"{os.path.abspath('.')}/data/聊天记录/{self.contact.remark}/{self.contact.remark}.csv"
+ # columns = ["用户名", "消息内容", "发送时间", "发送状态", "消息类型", "isSend", "msgId"]
+ columns = ['localId', 'TalkerId', 'Type', 'SubType',
+ 'IsSender', 'CreateTime', 'Status', 'StrContent',
+ 'StrTime']
+ messages = msg.get_messages(self.contact.wxid)
+ # print()
+ df = pd.DataFrame(
+ data=messages,
+ columns=columns,
+ )
+ df.to_csv(filename, encoding='utf-8')
+ self.okSignal.emit('ok')
def run(self):
if self.output_type == self.DOCX:
diff --git a/app/components/bubble_message.py b/app/components/bubble_message.py
index 36d793b..fe3b46b 100644
--- a/app/components/bubble_message.py
+++ b/app/components/bubble_message.py
@@ -1,9 +1,8 @@
-import sys
+from Lib import QtNinePatch2
from PyQt5.QtCore import Qt, QRectF
from PyQt5.QtGui import QImage, QPainter, QColor, QFont, QPixmap
-from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QHBoxLayout, QVBoxLayout, QSizePolicy
-from Lib import QtNinePatch2
+from PyQt5.QtWidgets import QLabel, QWidget, QHBoxLayout, QVBoxLayout, QSizePolicy
class Label(QLabel):
@@ -86,12 +85,3 @@ class MainWindow(QWidget):
layout.addWidget(bubble_mesage1)
# layout.setStretch(0, 1)
self.setLayout(layout)
-
-
-app = QApplication(sys.argv)
-# w = Label()
-w = MainWindow()
-w.resize(400, 200)
-w.show()
-
-sys.exit(app.exec_())
diff --git a/app/data/icons/search.svg b/app/data/icons/search.svg
new file mode 100644
index 0000000..076b141
--- /dev/null
+++ b/app/data/icons/search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/ui_pc/Icon.py b/app/ui_pc/Icon.py
index 808fae3..88a0f0e 100644
--- a/app/ui_pc/Icon.py
+++ b/app/ui_pc/Icon.py
@@ -16,3 +16,4 @@ class Icon:
Annual_Report_Icon = QIcon('./app/data/icons/annual_report.svg')
Analysis_Icon = QIcon('./app/data/icons/analysis.svg')
Emotion_Icon = QIcon('./app/data/icons/emotion.svg')
+ Search_Icon = QIcon('./app/data/icons/search.svg')
diff --git a/app/ui_pc/contact/contactInfo.py b/app/ui_pc/contact/contactInfo.py
index 9f70d27..107977c 100644
--- a/app/ui_pc/contact/contactInfo.py
+++ b/app/ui_pc/contact/contactInfo.py
@@ -2,7 +2,7 @@ from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from app import person
-from app.DataBase.output import Output
+from app.DataBase.output_pc import Output
from app.Ui.Icon import Icon
from .contactInfoUi import Ui_Form
from .userinfo import userinfo
@@ -105,13 +105,13 @@ class ContactInfo(QWidget, Ui_Form):
return
self.outputThread = Output(self.Me, self.contact.wxid)
elif self.sender() == self.toCSVAct:
- QMessageBox.warning(self,
- "别急别急",
- "马上就实现该功能"
- )
- print('开始导出csv')
- return
- self.outputThread = Output(self.Me, self.contact.wxid, type_=Output.CSV)
+ # QMessageBox.warning(self,
+ # "别急别急",
+ # "马上就实现该功能"
+ # )
+ # print('开始导出csv')
+ # return
+ self.outputThread = Output(self.contact, type_=Output.CSV)
print('导出csv')
elif self.sender() == self.toHtmlAct:
print('功能暂未实现')
diff --git a/app/ui_pc/contact/contactUi.py b/app/ui_pc/contact/contactUi.py
index aeada21..3c70aca 100644
--- a/app/ui_pc/contact/contactUi.py
+++ b/app/ui_pc/contact/contactUi.py
@@ -16,27 +16,47 @@ class Ui_Form(object):
Form.setObjectName("Form")
Form.resize(840, 752)
Form.setStyleSheet("background: rgb(240, 240, 240);")
- self.horizontalLayout = QtWidgets.QHBoxLayout(Form)
- self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
- self.horizontalLayout.setObjectName("horizontalLayout")
+ self.horizontalLayout_2 = QtWidgets.QHBoxLayout(Form)
+ self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+ self.verticalLayout_2 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_2.setSpacing(0)
+ self.verticalLayout_2.setObjectName("verticalLayout_2")
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
+ self.horizontalLayout = QtWidgets.QHBoxLayout()
+ self.horizontalLayout.setObjectName("horizontalLayout")
+ self.label = QtWidgets.QLabel(Form)
+ self.label.setText("")
+ self.label.setObjectName("label")
+ self.horizontalLayout.addWidget(self.label)
self.lineEdit = QtWidgets.QLineEdit(Form)
- self.lineEdit.setMinimumSize(QtCore.QSize(250, 30))
- self.lineEdit.setMaximumSize(QtCore.QSize(250, 16777215))
+ self.lineEdit.setMinimumSize(QtCore.QSize(200, 30))
+ self.lineEdit.setMaximumSize(QtCore.QSize(200, 16777215))
+ self.lineEdit.setStyleSheet("background:transparent;\n"
+ "border-width:0;\n"
+ "border-style:outset;\n"
+ "background-color:rgb(226,226,226);")
+ self.lineEdit.setCursorMoveStyle(QtCore.Qt.VisualMoveStyle)
self.lineEdit.setObjectName("lineEdit")
- self.verticalLayout.addWidget(self.lineEdit)
+ self.horizontalLayout.addWidget(self.lineEdit)
+ self.label_2 = QtWidgets.QLabel(Form)
+ self.label_2.setText("")
+ self.label_2.setObjectName("label_2")
+ self.horizontalLayout.addWidget(self.label_2)
+ self.verticalLayout.addLayout(self.horizontalLayout)
+ self.verticalLayout_2.addLayout(self.verticalLayout)
self.listWidget = QtWidgets.QListWidget(Form)
self.listWidget.setMinimumSize(QtCore.QSize(250, 0))
self.listWidget.setMaximumSize(QtCore.QSize(250, 16777215))
self.listWidget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.listWidget.setObjectName("listWidget")
- self.verticalLayout.addWidget(self.listWidget)
- self.horizontalLayout.addLayout(self.verticalLayout)
+ self.verticalLayout_2.addWidget(self.listWidget)
+ self.verticalLayout_2.setStretch(1, 1)
+ self.horizontalLayout_2.addLayout(self.verticalLayout_2)
self.stackedWidget = QtWidgets.QStackedWidget(Form)
self.stackedWidget.setObjectName("stackedWidget")
- self.horizontalLayout.addWidget(self.stackedWidget)
- self.horizontalLayout.setStretch(1, 1)
+ self.horizontalLayout_2.addWidget(self.stackedWidget)
+ self.horizontalLayout_2.setStretch(1, 1)
self.retranslateUi(Form)
self.stackedWidget.setCurrentIndex(-1)
diff --git a/app/ui_pc/contact/contactUi.ui b/app/ui_pc/contact/contactUi.ui
index b11ff70..116c90c 100644
--- a/app/ui_pc/contact/contactUi.ui
+++ b/app/ui_pc/contact/contactUi.ui
@@ -16,36 +16,59 @@
background: rgb(240, 240, 240);
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
+
-
-
+
+
+ 0
+
-
-
-
-
- 250
- 30
-
-
-
-
- 250
- 16777215
-
-
-
+
+
-
+
+
-
+
+
+
+
+
+
+ -
+
+
+
+ 200
+ 30
+
+
+
+
+ 200
+ 16777215
+
+
+
+ background:transparent;
+ border-width:0;
+ border-style:outset;
+ background-color:rgb(226,226,226);
+
+
+
+ Qt::VisualMoveStyle
+
+
+
+ -
+
+
+
+
+
+
+
+
+
-
diff --git a/app/ui_pc/contact/contact_window.py b/app/ui_pc/contact/contact_window.py
index 4a0ea48..1496928 100644
--- a/app/ui_pc/contact/contact_window.py
+++ b/app/ui_pc/contact/contact_window.py
@@ -1,11 +1,12 @@
from PyQt5.QtCore import QThread, pyqtSignal
-from PyQt5.QtWidgets import QWidget, QMessageBox
+from PyQt5.QtWidgets import QWidget, QMessageBox, QAction, QLineEdit
from app.DataBase import micro_msg, misc
from app.components import ContactQListWidgetItem
from app.person import ContactPC
from .contactInfo import ContactInfo
from .contactUi import Ui_Form
+from ..Icon import Icon
# 美化样式表
Stylesheet = """
@@ -55,6 +56,9 @@ class ContactWindow(QWidget, Ui_Form):
self.show_contacts()
def init_ui(self):
+ search_action = QAction(self.lineEdit)
+ search_action.setIcon(Icon.Search_Icon)
+ self.lineEdit.addAction(search_action, QLineEdit.LeadingPosition)
self.listWidget.clear()
self.listWidget.currentRowChanged.connect(self.setCurrentIndex)
self.listWidget.setCurrentRow(0)