From 01f16c1168fd810194f2fb47477fe19ff81bd64d Mon Sep 17 00:00:00 2001 From: shuaikangzhou <863909694@qq.com> Date: Mon, 22 May 2023 11:26:53 +0800 Subject: [PATCH] =?UTF-8?q?mainwindows=E6=96=87=E4=BB=B6=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Ui/chat/form.py | 140 ++++++++++++++++++ app/Ui/chat/myinfo.zip | Bin 0 -> 58218 bytes app/Ui/contact/analysis/charts - 副本.zip | Bin 0 -> 4590 bytes app/Ui/contact/emotion/emotion.py | 164 ++++++++++++++++++++++ app/Ui/contact/emotion/emotionUi.py | 24 ++++ app/Ui/mainwindow.py | 126 +++++++++++++++++ app/Ui/userinfo/userinfo.py | 40 ++++++ app/Ui/userinfo/userinfoUi.py | 59 ++++++++ app/Ui/userinfo/userinfoUi.ui | 91 ++++++++++++ 9 files changed, 644 insertions(+) create mode 100644 app/Ui/chat/form.py create mode 100644 app/Ui/chat/myinfo.zip create mode 100644 app/Ui/contact/analysis/charts - 副本.zip create mode 100644 app/Ui/contact/emotion/emotion.py create mode 100644 app/Ui/contact/emotion/emotionUi.py create mode 100644 app/Ui/mainwindow.py create mode 100644 app/Ui/userinfo/userinfo.py create mode 100644 app/Ui/userinfo/userinfoUi.py create mode 100644 app/Ui/userinfo/userinfoUi.ui diff --git a/app/Ui/chat/form.py b/app/Ui/chat/form.py new file mode 100644 index 0000000..2172692 --- /dev/null +++ b/app/Ui/chat/form.py @@ -0,0 +1,140 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'form.ui' +# +# Created by: PyQt5 UI code generator 5.15.7 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_Form(object): + def setupUi(self, Form): + Form.setObjectName("Form") + Form.resize(878, 720) + self.horizontalLayout = QtWidgets.QHBoxLayout(Form) + self.horizontalLayout.setObjectName("horizontalLayout") + self.scrollArea_2 = QtWidgets.QScrollArea(Form) + self.scrollArea_2.setEnabled(True) + self.scrollArea_2.setMaximumSize(QtCore.QSize(325, 150000)) + self.scrollArea_2.setAutoFillBackground(False) + self.scrollArea_2.setFrameShape(QtWidgets.QFrame.WinPanel) + self.scrollArea_2.setFrameShadow(QtWidgets.QFrame.Raised) + self.scrollArea_2.setMidLineWidth(0) + self.scrollArea_2.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) + self.scrollArea_2.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + self.scrollArea_2.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContentsOnFirstShow) + self.scrollArea_2.setWidgetResizable(False) + self.scrollArea_2.setObjectName("scrollArea_2") + self.scrollAreaWidgetContents_2 = QtWidgets.QWidget() + self.scrollAreaWidgetContents_2.setGeometry(QtCore.QRect(0, 0, 300, 12000)) + self.scrollAreaWidgetContents_2.setObjectName("scrollAreaWidgetContents_2") + self.pushButton_3 = QtWidgets.QPushButton(self.scrollAreaWidgetContents_2) + self.pushButton_3.setGeometry(QtCore.QRect(0, 0, 300, 80)) + self.pushButton_3.setLayoutDirection(QtCore.Qt.LeftToRight) + self.pushButton_3.setAutoFillBackground(False) + self.pushButton_3.setText("") + self.pushButton_3.setIconSize(QtCore.QSize(80, 80)) + self.pushButton_3.setObjectName("pushButton_3") + self.label_2 = QtWidgets.QLabel(self.scrollAreaWidgetContents_2) + self.label_2.setGeometry(QtCore.QRect(220, 10, 72, 15)) + self.label_2.setObjectName("label_2") + self.scrollArea_2.setWidget(self.scrollAreaWidgetContents_2) + self.horizontalLayout.addWidget(self.scrollArea_2) + self.frame_2 = QtWidgets.QFrame(Form) + self.frame_2.setMinimumSize(QtCore.QSize(500, 500)) + self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame_2.setObjectName("frame_2") + self.verticalLayout = QtWidgets.QVBoxLayout(self.frame_2) + self.verticalLayout.setObjectName("verticalLayout") + self.horizontalLayout_3 = QtWidgets.QHBoxLayout() + self.horizontalLayout_3.setObjectName("horizontalLayout_3") + self.label_remark_2 = QtWidgets.QLabel(self.frame_2) + font = QtGui.QFont() + font.setPointSize(12) + self.label_remark_2.setFont(font) + self.label_remark_2.setText("") + self.label_remark_2.setObjectName("label_remark_2") + self.horizontalLayout_3.addWidget(self.label_remark_2) + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_3.addItem(spacerItem) + self.toolButton_2 = QtWidgets.QToolButton(self.frame_2) + self.toolButton_2.setObjectName("toolButton_2") + self.horizontalLayout_3.addWidget(self.toolButton_2) + self.verticalLayout.addLayout(self.horizontalLayout_3) + self.line_4 = QtWidgets.QFrame(self.frame_2) + self.line_4.setLineWidth(6) + self.line_4.setFrameShape(QtWidgets.QFrame.VLine) + self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_4.setObjectName("line_4") + self.verticalLayout.addWidget(self.line_4) + self.line_5 = QtWidgets.QFrame(self.frame_2) + self.line_5.setFrameShape(QtWidgets.QFrame.HLine) + self.line_5.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_5.setObjectName("line_5") + self.verticalLayout.addWidget(self.line_5) + self.message_2 = QtWidgets.QTextBrowser(self.frame_2) + self.message_2.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) + self.message_2.setStyleSheet("background-color: #F5F5F5;") + self.message_2.setObjectName("message_2") + self.verticalLayout.addWidget(self.message_2) + self.textEdit_2 = QtWidgets.QTextEdit(self.frame_2) + font = QtGui.QFont() + font.setPointSize(15) + self.textEdit_2.setFont(font) + self.textEdit_2.setTabStopWidth(80) + self.textEdit_2.setCursorWidth(1) + self.textEdit_2.setObjectName("textEdit_2") + self.verticalLayout.addWidget(self.textEdit_2) + self.line_6 = QtWidgets.QFrame(self.frame_2) + self.line_6.setFrameShape(QtWidgets.QFrame.HLine) + self.line_6.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_6.setObjectName("line_6") + self.verticalLayout.addWidget(self.line_6) + self.btn_sendMsg_2 = QtWidgets.QPushButton(self.frame_2) + font = QtGui.QFont() + font.setFamily("黑体") + font.setPointSize(15) + font.setBold(False) + font.setWeight(50) + self.btn_sendMsg_2.setFont(font) + self.btn_sendMsg_2.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) + self.btn_sendMsg_2.setMouseTracking(False) + self.btn_sendMsg_2.setAutoFillBackground(False) + self.btn_sendMsg_2.setStyleSheet("QPushButton {\n" + " background-color: #f0f0f0;\n" + " \n" + " padding: 10px;\n" + " color:rgb(5,180,104);\n" + "}") + self.btn_sendMsg_2.setIconSize(QtCore.QSize(40, 40)) + self.btn_sendMsg_2.setCheckable(False) + self.btn_sendMsg_2.setAutoDefault(True) + self.btn_sendMsg_2.setObjectName("btn_sendMsg_2") + self.verticalLayout.addWidget(self.btn_sendMsg_2) + self.verticalLayout.setStretch(0, 1) + self.verticalLayout.setStretch(2, 3) + self.verticalLayout.setStretch(3, 20) + self.verticalLayout.setStretch(4, 1) + self.verticalLayout.setStretch(6, 1) + self.horizontalLayout.addWidget(self.frame_2) + + self.retranslateUi(Form) + QtCore.QMetaObject.connectSlotsByName(Form) + + def retranslateUi(self, Form): + _translate = QtCore.QCoreApplication.translate + Form.setWindowTitle(_translate("Form", "Form")) + self.label_2.setText(_translate("Form", "TextLabel")) + self.toolButton_2.setText(_translate("Form", "...")) + self.textEdit_2.setHtml(_translate("Form", + "\n" + "\n" + "


")) + self.btn_sendMsg_2.setText(_translate("Form", "发送")) diff --git a/app/Ui/chat/myinfo.zip b/app/Ui/chat/myinfo.zip new file mode 100644 index 0000000000000000000000000000000000000000..71c3be3bb61c6542e1cbf30ff1663e8810b54f0f GIT binary patch literal 58218 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 YO9ci1000010096#0001*5dZ)H02c7)#sB~S literal 0 HcmV?d00001 diff --git a/app/Ui/contact/emotion/emotion.py b/app/Ui/contact/emotion/emotion.py new file mode 100644 index 0000000..e7c6a9e --- /dev/null +++ b/app/Ui/contact/emotion/emotion.py @@ -0,0 +1,164 @@ +import numpy as np +import pandas as pd +from pyecharts import options as opts +from pyecharts.charts import Line + +from ....DataBase import data + + +def load_data(wxid): + message_data = data.get_text_by_num(wxid, 1) + df = pd.DataFrame(message_data, columns=['message', 'date']) + # print(df) + d = df.groupby('date') + for key, value in d: + yield key, value['message'].values + + +import snownlp + + +def emotion_analysis(wxid): + dates = [] + emotions = [] + for date, messages in load_data(wxid): + dates.append(date) + s = 0 + for msg in messages: + val = snownlp.SnowNLP(msg).sentiments + s += val + emotions.append(s / len(messages)) + emotions = np.array(emotions) + emotions = np.around(emotions, 3) * 100 + return dates, emotions + + +def plot_emotion(wxid): + """ + 画图 + """ + datas, emotions = emotion_analysis(wxid) # 获取数据 + max_ = max(emotions) + min_ = min(emotions) + c = ( + Line() + .add_xaxis( + xaxis_data=datas, + ) + .add_yaxis( + series_name="情感趋势", + is_smooth=True, + y_axis=emotions, + markpoint_opts=opts.MarkPointOpts( + data=[ + opts.MarkPointItem(type_="max", name="最大值", value=int(max_ * 100) / 100), + opts.MarkPointItem(type_="min", name="最小值", value=int(min_ * 100) / 100), + ] + ), + markline_opts=opts.MarkLineOpts( + data=[opts.MarkLineItem(type_="average", name="平均值")] + ), + ) + .set_global_opts( + yaxis_opts=opts.AxisOpts( + max_=max_, + min_=min_, + ), + xaxis_opts=opts.AxisOpts( + type_='time' + ), + axispointer_opts=opts.AxisPointerOpts( + is_show=True, link=[{"xAxisIndex": "all"}] + ), + ) + .set_series_opts(label_opts=opts.LabelOpts(is_show=False)) + .render("./data/聊天统计/emotion_chart.html") + ) + + +from PyQt5.QtCore import * +from PyQt5.QtGui import * +from PyQt5.QtWebEngineWidgets import QWebEngineView +from PyQt5.QtWidgets import * + +from . import emotionUi + + +class EmotionController(QWidget, emotionUi.Ui_Dialog): + def __init__(self, username, parent=None): + super().__init__(parent) + self.ta_username = username + + # self.setStyleSheet('''QWidget{background-color:rgb(240, 240, 240);}''') + # 加载动画 + self.center() + self.label_01() + # 防止卡死,新建线程处理数据 + self.Thread = LoadData(username) + self.Thread.okSignal.connect(self.initUI) + self.Thread.start() + + def center(self): # 定义一个函数使得窗口居中显示 + # 获取屏幕坐标系 + screen = QDesktopWidget().screenGeometry() + # 获取窗口坐标系 + size = self.geometry() + newLeft = (screen.width() - size.width()) / 2 + newTop = (screen.height() - size.height()) / 2 + self.move(int(newLeft), int(newTop)) + + def label_01(self): + w = self.size().width() + h = self.size().height() + self.label = QLabel(self) + self.label.setGeometry(w // 2, h // 2, 100, 100) + self.label.setToolTip("这是一个标签") + self.m_movie() + + def m_movie(self): + movie = QMovie("./app/data/bg.gif") + self.label.setMovie(movie) + movie.start() + + def initUI(self): + self.label.setVisible(False) + # self.setStyleSheet('''QWidget{background-color:rgb(244, 244, 244);}''') + main_box = QHBoxLayout(self) + self.browser1 = QWebEngineView() + self.browser1.load(QUrl('file:///data/聊天统计/emotion_chart.html')) + # self.browser1.setStyleSheet('''QWidget{background-color:rgb(240, 240, 240);}''') + + splitter1 = QSplitter(Qt.Vertical) + + splitter1.addWidget(self.browser1) + main_box.addWidget(splitter1) + self.setLayout(main_box) + + def setBackground(self): + palette = QPalette() + pix = QPixmap("./app/data/bg.png") + pix = pix.scaled(self.width(), self.height(), Qt.IgnoreAspectRatio, Qt.SmoothTransformation) # 自适应图片大小 + palette.setBrush(self.backgroundRole(), QBrush(pix)) # 设置背景图片 + # palette.setColor(self.backgroundRole(), QColor(192, 253, 123)) # 设置背景颜色 + self.setPalette(palette) + + +class LoadData(QThread): + """ + 发送信息线程 + """ + okSignal = pyqtSignal(int) + + def __init__(self, ta_u, parent=None): + super().__init__(parent) + self.ta_username = ta_u + + def run(self): + plot_emotion(self.ta_username) + self.okSignal.emit(10) + + +if __name__ == '__main__': + # wxid = 'wxid_8piw6sb4hvfm22' + wxid = 'wxid_wt2vsktnu4z022' + load_data(wxid) diff --git a/app/Ui/contact/emotion/emotionUi.py b/app/Ui/contact/emotion/emotionUi.py new file mode 100644 index 0000000..c989dbd --- /dev/null +++ b/app/Ui/contact/emotion/emotionUi.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'emotionUi.ui' +# +# Created by: PyQt5 UI code generator 5.15.7 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore + + +class Ui_Dialog(object): + def setupUi(self, Dialog): + Dialog.setObjectName("Dialog") + Dialog.resize(400, 300) + + self.retranslateUi(Dialog) + QtCore.QMetaObject.connectSlotsByName(Dialog) + + def retranslateUi(self, Dialog): + _translate = QtCore.QCoreApplication.translate + Dialog.setWindowTitle(_translate("Dialog", "Dialog")) diff --git a/app/Ui/mainwindow.py b/app/Ui/mainwindow.py new file mode 100644 index 0000000..d978cde --- /dev/null +++ b/app/Ui/mainwindow.py @@ -0,0 +1,126 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'mainwindow.ui' +# +# Created by: PyQt5 UI code generator 5.15.7 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1280, 779) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) + self.horizontalLayout.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout.setSpacing(0) + self.horizontalLayout.setObjectName("horizontalLayout") + self.frame_info = QtWidgets.QFrame(self.centralwidget) + self.frame_info.setMinimumSize(QtCore.QSize(80, 500)) + self.frame_info.setMaximumSize(QtCore.QSize(80, 16777215)) + self.frame_info.setStyleSheet("background-color:rgb(240,240,240)") + self.frame_info.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame_info.setFrameShadow(QtWidgets.QFrame.Sunken) + self.frame_info.setObjectName("frame_info") + self.verticalLayoutWidget = QtWidgets.QWidget(self.frame_info) + self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 190, 61, 271)) + self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) + self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_2.setSpacing(0) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.btn_chat = QtWidgets.QPushButton(self.verticalLayoutWidget) + self.btn_chat.setMinimumSize(QtCore.QSize(0, 60)) + self.btn_chat.setStyleSheet("QPushButton {background-color: rgb(240,240,240);}\n" + " QPushButton:hover{background-color: rgb(209,209,209);}\n" + " ") + self.btn_chat.setObjectName("btn_chat") + self.verticalLayout_2.addWidget(self.btn_chat) + self.btn_contact = QtWidgets.QPushButton(self.verticalLayoutWidget) + self.btn_contact.setMinimumSize(QtCore.QSize(0, 60)) + self.btn_contact.setStyleSheet("QPushButton {background-color: rgb(240,240,240);}\n" + " QPushButton:hover{background-color: rgb(209,209,209);}\n" + " ") + self.btn_contact.setObjectName("btn_contact") + self.verticalLayout_2.addWidget(self.btn_contact) + self.btn_myinfo = QtWidgets.QPushButton(self.verticalLayoutWidget) + self.btn_myinfo.setMinimumSize(QtCore.QSize(60, 60)) + self.btn_myinfo.setStyleSheet("QPushButton {background-color: rgb(240,240,240);}\n" + " QPushButton:hover{background-color: rgb(209,209,209);}\n" + " ") + self.btn_myinfo.setObjectName("btn_myinfo") + self.verticalLayout_2.addWidget(self.btn_myinfo) + self.btn_about = QtWidgets.QPushButton(self.verticalLayoutWidget) + self.btn_about.setMinimumSize(QtCore.QSize(60, 60)) + self.btn_about.setStyleSheet("QPushButton {background-color: rgb(240,240,240);}\n" + " QPushButton:hover{background-color: rgb(209,209,209);}\n" + " ") + self.btn_about.setObjectName("btn_about") + self.verticalLayout_2.addWidget(self.btn_about) + self.verticalLayout_2.setStretch(0, 1) + self.verticalLayout_2.setStretch(1, 1) + self.verticalLayout_2.setStretch(2, 1) + self.verticalLayout_2.setStretch(3, 1) + self.myavatar = QtWidgets.QLabel(self.frame_info) + self.myavatar.setGeometry(QtCore.QRect(5, 40, 70, 70)) + self.myavatar.setObjectName("myavatar") + self.horizontalLayout.addWidget(self.frame_info) + self.frame_main = QtWidgets.QFrame(self.centralwidget) + self.frame_main.setMinimumSize(QtCore.QSize(1120, 720)) + self.frame_main.setLayoutDirection(QtCore.Qt.LeftToRight) + self.frame_main.setFrameShape(QtWidgets.QFrame.Box) + self.frame_main.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame_main.setObjectName("frame_main") + self.horizontalLayout.addWidget(self.frame_main) + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1280, 23)) + self.menubar.setObjectName("menubar") + self.menu_F = QtWidgets.QMenu(self.menubar) + self.menu_F.setObjectName("menu_F") + self.menu = QtWidgets.QMenu(self.menubar) + self.menu.setObjectName("menu") + self.menu_2 = QtWidgets.QMenu(self.menubar) + self.menu_2.setObjectName("menu_2") + MainWindow.setMenuBar(self.menubar) + self.statusbar = QtWidgets.QStatusBar(MainWindow) + self.statusbar.setObjectName("statusbar") + MainWindow.setStatusBar(self.statusbar) + self.action_3 = QtWidgets.QAction(MainWindow) + self.action_3.setObjectName("action_3") + self.action_4 = QtWidgets.QAction(MainWindow) + self.action_4.setObjectName("action_4") + self.action = QtWidgets.QAction(MainWindow) + self.action.setObjectName("action") + self.menu_F.addSeparator() + self.menu_F.addSeparator() + self.menu_F.addAction(self.action_3) + self.menu_F.addAction(self.action_4) + self.menu_2.addAction(self.action) + self.menubar.addAction(self.menu_F.menuAction()) + self.menubar.addAction(self.menu.menuAction()) + self.menubar.addAction(self.menu_2.menuAction()) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.btn_chat.setText(_translate("MainWindow", "聊天")) + self.btn_contact.setText(_translate("MainWindow", "联系人")) + self.btn_myinfo.setText(_translate("MainWindow", "我的")) + self.btn_about.setText(_translate("MainWindow", "关于")) + self.myavatar.setText(_translate("MainWindow", "avatar")) + self.menu_F.setTitle(_translate("MainWindow", "文件(F)")) + self.menu.setTitle(_translate("MainWindow", "编辑")) + self.menu_2.setTitle(_translate("MainWindow", "帮助")) + self.action_3.setText(_translate("MainWindow", "保存")) + self.action_4.setText(_translate("MainWindow", "退出")) + self.action.setText(_translate("MainWindow", "关于")) diff --git a/app/Ui/userinfo/userinfo.py b/app/Ui/userinfo/userinfo.py new file mode 100644 index 0000000..8435ff4 --- /dev/null +++ b/app/Ui/userinfo/userinfo.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +""" +@File : contact.py +@Author : Shuaikang Zhou +@Time : 2022/12/13 15:07 +@IDE : Pycharm +@Version : Python3.10 +@comment : ··· +""" +from PyQt5.QtCore import * +from PyQt5.QtGui import * +from PyQt5.QtWidgets import * + +from .userinfoUi import * +from ...DataBase import data + + +class MyinfoController(QWidget, Ui_Dialog): + exitSignal = pyqtSignal() + urlSignal = pyqtSignal(QUrl) + + # username = '' + + def __init__(self, Me, parent=None): + super(MyinfoController, self).__init__(parent) + self.setupUi(self) + self.setWindowTitle('WeChat') + self.setWindowIcon(QIcon('./app/data/icon.png')) + self.Me = Me + self.initui() + + def initui(self): + self.myinfo = data.get_myInfo() + avatar = self.Me.my_avatar + pixmap = QPixmap(avatar).scaled(80, 80) # 按指定路径找到图片 + self.label_avatar.setPixmap(pixmap) # 在label上显示图片 + self.label_name.setText(self.myinfo['name']) + self.label_wxid.setText('微信号:' + self.myinfo['username']) + city = f"地区:{self.myinfo['province']}{self.myinfo['city']}" + self.label_city.setText(city) diff --git a/app/Ui/userinfo/userinfoUi.py b/app/Ui/userinfo/userinfoUi.py new file mode 100644 index 0000000..81b47fd --- /dev/null +++ b/app/Ui/userinfo/userinfoUi.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'userinfoUi.ui' +# +# Created by: PyQt5 UI code generator 5.15.7 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_Dialog(object): + def setupUi(self, Dialog): + Dialog.setObjectName("Dialog") + Dialog.resize(1120, 720) + Dialog.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor)) + Dialog.setAutoFillBackground(False) + self.frame_2 = QtWidgets.QFrame(Dialog) + self.frame_2.setGeometry(QtCore.QRect(0, 0, 1120, 720)) + self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame_2.setObjectName("frame_2") + self.horizontalLayoutWidget = QtWidgets.QWidget(self.frame_2) + self.horizontalLayoutWidget.setGeometry(QtCore.QRect(340, 60, 291, 82)) + self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget") + self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget) + self.horizontalLayout.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout.setObjectName("horizontalLayout") + self.label_avatar = QtWidgets.QLabel(self.horizontalLayoutWidget) + self.label_avatar.setMinimumSize(QtCore.QSize(80, 80)) + self.label_avatar.setObjectName("label_avatar") + self.horizontalLayout.addWidget(self.label_avatar) + self.verticalLayout = QtWidgets.QVBoxLayout() + self.verticalLayout.setObjectName("verticalLayout") + self.label_name = QtWidgets.QLabel(self.horizontalLayoutWidget) + self.label_name.setObjectName("label_name") + self.verticalLayout.addWidget(self.label_name) + self.label_wxid = QtWidgets.QLabel(self.horizontalLayoutWidget) + self.label_wxid.setObjectName("label_wxid") + self.verticalLayout.addWidget(self.label_wxid) + self.label_city = QtWidgets.QLabel(self.horizontalLayoutWidget) + self.label_city.setObjectName("label_city") + self.verticalLayout.addWidget(self.label_city) + self.horizontalLayout.addLayout(self.verticalLayout) + self.horizontalLayout.setStretch(0, 1) + self.horizontalLayout.setStretch(1, 3) + + self.retranslateUi(Dialog) + QtCore.QMetaObject.connectSlotsByName(Dialog) + + def retranslateUi(self, Dialog): + _translate = QtCore.QCoreApplication.translate + Dialog.setWindowTitle(_translate("Dialog", "Dialog")) + self.label_avatar.setText(_translate("Dialog", "TextLabel")) + self.label_name.setText(_translate("Dialog", "TextLabel")) + self.label_wxid.setText(_translate("Dialog", "TextLabel")) + self.label_city.setText(_translate("Dialog", "TextLabel")) diff --git a/app/Ui/userinfo/userinfoUi.ui b/app/Ui/userinfo/userinfoUi.ui new file mode 100644 index 0000000..50d0fd8 --- /dev/null +++ b/app/Ui/userinfo/userinfoUi.ui @@ -0,0 +1,91 @@ + + + Dialog + + + + 0 + 0 + 1120 + 720 + + + + ArrowCursor + + + Dialog + + + false + + + + + 0 + 0 + 1120 + 720 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 340 + 60 + 291 + 82 + + + + + + + + 80 + 80 + + + + TextLabel + + + + + + + + + TextLabel + + + + + + + TextLabel + + + + + + + TextLabel + + + + + + + + + + + +