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 @@ + + + + + + + + - 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)