From 6ca36b61b1900bc7df45aa25d4ec5614431f14f9 Mon Sep 17 00:00:00 2001 From: shuaikangzhou <863909694@qq.com> Date: Sat, 18 Nov 2023 14:41:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E7=89=88=E6=9C=AC=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 27 ++++++++++-------- app/components/bubble_message.py | 44 ++++++++++++++++++++++++----- app/config.py | 7 ++++- app/ui_pc/chat/chat_info.py | 38 ++++++++++++++++--------- app/ui_pc/chat/chat_window.py | 2 +- app/ui_pc/contact/contact_window.py | 2 +- app/ui_pc/mainview.py | 7 +++-- 7 files changed, 89 insertions(+), 38 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 8323c16..d059fc9 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,11 +4,14 @@ - @@ -678,7 +680,8 @@ - diff --git a/app/components/bubble_message.py b/app/components/bubble_message.py index 517f600..5396abd 100644 --- a/app/components/bubble_message.py +++ b/app/components/bubble_message.py @@ -1,6 +1,6 @@ from PIL import Image from PyQt5 import QtGui -from PyQt5.QtCore import QSize, pyqtSignal, Qt, QThread +from PyQt5.QtCore import QSize, pyqtSignal, Qt, QThread, QTimer from PyQt5.QtGui import QPainter, QFont, QColor, QPixmap, QPolygon from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QHBoxLayout, QSizePolicy, QVBoxLayout, QSpacerItem, \ QScrollArea, QScrollBar @@ -265,9 +265,12 @@ class ChatWidget(QWidget): self.layout0.addWidget(bubble_message) else: self.layout0.insertWidget(0, bubble_message) + # self.set_scroll_bar_last() def set_scroll_bar_last(self): - self.scrollArea.verticalScrollBar().setValue(self.scrollArea.widget().height()) + self.scrollArea.verticalScrollBar().setValue( + self.scrollArea.verticalScrollBar().maximum() + ) def set_scroll_bar_value(self, val): self.verticalScrollBar().setValue(val) @@ -275,34 +278,61 @@ class ChatWidget(QWidget): def verticalScrollBar(self): return self.scrollArea.verticalScrollBar() + def update(self) -> None: + super().update() + self.scrollAreaWidgetContents.adjustSize() + self.scrollArea.update() + # self.scrollArea.repaint() + # self.verticalScrollBar().setMaximum(self.scrollAreaWidgetContents.height()) + class Test(QWidget): def __init__(self): super().__init__() layout = QVBoxLayout() self.resize(500, 600) - w1 = ChatWidget() + self.w1 = ChatWidget() bm1 = BubbleMessage( '你好啊噜啦噜啦嘞绿噜啦噜啦嘞绿绿噜啦噜啦嘞绿绿绿噜啦噜啦嘞绿绿绿绿', "D:\Project\Python\PyQt-master\QLabel\Data\\fg1.png", Type=1, ) - w1.add_message_item(bm1) + self.w1.add_message_item(bm1) + self.w1.verticalScrollBar().valueChanged.connect(self.value) for i in range(10): txt = '''在工具中单击边缘可以添加黑点,单击可以删掉黑点,拖动可以调整黑点长度。勾选等选项可以查看内容、缩放等区域右侧可预览不同拉伸情况下的效果,拖动可以调整预览的拉伸比例''' avatar = '../data/icons/default_avatar.svg' bubble_message = BubbleMessage(txt, avatar, Type=1, is_send=False) - print(bubble_message.height(), '高度') - w1.add_message_item(bubble_message, 0) + # print(bubble_message.height(), '高度') + self.w1.add_message_item(bubble_message, 0) + print('滚动条最大值', self.w1.verticalScrollBar().maximum()) w2 = QLabel("nihao") - layout.addWidget(w1) + layout.addWidget(self.w1) layout.addWidget(w2) self.setLayout(layout) + # 使用 QTimer 延迟更新滚动条 + QTimer.singleShot(0, lambda: self.w1.update()) + + print('滚动条最大值001', self.w1.verticalScrollBar().value()) + self.w1.verticalScrollBar().setValue(100) + # self.w1.update() + + def value(self, val): + print('pos:', val) + print('滚动条最大值', self.w1.verticalScrollBar().maximum()) if __name__ == '__main__': app = QApplication([]) widget = Test() + widget.w1.update() # widget = MyWidget() + widget.w1.verticalScrollBar().setValue(200) + print('滚动条最大值002', widget.w1.verticalScrollBar().maximum()) widget.show() + # QThread.sleep(2) + widget.w1.verticalScrollBar().setValue(200) + # widget.w1.verticalScrollBar().setValue(200) + # widget.w1.verticalScrollBar().setValue(200) + app.exec_() diff --git a/app/config.py b/app/config.py index 37ed164..6efe682 100644 --- a/app/config.py +++ b/app/config.py @@ -1,2 +1,7 @@ -version = '0.2.1' +version = '0.2.2' contact = '474379264' +description = [ + '1. 支持获取个人信息\n', + '2. 支持显示聊天界面\n', + '3. 支持导出scv格式的聊天记录\n', +] diff --git a/app/ui_pc/chat/chat_info.py b/app/ui_pc/chat/chat_info.py index 5cb18b2..67a82e8 100644 --- a/app/ui_pc/chat/chat_info.py +++ b/app/ui_pc/chat/chat_info.py @@ -2,13 +2,14 @@ from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QHBoxLayout from app.DataBase import msg -from app.components.bubble_message import BubbleMessage, ChatWidget +from app.components.bubble_message import BubbleMessage, ChatWidget, Notice from app.person import MePC class ChatInfo(QWidget): def __init__(self, contact, parent=None): super().__init__(parent) + self.last_timestamp = 0 self.last_pos = 0 self.contact = contact @@ -28,17 +29,15 @@ class ChatInfo(QWidget): self.chat_window = ChatWidget() self.chat_window.scrollArea.verticalScrollBar().valueChanged.connect(self.verticalScrollBar) self.vBoxLayout.addWidget(self.chat_window) + self.setLayout(self.vBoxLayout) def show_chats(self): self.show_chat_thread = ShowChatThread(self.contact) - self.show_chat_thread.showSingal.connect(self.show_chat) + self.show_chat_thread.showSingal.connect(self.add_message) self.show_chat_thread.finishSingal.connect(self.show_finish) self.show_chat_thread.start() def show_finish(self, ok): - # self.spacerItem = QSpacerItem(10, 10, QSizePolicy.Minimum, QSizePolicy.Expanding) - # self.scroolAreaLayout.addItem(self.spacerItem) - self.setLayout(self.vBoxLayout) self.setScrollBarPos() def verticalScrollBar(self, pos): @@ -50,8 +49,12 @@ class ChatInfo(QWidget): # print(pos) if pos > 0: return + + # 记录当前滚动条最大值 self.last_pos = self.chat_window.verticalScrollBar().maximum() - print('记录当前滚动条位置:', self.last_pos) + self.update_history_messages() + + def update_history_messages(self): self.show_chat_thread.start() def setScrollBarPos(self): @@ -60,23 +63,32 @@ class ChatInfo(QWidget): :param pos: :return: """ - print('上次滚动条位置', self.last_pos) + self.chat_window.update() + self.chat_window.show() pos = self.chat_window.verticalScrollBar().maximum() - self.last_pos - - print('当前滚动条位置:', pos) self.chat_window.set_scroll_bar_value(pos) - def show_chat(self, message): + def is_5_min(self, timestamp): + if abs(timestamp - self.last_timestamp) > 300: + self.last_timestamp = timestamp + return True + return False + + def add_message(self, message): try: type_ = message[2] + str_content = message[7] + str_time = message[8] # print(type_, type(type_)) is_send = message[4] avatar = MePC().avatar if is_send else self.contact.avatar + timestamp = message[5] if type_ == 1: - str_content = message[7] - str_time = message[8] + if self.is_5_min(timestamp): + time_message = Notice(str_time) + self.chat_window.add_message_item(time_message, 0) bubble_message = BubbleMessage( - str_time + ' ' + str_content, + str_content, avatar, type_, is_send diff --git a/app/ui_pc/chat/chat_window.py b/app/ui_pc/chat/chat_window.py index 0994855..02d4db6 100644 --- a/app/ui_pc/chat/chat_window.py +++ b/app/ui_pc/chat/chat_window.py @@ -88,7 +88,7 @@ class ChatWindow(QWidget, Ui_Form): self.stackedWidget.addWidget(chat_info_window) def setCurrentIndex(self, row): - print(row) + # print(row) self.stackedWidget.setCurrentIndex(row) def stop_loading(self, a0): diff --git a/app/ui_pc/contact/contact_window.py b/app/ui_pc/contact/contact_window.py index 302c8d5..c0d7adc 100644 --- a/app/ui_pc/contact/contact_window.py +++ b/app/ui_pc/contact/contact_window.py @@ -87,7 +87,7 @@ class ContactWindow(QWidget, Ui_Form): self.stackedWidget.addWidget(contact_info_window) def setCurrentIndex(self, row): - print(row) + # print(row) self.stackedWidget.setCurrentIndex(row) diff --git a/app/ui_pc/mainview.py b/app/ui_pc/mainview.py index 88e9967..290bb47 100644 --- a/app/ui_pc/mainview.py +++ b/app/ui_pc/mainview.py @@ -157,9 +157,9 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow): def loading(self, a0): self.load_num += 1 - print('加载一个了') + # print('加载一个了') if self.load_num == 2: - print('ok了') + # print('ok了') self.label.setVisible(False) def about(self): @@ -169,7 +169,8 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow): QMessageBox.about(self, "关于", f"版本:{config.version}\n" f"QQ交流群:{config.contact}\n" - "地址:https://github.com/LC044/WeChatMsg" + "地址:https://github.com/LC044/WeChatMsg\n" + f"新特性:\n{''.join(['*' + i for i in config.description])}" ) def close(self) -> bool: