From 6f903a7effd32eddb3e9da53b49624e24ceff185 Mon Sep 17 00:00:00 2001 From: shuaikangzhou <863909694@qq.com> Date: Wed, 5 Apr 2023 01:50:58 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AA=97=E5=8F=A3=E5=88=87=E6=8D=A2=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E7=94=A8stackedWidget?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Ui/chat/chat.py | 14 +++-- app/Ui/contact/analysis/analysis.py | 64 +++++++++++-------- app/Ui/contact/analysis/charts.py | 8 +-- app/Ui/contact/contact.py | 96 +++++++++++++++-------------- app/Ui/contact/contactUi.py | 21 +++---- app/Ui/contact/contactUi.ui | 24 ++------ app/Ui/contact/test.ui | 25 ++++++++ 7 files changed, 136 insertions(+), 116 deletions(-) create mode 100644 app/Ui/contact/test.ui diff --git a/app/Ui/chat/chat.py b/app/Ui/chat/chat.py index 7b89816..c75af8c 100644 --- a/app/Ui/chat/chat.py +++ b/app/Ui/chat/chat.py @@ -41,9 +41,11 @@ class ChatController(QWidget, Ui_Form): self.setWindowIcon(QIcon('./app/data/icon.png')) self.initui() self.Me = Me + self.Thread = ChatMsg(self.Me.username, None) self.Thread.isSend_signal.connect(self.showMsg) self.Thread.okSignal.connect(self.setScrollBarPos) + self.contacts = {} self.last_btn = None self.chat_flag = True @@ -133,7 +135,7 @@ class ChatController(QWidget, Ui_Form): "QPushButton {background-color: rgb(198,198,198);}" "QPushButton:hover{background-color: rgb(209,209,209);}\n" ) - conRemark = data.get_conRemark(talkerId) + conRemark = self.contacts[talkerId].conRemark self.label_remark.setText(conRemark) self.message.clear() self.message.append(talkerId) @@ -142,7 +144,7 @@ class ChatController(QWidget, Ui_Form): self.chatroomFlag = True else: self.chatroomFlag = False - self.ta_avatar = data.get_avator(talkerId) + self.ta_avatar = self.contacts[talkerId].avatar self.textEdit.setFocus() self.Thread.ta_u = talkerId self.Thread.msg_id = 0 @@ -532,14 +534,14 @@ class Contact(QtWidgets.QPushButton): self.show_info(id) def show_info(self, id): - avatar = data.get_avator(self.username) + self.avatar = data.get_avator(self.username) # print(avatar) - remark = data.get_conRemark(self.username) + self.conRemark = data.get_conRemark(self.username) time = datetime.datetime.now().strftime("%m-%d %H:%M") msg = '还没说话' - pixmap = QPixmap(avatar).scaled(60, 60) # 按指定路径找到图片 + pixmap = QPixmap(self.avatar).scaled(60, 60) # 按指定路径找到图片 self.label_avatar.setPixmap(pixmap) # 在label上显示图片 - self.label_remark.setText(remark) + self.label_remark.setText(self.conRemark) self.label_msg.setText(self.digest) self.label_time.setText(data.timestamp2str(self.conversationTime)[2:]) diff --git a/app/Ui/contact/analysis/analysis.py b/app/Ui/contact/analysis/analysis.py index b8c6dad..a9db83b 100644 --- a/app/Ui/contact/analysis/analysis.py +++ b/app/Ui/contact/analysis/analysis.py @@ -60,7 +60,7 @@ class AnalysisController(QWidget): self.browser2.load(QUrl('file:///data/聊天统计/wordcloud.html')) self.browser3 = QWebEngineView() self.browser3.load(QUrl('file:///data/聊天统计/time.html')) - + # self.browser3.resize(800, 600) self.browser4 = QWebEngineView() self.browser4.load(QUrl('http://www.baidu.com')) # self.browser4.resize(800, 600) @@ -76,40 +76,50 @@ class AnalysisController(QWidget): self.browser9.load(QUrl('file:///data/聊天统计/msg_type_rate.html')) self.browser10 = QWebEngineView() self.browser10.load(QUrl('file:///data/聊天统计/send_recv_rate.html')) - + self.browser10.adjustSize() + # self.browser10. main_box.addWidget(self.browser1) - scrollArea = QScrollArea(self) - scrollAreaContent = QWidget(scrollArea) + self.scrollArea = QScrollArea(self) + self.scrollArea.setEnabled(True) + self.scrollArea.adjustSize() + self.scrollArea.setWidgetResizable(False) + scrollAreaContent = QWidget(self.scrollArea) Vlayout2 = QVBoxLayout(scrollAreaContent) - splitter2 = QSplitter(Qt.Vertical) - splitter2.addWidget(self.browser2) - Vlayout2.addWidget(splitter2) + # splitter2 = QSplitter(Qt.Vertical) + # splitter2.addWidget(self.browser2) + # # splitter2.resize(800, 600) + # Vlayout2.addWidget(splitter2) + # + # splitter3 = QSplitter(Qt.Vertical) + # splitter3.addWidget(self.browser3) + # Vlayout2.addWidget(splitter3) + # + # splitter4 = QSplitter(Qt.Vertical) + # splitter4.addWidget(self.browser4) + # Vlayout2.addWidget(splitter4) + # + # splitter5 = QSplitter(Qt.Vertical) + # splitter5.addWidget(self.browser6) + # Vlayout2.addWidget(splitter5) - splitter3 = QSplitter(Qt.Vertical) - splitter3.addWidget(self.browser3) - Vlayout2.addWidget(splitter3) + # Vlayout2.addWidget(self.browser3, stretch=1) + # Vlayout2.addWidget(self.browser6, stretch=2) + # Vlayout2.addWidget(self.browser5, stretch=3) + # Vlayout2.addWidget(self.browser7, stretch=4) + # Vlayout2.addWidget(self.browser8, stretch=5) + # Vlayout2.addWidget(self.browser9, stretch=6) + Vlayout2.addWidget(self.browser10, stretch=7) - splitter4 = QSplitter(Qt.Vertical) - splitter4.addWidget(self.browser4) - Vlayout2.addWidget(splitter4) - - splitter5 = QSplitter(Qt.Vertical) - splitter5.addWidget(self.browser6) - Vlayout2.addWidget(splitter5) - - Vlayout2.addWidget(self.browser3) - Vlayout2.addWidget(self.browser6) - Vlayout2.addWidget(self.browser5) - Vlayout2.addWidget(self.browser7) - Vlayout2.addWidget(self.browser8) - Vlayout2.addWidget(self.browser9) - Vlayout2.addWidget(self.browser10) + # Vlayout2.setStretch(0, 1) + # Vlayout2.setStretch(1, 10) scrollAreaContent.setLayout(Vlayout2) - scrollArea.setWidget(scrollAreaContent) - main_box.addWidget(scrollArea) + # self.scrollArea.setWidget(scrollAreaContent) + self.scrollArea.setWidget(self.browser9) + main_box.addWidget(self.browser10) + main_box.addWidget(self.scrollArea) main_box.setStretch(0, 1) main_box.setStretch(1, 10) ''' diff --git a/app/Ui/contact/analysis/charts.py b/app/Ui/contact/analysis/charts.py index fd69571..6067c12 100644 --- a/app/Ui/contact/analysis/charts.py +++ b/app/Ui/contact/analysis/charts.py @@ -32,10 +32,10 @@ Type = { '436207665': '发红包', '49': '分享链接' } -charts_width = 700 -charts_height = 600 -wordcloud_width = 700 -wordcloud_height = 600 +charts_width = 1000 +charts_height = 500 +wordcloud_width = 1000 +wordcloud_height = 500 def send_recv_rate(username): diff --git a/app/Ui/contact/contact.py b/app/Ui/contact/contact.py index d8fbc5b..f1d6aa7 100644 --- a/app/Ui/contact/contact.py +++ b/app/Ui/contact/contact.py @@ -23,6 +23,11 @@ EMOTION = 1 ANALYSIS = 2 +class StackedWidget(): + def __init__(self): + pass + + class ContactController(QWidget, Ui_Dialog): exitSignal = pyqtSignal() urlSignal = pyqtSignal(QUrl) @@ -68,14 +73,16 @@ class ContactController(QWidget, Ui_Dialog): self.btn_emotion.clicked.connect(self.emotionale_Analysis) self.lay0 = QVBoxLayout() - self.widget.setLayout(self.lay0) - self.widget.setStyleSheet('''QWidget{background-color:rgb(255, 255, 255);}''') + # self.widget.setLayout(self.lay0) + # self.widget.setStyleSheet('''QWidget{background-color:rgb(255, 255, 255);}''') + self.stackedWidget.setStyleSheet('''QWidget{background-color:rgb(255, 255, 255);}''') self.frame = QtWidgets.QFrame() self.frame.setObjectName("frame") self.userinfo = userinfoUi.Ui_Frame() # 联系人信息界面 self.userinfo.setupUi(self.frame) self.userinfo.progressBar.setVisible(False) - self.lay0.addWidget(self.frame) + self.stackedWidget.addWidget(self.frame) + # self.lay0.addWidget(self.frame) def showContact(self): """ @@ -111,7 +118,7 @@ class ContactController(QWidget, Ui_Dialog): :return: """ self.now_talkerId = talkerId - self.frame.setVisible(True) + # self.frame.setVisible(True) self.setViewVisible(self.now_talkerId) # 把当前按钮设置为灰色 if self.last_talkerId and self.last_talkerId != talkerId: @@ -126,15 +133,17 @@ class ContactController(QWidget, Ui_Dialog): "QPushButton:hover{background-color: rgb(209,209,209);}\n" ) # 设置联系人的基本信息 - conRemark = data.get_conRemark(talkerId) - nickname, alias = data.get_nickname(talkerId) + conRemark = self.contacts[talkerId].conRemark + nickname = self.contacts[talkerId].nickname + alias = self.contacts[talkerId].alias + self.label_remark.setText(conRemark) self.ta_username = talkerId if '@chatroom' in talkerId: self.chatroomFlag = True else: self.chatroomFlag = False - self.ta_avatar = data.get_avator(talkerId) + self.ta_avatar = self.contacts[talkerId].avatar self.userinfo.l_remark.setText(conRemark) pixmap = QPixmap(self.ta_avatar).scaled(60, 60) # 按指定路径找到图片 self.userinfo.l_avatar.setPixmap(pixmap) @@ -147,6 +156,7 @@ class ContactController(QWidget, Ui_Dialog): 导出聊天记录 :return: """ + self.setViewVisible(self.now_talkerId) self.outputThread = output.Output(self.Me, self.now_talkerId) self.outputThread.progressSignal.connect(self.output_progress) self.outputThread.rangeSignal.connect(self.set_progressBar_range) @@ -187,8 +197,10 @@ class ContactController(QWidget, Ui_Dialog): else: self.setViewVisible(self.now_talkerId) self.view_analysis[self.now_talkerId] = analysis.AnalysisController(self.now_talkerId) - self.lay0.addWidget(self.view_analysis[self.now_talkerId]) + # self.lay0.addWidget(self.view_analysis[self.now_talkerId]) self.last_analysis = self.now_talkerId + self.stackedWidget.addWidget(self.view_analysis[self.now_talkerId]) + self.setViewVisible(self.now_talkerId, mod=ANALYSIS) def emotionale_Analysis(self): print('情感分析', data.get_conRemark(self.now_talkerId)) @@ -202,15 +214,34 @@ class ContactController(QWidget, Ui_Dialog): else: self.setViewVisible(self.now_talkerId) self.view_emotion[self.now_talkerId] = emotion.EmotionController(self.ta_username) - self.lay0.addWidget(self.view_emotion[self.now_talkerId]) + # self.lay0.addWidget(self.view_emotion[self.now_talkerId]) self.last_analysis = self.now_talkerId + self.stackedWidget.addWidget(self.view_emotion[self.now_talkerId]) + self.setViewVisible(self.now_talkerId, mod=EMOTION) pass def showUserinfo(self): - self.analysisView = analysis.AnalysisController(self.now_talkerId) - self.lay0 = QHBoxLayout() - self.widget.setLayout(self.lay0) - self.lay0.addWidget(self.analysisView) + pass + # self.analysisView = analysis.AnalysisController(self.now_talkerId) + # # self.lay0 = QHBoxLayout() + # # self.widget.setLayout(self.lay0) + # self.lay0.addWidget(self.analysisView) + + def setViewVisible(self, wxid: str, mod=None): + """ + 设置当前可见窗口 + """ + match mod: + case None: + self.stackedWidget.setCurrentWidget(self.frame) + case 1: + if not self.last_analysis: + return False + self.stackedWidget.setCurrentWidget(self.view_emotion[self.now_talkerId]) + case 2: + if not self.last_analysis: + return False + self.stackedWidget.setCurrentWidget(self.view_analysis[self.now_talkerId]) def back(self): """ @@ -219,36 +250,6 @@ class ContactController(QWidget, Ui_Dialog): self.frame.setVisible(True) self.setViewVisible(self.now_talkerId) - def setViewVisible(self, wxid: str, mod=None): - """将wxid的视图设置为可见""" - if not self.last_analysis: - return False - if mod == EMOTION: - for key, value in self.view_emotion.items(): - # 如果key==wxid则将该视图设置为可见,否则不可见 - if key == wxid: - print(data.get_conRemark(wxid), '视图可见') - value.setVisible(True) - else: - print(data.get_conRemark(key), '视图不可见') - value.setVisible(False) - for key, value in self.view_analysis.items(): - value.setVisible(False) - elif mod == ANALYSIS: - for key, value in self.view_analysis.items(): - # 如果key==wxid则将该视图设置为可见,否则不可见 - if key == wxid: - value.setVisible(True) - else: - value.setVisible(False) - for key, value in self.view_emotion.items(): - value.setVisible(False) - else: - for key, value in self.view_analysis.items(): - value.setVisible(False) - for key, value in self.view_emotion.items(): - value.setVisible(False) - class Contact(QtWidgets.QPushButton): """ @@ -332,14 +333,15 @@ class Contact(QtWidgets.QPushButton): def show_info(self, id): - avatar = data.get_avator(self.username) + self.avatar = data.get_avator(self.username) # print(avatar) - remark = data.get_conRemark(self.username) + self.conRemark = data.get_conRemark(self.username) + self.nickname, self.alias = data.get_nickname(self.username) time = datetime.datetime.now().strftime("%m-%d %H:%M") msg = '还没说话' - pixmap = QPixmap(avatar).scaled(60, 60) # 按指定路径找到图片 + pixmap = QPixmap(self.avatar).scaled(60, 60) # 按指定路径找到图片 self.label_avatar.setPixmap(pixmap) # 在label上显示图片 - self.label_remark.setText(remark) + self.label_remark.setText(self.conRemark) self.label_msg.setText(self.digest) self.label_time.setText(data.timestamp2str(self.conversationTime)[2:]) diff --git a/app/Ui/contact/contactUi.py b/app/Ui/contact/contactUi.py index 45b70a6..cce81b3 100644 --- a/app/Ui/contact/contactUi.py +++ b/app/Ui/contact/contactUi.py @@ -29,7 +29,6 @@ class Ui_Dialog(object): self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_2.setSpacing(0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") - self.scrollArea = QtWidgets.QScrollArea(self.frame_2) self.scrollArea.setEnabled(True) self.scrollArea.setMinimumSize(QtCore.QSize(325, 0)) @@ -43,11 +42,9 @@ class Ui_Dialog(object): self.scrollArea.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContentsOnFirstShow) self.scrollArea.setWidgetResizable(False) self.scrollArea.setObjectName("scrollArea") - self.scrollAreaWidgetContents = QtWidgets.QWidget() self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 300, 12000)) self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") - self.pushButton_2 = QtWidgets.QPushButton(self.scrollAreaWidgetContents) self.pushButton_2.setGeometry(QtCore.QRect(0, 0, 300, 80)) self.pushButton_2.setLayoutDirection(QtCore.Qt.LeftToRight) @@ -58,7 +55,6 @@ class Ui_Dialog(object): self.label = QtWidgets.QLabel(self.scrollAreaWidgetContents) self.label.setGeometry(QtCore.QRect(220, 10, 72, 15)) self.label.setObjectName("label") - self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.horizontalLayout_2.addWidget(self.scrollArea) self.frame = QtWidgets.QFrame(self.frame_2) @@ -66,8 +62,6 @@ class Ui_Dialog(object): self.frame.setFrameShadow(QtWidgets.QFrame.Raised) self.frame.setObjectName("frame") self.verticalLayout = QtWidgets.QVBoxLayout(self.frame) - self.verticalLayout.setContentsMargins(0, 0, 0, 0) - self.verticalLayout.setSpacing(0) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setSpacing(0) @@ -93,12 +87,15 @@ class Ui_Dialog(object): self.btn_back.setObjectName("btn_back") self.horizontalLayout_3.addWidget(self.btn_back) self.verticalLayout.addLayout(self.horizontalLayout_3) - self.widget = QtWidgets.QWidget(self.frame) - self.widget.setAutoFillBackground(True) - self.widget.setObjectName("widget") - self.verticalLayout.addWidget(self.widget) - self.verticalLayout.setStretch(0, 1) - self.verticalLayout.setStretch(1, 30) + self.stackedWidget = QtWidgets.QStackedWidget(self.frame) + self.stackedWidget.setObjectName("stackedWidget") + self.page_3 = QtWidgets.QWidget() + self.page_3.setObjectName("page_3") + self.stackedWidget.addWidget(self.page_3) + self.page_4 = QtWidgets.QWidget() + self.page_4.setObjectName("page_4") + self.stackedWidget.addWidget(self.page_4) + self.verticalLayout.addWidget(self.stackedWidget) self.horizontalLayout_2.addWidget(self.frame) self.horizontalLayout.addWidget(self.frame_2) diff --git a/app/Ui/contact/contactUi.ui b/app/Ui/contact/contactUi.ui index 38e9abc..5375c1e 100644 --- a/app/Ui/contact/contactUi.ui +++ b/app/Ui/contact/contactUi.ui @@ -158,22 +158,7 @@ QFrame::Raised - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - + @@ -228,10 +213,9 @@ - - - true - + + + diff --git a/app/Ui/contact/test.ui b/app/Ui/contact/test.ui new file mode 100644 index 0000000..b48643c --- /dev/null +++ b/app/Ui/contact/test.ui @@ -0,0 +1,25 @@ + + + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + + + +