mirror of
https://github.com/LC044/WeChatMsg
synced 2025-04-11 17:28:01 +08:00
显示联系人信息
This commit is contained in:
parent
286e2d627c
commit
5849b8f692
@ -4,12 +4,11 @@
|
|||||||
<option name="autoReloadType" value="SELECTIVE" />
|
<option name="autoReloadType" value="SELECTIVE" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="84e65474-7da9-466d-baf3-cc88dde3ffdd" name="变更" comment="新增联系人头像组件">
|
<list default="true" id="84e65474-7da9-466d-baf3-cc88dde3ffdd" name="变更" comment="头像支持显示二进制">
|
||||||
<change afterPath="$PROJECT_DIR$/app/DataBase/misc.py" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/components/CAvatar.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/components/CAvatar.py" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/app/components/contact_info_ui.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/components/contact_info_ui.py" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/app/person.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/person.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/app/person.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/person.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/app/ui_pc/contact/contactUi.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/ui_pc/contact/contactUi.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/app/ui_pc/contact/contactUi.ui" beforeDir="false" afterPath="$PROJECT_DIR$/app/ui_pc/contact/contactUi.ui" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/ui_pc/contact/contact_window.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/ui_pc/contact/contact_window.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/app/ui_pc/contact/contact_window.py" beforeDir="false" afterPath="$PROJECT_DIR$/app/ui_pc/contact/contact_window.py" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
@ -255,13 +254,6 @@
|
|||||||
<option name="presentableId" value="Default" />
|
<option name="presentableId" value="Default" />
|
||||||
<updated>1672848140146</updated>
|
<updated>1672848140146</updated>
|
||||||
</task>
|
</task>
|
||||||
<task id="LOCAL-00012" summary="优化加载页面">
|
|
||||||
<created>1678034382207</created>
|
|
||||||
<option name="number" value="00012" />
|
|
||||||
<option name="presentableId" value="LOCAL-00012" />
|
|
||||||
<option name="project" value="LOCAL" />
|
|
||||||
<updated>1678034382207</updated>
|
|
||||||
</task>
|
|
||||||
<task id="LOCAL-00013" summary="修复部分bug">
|
<task id="LOCAL-00013" summary="修复部分bug">
|
||||||
<created>1680232548867</created>
|
<created>1680232548867</created>
|
||||||
<option name="number" value="00013" />
|
<option name="number" value="00013" />
|
||||||
@ -598,7 +590,14 @@
|
|||||||
<option name="project" value="LOCAL" />
|
<option name="project" value="LOCAL" />
|
||||||
<updated>1700056651470</updated>
|
<updated>1700056651470</updated>
|
||||||
</task>
|
</task>
|
||||||
<option name="localTasksCounter" value="61" />
|
<task id="LOCAL-00061" summary="头像支持显示二进制">
|
||||||
|
<created>1700058733119</created>
|
||||||
|
<option name="number" value="00061" />
|
||||||
|
<option name="presentableId" value="LOCAL-00061" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1700058733119</updated>
|
||||||
|
</task>
|
||||||
|
<option name="localTasksCounter" value="62" />
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="UnknownFeatures">
|
<component name="UnknownFeatures">
|
||||||
@ -634,7 +633,6 @@
|
|||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="VcsManagerConfiguration">
|
<component name="VcsManagerConfiguration">
|
||||||
<MESSAGE value="match语法说明" />
|
|
||||||
<MESSAGE value="增加群二维码" />
|
<MESSAGE value="增加群二维码" />
|
||||||
<MESSAGE value="支持导出csv格式聊天记录" />
|
<MESSAGE value="支持导出csv格式聊天记录" />
|
||||||
<MESSAGE value="重构一些class,删除一些不必要的文件" />
|
<MESSAGE value="重构一些class,删除一些不必要的文件" />
|
||||||
@ -659,7 +657,8 @@
|
|||||||
<MESSAGE value="修复无法查找wxid的bug" />
|
<MESSAGE value="修复无法查找wxid的bug" />
|
||||||
<MESSAGE value="修改UI" />
|
<MESSAGE value="修改UI" />
|
||||||
<MESSAGE value="新增联系人头像组件" />
|
<MESSAGE value="新增联系人头像组件" />
|
||||||
<option name="LAST_COMMIT_MESSAGE" value="新增联系人头像组件" />
|
<MESSAGE value="头像支持显示二进制" />
|
||||||
|
<option name="LAST_COMMIT_MESSAGE" value="头像支持显示二进制" />
|
||||||
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" />
|
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" />
|
||||||
<option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="true" />
|
<option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="true" />
|
||||||
</component>
|
</component>
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
import os.path
|
import os.path
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
|
from PyQt5.QtCore import Qt
|
||||||
from PyQt5.QtGui import QPixmap
|
from PyQt5.QtGui import QPixmap
|
||||||
|
|
||||||
from app.DataBase import data
|
from app.DataBase import data
|
||||||
|
from app.ui_pc.Icon import Icon
|
||||||
|
|
||||||
|
|
||||||
# from app.Ui.Icon import Icon
|
# from app.Ui.Icon import Icon
|
||||||
@ -46,6 +48,17 @@ class ContactPC:
|
|||||||
self.nickName = contact_info.get('NickName')
|
self.nickName = contact_info.get('NickName')
|
||||||
self.smallHeadImgUrl = contact_info.get('smallHeadImgUrl')
|
self.smallHeadImgUrl = contact_info.get('smallHeadImgUrl')
|
||||||
self.smallHeadImgBLOG = b''
|
self.smallHeadImgBLOG = b''
|
||||||
|
self.avatar = QPixmap()
|
||||||
|
|
||||||
|
def set_avatar(self, img_bytes):
|
||||||
|
if not img_bytes:
|
||||||
|
self.avatar.load(Icon.Default_avatar_path)
|
||||||
|
return
|
||||||
|
if img_bytes[:4] == b'\x89PNG':
|
||||||
|
self.avatar.loadFromData(img_bytes, format='PNG')
|
||||||
|
else:
|
||||||
|
self.avatar.loadFromData(img_bytes, format='jfif')
|
||||||
|
self.avatar.scaled(60, 60, Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
|
||||||
|
|
||||||
|
|
||||||
class Group(Person):
|
class Group(Person):
|
||||||
|
132
app/ui_pc/contact/contactInfo.py
Normal file
132
app/ui_pc/contact/contactInfo.py
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
from PyQt5.QtCore import *
|
||||||
|
from PyQt5.QtWidgets import *
|
||||||
|
|
||||||
|
from app import person
|
||||||
|
from app.DataBase import output
|
||||||
|
from app.Ui.Icon import Icon
|
||||||
|
from .contactInfoUi import Ui_Form
|
||||||
|
from .userinfo import userinfo
|
||||||
|
|
||||||
|
|
||||||
|
class ContactInfo(QWidget, Ui_Form):
|
||||||
|
exitSignal = pyqtSignal()
|
||||||
|
urlSignal = pyqtSignal(QUrl)
|
||||||
|
|
||||||
|
# username = ''
|
||||||
|
def __init__(self, contact, me: person.Me = None, parent=None):
|
||||||
|
super(ContactInfo, self).__init__(parent)
|
||||||
|
self.setupUi(self)
|
||||||
|
self.contact = contact
|
||||||
|
self.view_userinfo = userinfo.UserinfoController(self.contact)
|
||||||
|
|
||||||
|
# self.btn_analysis.clicked.connect(self.analysis)
|
||||||
|
# self.btn_emotion.clicked.connect(self.emotionale_Analysis)
|
||||||
|
# self.btn_report.clicked.connect(self.annual_report)
|
||||||
|
self.btn_back.clicked.connect(self.back)
|
||||||
|
self.Me = me
|
||||||
|
# self.
|
||||||
|
self.init_ui()
|
||||||
|
|
||||||
|
def init_ui(self):
|
||||||
|
self.btn_back.setIcon(Icon.Back)
|
||||||
|
self.btn_report.setIcon(Icon.Annual_Report_Icon)
|
||||||
|
self.btn_analysis.setIcon(Icon.Analysis_Icon)
|
||||||
|
self.btn_emotion.setIcon(Icon.Emotion_Icon)
|
||||||
|
self.label_remark.setText(self.contact.remark)
|
||||||
|
self.stackedWidget.addWidget(self.view_userinfo)
|
||||||
|
self.stackedWidget.setCurrentWidget(self.view_userinfo)
|
||||||
|
menu = QMenu(self)
|
||||||
|
self.toDocxAct = QAction(Icon.ToDocx, '导出Docx', self)
|
||||||
|
self.toCSVAct = QAction(Icon.ToCSV, '导出CSV', self)
|
||||||
|
self.toHtmlAct = QAction(Icon.ToHTML, '导出HTML', self)
|
||||||
|
self.toolButton_output.setPopupMode(QToolButton.MenuButtonPopup)
|
||||||
|
self.toolButton_output.clicked.connect(self.toolButton_show)
|
||||||
|
menu.addAction(self.toDocxAct)
|
||||||
|
menu.addAction(self.toCSVAct)
|
||||||
|
menu.addAction(self.toHtmlAct)
|
||||||
|
self.toolButton_output.setMenu(menu)
|
||||||
|
self.toolButton_output.setIcon(Icon.Output)
|
||||||
|
# self.toolButton_output.addSeparator()
|
||||||
|
self.toHtmlAct.triggered.connect(self.output)
|
||||||
|
self.toDocxAct.triggered.connect(self.output)
|
||||||
|
self.toCSVAct.triggered.connect(self.output)
|
||||||
|
|
||||||
|
def toolButton_show(self):
|
||||||
|
self.toolButton_output.showMenu()
|
||||||
|
|
||||||
|
def analysis(self):
|
||||||
|
self.stackedWidget.setCurrentWidget(self.view_analysis)
|
||||||
|
if 'room' in self.contact.wxid:
|
||||||
|
QMessageBox.warning(
|
||||||
|
self, '警告',
|
||||||
|
'暂不支持群组'
|
||||||
|
)
|
||||||
|
return
|
||||||
|
self.view_analysis.start()
|
||||||
|
|
||||||
|
def annual_report(self):
|
||||||
|
QMessageBox.warning(
|
||||||
|
self,
|
||||||
|
"提示",
|
||||||
|
"敬请期待"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
# self.report = report.ReportController(self.contact)
|
||||||
|
# self.report.show()
|
||||||
|
|
||||||
|
def emotionale_Analysis(self):
|
||||||
|
self.stackedWidget.setCurrentWidget(self.view_emotion)
|
||||||
|
if 'room' in self.contact.wxid:
|
||||||
|
QMessageBox.warning(
|
||||||
|
self, '警告',
|
||||||
|
'暂不支持群组'
|
||||||
|
)
|
||||||
|
return
|
||||||
|
self.view_emotion.start()
|
||||||
|
|
||||||
|
def back(self):
|
||||||
|
"""
|
||||||
|
将userinfo界面设置为可见,其他界面设置为不可见
|
||||||
|
"""
|
||||||
|
self.stackedWidget.setCurrentWidget(self.view_userinfo)
|
||||||
|
|
||||||
|
def output(self):
|
||||||
|
"""
|
||||||
|
导出聊天记录
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
self.stackedWidget.setCurrentWidget(self.view_userinfo)
|
||||||
|
if self.sender() == self.toDocxAct:
|
||||||
|
self.outputThread = output.Output(self.Me, self.contact.wxid)
|
||||||
|
elif self.sender() == self.toCSVAct:
|
||||||
|
print('开始导出csv')
|
||||||
|
self.outputThread = output.Output(self.Me, self.contact.wxid, type_=output.Output.CSV)
|
||||||
|
print('导出csv')
|
||||||
|
elif self.sender() == self.toHtmlAct:
|
||||||
|
print('功能暂未实现')
|
||||||
|
QMessageBox.warning(self,
|
||||||
|
"别急别急",
|
||||||
|
"马上就实现该功能"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
self.outputThread.progressSignal.connect(self.output_progress)
|
||||||
|
self.outputThread.rangeSignal.connect(self.set_progressBar_range)
|
||||||
|
self.outputThread.okSignal.connect(self.hide_progress_bar)
|
||||||
|
self.outputThread.start()
|
||||||
|
|
||||||
|
def hide_progress_bar(self, int):
|
||||||
|
reply = QMessageBox(self)
|
||||||
|
reply.setIcon(QMessageBox.Information)
|
||||||
|
reply.setWindowTitle('OK')
|
||||||
|
reply.setText(f"导出聊天记录成功\n在.\\data\\目录下")
|
||||||
|
reply.addButton("确认", QMessageBox.AcceptRole)
|
||||||
|
reply.addButton("取消", QMessageBox.RejectRole)
|
||||||
|
api = reply.exec_()
|
||||||
|
self.view_userinfo.progressBar.setVisible(False)
|
||||||
|
|
||||||
|
def output_progress(self, value):
|
||||||
|
self.view_userinfo.progressBar.setProperty('value', value)
|
||||||
|
|
||||||
|
def set_progressBar_range(self, value):
|
||||||
|
self.view_userinfo.progressBar.setVisible(True)
|
||||||
|
self.view_userinfo.progressBar.setRange(0, value)
|
92
app/ui_pc/contact/contactInfoUi.py
Normal file
92
app/ui_pc/contact/contactInfoUi.py
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'contactInfoUi.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(817, 748)
|
||||||
|
self.horizontalLayout = QtWidgets.QHBoxLayout(Form)
|
||||||
|
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
self.horizontalLayout.setSpacing(0)
|
||||||
|
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||||
|
self.frame = QtWidgets.QFrame(Form)
|
||||||
|
self.frame.setFrameShape(QtWidgets.QFrame.NoFrame)
|
||||||
|
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)
|
||||||
|
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
|
||||||
|
self.label_remark = QtWidgets.QLabel(self.frame)
|
||||||
|
self.label_remark.setMaximumSize(QtCore.QSize(16777215, 100))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(12)
|
||||||
|
self.label_remark.setFont(font)
|
||||||
|
self.label_remark.setText("")
|
||||||
|
self.label_remark.setObjectName("label_remark")
|
||||||
|
self.horizontalLayout_3.addWidget(self.label_remark)
|
||||||
|
self.btn_analysis = QtWidgets.QPushButton(self.frame)
|
||||||
|
self.btn_analysis.setStyleSheet("")
|
||||||
|
self.btn_analysis.setFlat(True)
|
||||||
|
self.btn_analysis.setObjectName("btn_analysis")
|
||||||
|
self.horizontalLayout_3.addWidget(self.btn_analysis)
|
||||||
|
self.btn_emotion = QtWidgets.QPushButton(self.frame)
|
||||||
|
self.btn_emotion.setFlat(True)
|
||||||
|
self.btn_emotion.setObjectName("btn_emotion")
|
||||||
|
self.horizontalLayout_3.addWidget(self.btn_emotion)
|
||||||
|
self.btn_report = QtWidgets.QPushButton(self.frame)
|
||||||
|
self.btn_report.setFlat(True)
|
||||||
|
self.btn_report.setObjectName("btn_report")
|
||||||
|
self.horizontalLayout_3.addWidget(self.btn_report)
|
||||||
|
self.btn_back = QtWidgets.QPushButton(self.frame)
|
||||||
|
self.btn_back.setFlat(True)
|
||||||
|
self.btn_back.setObjectName("btn_back")
|
||||||
|
self.horizontalLayout_3.addWidget(self.btn_back)
|
||||||
|
self.toolButton_output = QtWidgets.QToolButton(self.frame)
|
||||||
|
icon = QtGui.QIcon()
|
||||||
|
icon.addPixmap(QtGui.QPixmap("../../data/icons/output.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||||
|
self.toolButton_output.setIcon(icon)
|
||||||
|
self.toolButton_output.setCheckable(False)
|
||||||
|
self.toolButton_output.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup)
|
||||||
|
self.toolButton_output.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
|
||||||
|
self.toolButton_output.setAutoRaise(True)
|
||||||
|
self.toolButton_output.setArrowType(QtCore.Qt.NoArrow)
|
||||||
|
self.toolButton_output.setObjectName("toolButton_output")
|
||||||
|
self.horizontalLayout_3.addWidget(self.toolButton_output)
|
||||||
|
self.verticalLayout.addLayout(self.horizontalLayout_3)
|
||||||
|
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.addWidget(self.frame)
|
||||||
|
|
||||||
|
self.retranslateUi(Form)
|
||||||
|
self.stackedWidget.setCurrentIndex(1)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Form)
|
||||||
|
|
||||||
|
def retranslateUi(self, Form):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Form.setWindowTitle(_translate("Form", "Form"))
|
||||||
|
self.btn_analysis.setText(_translate("Form", "统计信息"))
|
||||||
|
self.btn_emotion.setText(_translate("Form", "情感分析"))
|
||||||
|
self.btn_report.setText(_translate("Form", "年度报告"))
|
||||||
|
self.btn_back.setText(_translate("Form", "退出"))
|
||||||
|
self.toolButton_output.setText(_translate("Form", "导出聊天记录"))
|
168
app/ui_pc/contact/contactInfoUi.ui
Normal file
168
app/ui_pc/contact/contactInfoUi.ui
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Form</class>
|
||||||
|
<widget class="QWidget" name="Form">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>817</width>
|
||||||
|
<height>748</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QFrame" name="frame">
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::NoFrame</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_remark">
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>100</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>12</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="btn_analysis">
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true"/>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>统计信息</string>
|
||||||
|
</property>
|
||||||
|
<property name="flat">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="btn_emotion">
|
||||||
|
<property name="text">
|
||||||
|
<string>情感分析</string>
|
||||||
|
</property>
|
||||||
|
<property name="flat">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="btn_report">
|
||||||
|
<property name="text">
|
||||||
|
<string>年度报告</string>
|
||||||
|
</property>
|
||||||
|
<property name="flat">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="btn_back">
|
||||||
|
<property name="text">
|
||||||
|
<string>退出</string>
|
||||||
|
</property>
|
||||||
|
<property name="flat">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="toolButton_output">
|
||||||
|
<property name="text">
|
||||||
|
<string>导出聊天记录</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset>
|
||||||
|
<normaloff>../../data/icons/output.svg</normaloff>
|
||||||
|
../../data/icons/output.svg
|
||||||
|
</iconset>
|
||||||
|
</property>
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="popupMode">
|
||||||
|
<enum>QToolButton::MenuButtonPopup</enum>
|
||||||
|
</property>
|
||||||
|
<property name="toolButtonStyle">
|
||||||
|
<enum>Qt::ToolButtonTextBesideIcon</enum>
|
||||||
|
</property>
|
||||||
|
<property name="autoRaise">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="arrowType">
|
||||||
|
<enum>Qt::NoArrow</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QStackedWidget" name="stackedWidget">
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="page_3"/>
|
||||||
|
<widget class="QWidget" name="page_4"/>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
@ -35,17 +35,11 @@ class Ui_Form(object):
|
|||||||
self.horizontalLayout.addLayout(self.verticalLayout)
|
self.horizontalLayout.addLayout(self.verticalLayout)
|
||||||
self.stackedWidget = QtWidgets.QStackedWidget(Form)
|
self.stackedWidget = QtWidgets.QStackedWidget(Form)
|
||||||
self.stackedWidget.setObjectName("stackedWidget")
|
self.stackedWidget.setObjectName("stackedWidget")
|
||||||
self.page = QtWidgets.QWidget()
|
|
||||||
self.page.setObjectName("page")
|
|
||||||
self.stackedWidget.addWidget(self.page)
|
|
||||||
self.page_2 = QtWidgets.QWidget()
|
|
||||||
self.page_2.setObjectName("page_2")
|
|
||||||
self.stackedWidget.addWidget(self.page_2)
|
|
||||||
self.horizontalLayout.addWidget(self.stackedWidget)
|
self.horizontalLayout.addWidget(self.stackedWidget)
|
||||||
self.horizontalLayout.setStretch(1, 1)
|
self.horizontalLayout.setStretch(1, 1)
|
||||||
|
|
||||||
self.retranslateUi(Form)
|
self.retranslateUi(Form)
|
||||||
self.stackedWidget.setCurrentIndex(1)
|
self.stackedWidget.setCurrentIndex(-1)
|
||||||
QtCore.QMetaObject.connectSlotsByName(Form)
|
QtCore.QMetaObject.connectSlotsByName(Form)
|
||||||
|
|
||||||
def retranslateUi(self, Form):
|
def retranslateUi(self, Form):
|
||||||
|
@ -71,10 +71,8 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QStackedWidget" name="stackedWidget">
|
<widget class="QStackedWidget" name="stackedWidget">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>1</number>
|
<number>-1</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="page"/>
|
|
||||||
<widget class="QWidget" name="page_2"/>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
|
from PyQt5.QtCore import QThread, pyqtSignal
|
||||||
from PyQt5.QtWidgets import QWidget, QMessageBox
|
from PyQt5.QtWidgets import QWidget, QMessageBox
|
||||||
|
|
||||||
from app.DataBase import micro_msg, misc
|
from app.DataBase import micro_msg, misc
|
||||||
from app.components import ContactQListWidgetItem
|
from app.components import ContactQListWidgetItem
|
||||||
from app.person import ContactPC
|
from app.person import ContactPC
|
||||||
|
from .contactInfo import ContactInfo
|
||||||
from .contactUi import Ui_Form
|
from .contactUi import Ui_Form
|
||||||
|
|
||||||
# 美化样式表
|
# 美化样式表
|
||||||
@ -45,6 +47,7 @@ HistoryPanel::item:hover {
|
|||||||
class ContactWindow(QWidget, Ui_Form):
|
class ContactWindow(QWidget, Ui_Form):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
|
self.show_thread = None
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.setStyleSheet(Stylesheet)
|
self.setStyleSheet(Stylesheet)
|
||||||
self.init_ui()
|
self.init_ui()
|
||||||
@ -60,6 +63,30 @@ class ContactWindow(QWidget, Ui_Form):
|
|||||||
if not micro_msg.is_database_exist():
|
if not micro_msg.is_database_exist():
|
||||||
QMessageBox.critical(self, "错误", "数据库不存在\n请先解密数据库")
|
QMessageBox.critical(self, "错误", "数据库不存在\n请先解密数据库")
|
||||||
return
|
return
|
||||||
|
self.show_thread = ShowContactThread()
|
||||||
|
self.show_thread.showSingal.connect(self.show_contact)
|
||||||
|
self.show_thread.start()
|
||||||
|
|
||||||
|
def show_contact(self, contact):
|
||||||
|
contact_item = ContactQListWidgetItem(contact.nickName, contact.smallHeadImgUrl, contact.smallHeadImgBLOG)
|
||||||
|
self.listWidget.addItem(contact_item)
|
||||||
|
self.listWidget.setItemWidget(contact_item, contact_item.widget)
|
||||||
|
contact_info_window = ContactInfo(contact)
|
||||||
|
self.stackedWidget.addWidget(contact_info_window)
|
||||||
|
|
||||||
|
def setCurrentIndex(self, row):
|
||||||
|
print(row)
|
||||||
|
self.stackedWidget.setCurrentIndex(row)
|
||||||
|
|
||||||
|
|
||||||
|
class ShowContactThread(QThread):
|
||||||
|
showSingal = pyqtSignal(ContactPC)
|
||||||
|
|
||||||
|
# heightSingal = pyqtSignal(int)
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
def run(self) -> None:
|
||||||
contact_info_lists = micro_msg.get_contact()
|
contact_info_lists = micro_msg.get_contact()
|
||||||
for contact_info_list in contact_info_lists:
|
for contact_info_list in contact_info_lists:
|
||||||
# UserName, Alias,Type,Remark,NickName,PYInitial,RemarkPYInitial,ContactHeadImgUrl.smallHeadImgUrl,ContactHeadImgUrl,bigHeadImgUrl
|
# UserName, Alias,Type,Remark,NickName,PYInitial,RemarkPYInitial,ContactHeadImgUrl.smallHeadImgUrl,ContactHeadImgUrl,bigHeadImgUrl
|
||||||
@ -73,11 +100,6 @@ class ContactWindow(QWidget, Ui_Form):
|
|||||||
}
|
}
|
||||||
contact = ContactPC(contact_info)
|
contact = ContactPC(contact_info)
|
||||||
contact.smallHeadImgBLOG = misc.get_avatar_buffer(contact.wxid)
|
contact.smallHeadImgBLOG = misc.get_avatar_buffer(contact.wxid)
|
||||||
|
contact.set_avatar(contact.smallHeadImgBLOG)
|
||||||
|
self.showSingal.emit(contact)
|
||||||
# pprint(contact.__dict__)
|
# pprint(contact.__dict__)
|
||||||
contact_item = ContactQListWidgetItem(contact.nickName, contact.smallHeadImgUrl, contact.smallHeadImgBLOG)
|
|
||||||
self.listWidget.addItem(contact_item)
|
|
||||||
self.listWidget.setItemWidget(contact_item, contact_item.widget)
|
|
||||||
|
|
||||||
def setCurrentIndex(self, row):
|
|
||||||
print(row)
|
|
||||||
self.stackedWidget.setCurrentIndex(row)
|
|
||||||
|
9
app/ui_pc/contact/userinfo/__init__.py
Normal file
9
app/ui_pc/contact/userinfo/__init__.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
@File : __init__.py.py
|
||||||
|
@Author : Shuaikang Zhou
|
||||||
|
@Time : 2022/12/24 10:34
|
||||||
|
@IDE : Pycharm
|
||||||
|
@Version : Python3.10
|
||||||
|
@comment : ···
|
||||||
|
"""
|
15
app/ui_pc/contact/userinfo/userinfo.py
Normal file
15
app/ui_pc/contact/userinfo/userinfo.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
from PyQt5.QtWidgets import *
|
||||||
|
|
||||||
|
from .userinfoUi import Ui_Frame
|
||||||
|
|
||||||
|
|
||||||
|
class UserinfoController(QWidget, Ui_Frame):
|
||||||
|
def __init__(self, contact, parent=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
self.setupUi(self)
|
||||||
|
self.l_remark.setText(contact.remark)
|
||||||
|
self.l_avatar.setPixmap(contact.avatar)
|
||||||
|
self.l_nickname.setText(f'昵称:{contact.nickName}')
|
||||||
|
self.l_username.setText(f'微信号:{contact.alias}')
|
||||||
|
self.lineEdit.setText(contact.remark)
|
||||||
|
self.progressBar.setVisible(False)
|
121
app/ui_pc/contact/userinfo/userinfoUi.py
Normal file
121
app/ui_pc/contact/userinfo/userinfoUi.py
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
# -*- 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_Frame(object):
|
||||||
|
def setupUi(self, Frame):
|
||||||
|
Frame.setObjectName("Frame")
|
||||||
|
Frame.resize(800, 720)
|
||||||
|
Frame.setCursor(QtGui.QCursor(QtCore.Qt.IBeamCursor))
|
||||||
|
Frame.setMouseTracking(True)
|
||||||
|
Frame.setTabletTracking(True)
|
||||||
|
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(Frame)
|
||||||
|
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
|
||||||
|
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
|
||||||
|
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||||
|
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||||
|
self.horizontalLayout_2.addItem(spacerItem)
|
||||||
|
self.verticalLayout = QtWidgets.QVBoxLayout()
|
||||||
|
self.verticalLayout.setObjectName("verticalLayout")
|
||||||
|
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
self.verticalLayout.addItem(spacerItem1)
|
||||||
|
self.gridLayout = QtWidgets.QGridLayout()
|
||||||
|
self.gridLayout.setHorizontalSpacing(6)
|
||||||
|
self.gridLayout.setObjectName("gridLayout")
|
||||||
|
self.l_avatar = QtWidgets.QLabel(Frame)
|
||||||
|
self.l_avatar.setMinimumSize(QtCore.QSize(80, 80))
|
||||||
|
self.l_avatar.setMaximumSize(QtCore.QSize(80, 80))
|
||||||
|
self.l_avatar.setText("")
|
||||||
|
self.l_avatar.setPixmap(QtGui.QPixmap("../../../a_img/be0fa6c0c4707fb5f7b37b660de826d3.jpg"))
|
||||||
|
self.l_avatar.setScaledContents(True)
|
||||||
|
self.l_avatar.setObjectName("l_avatar")
|
||||||
|
self.gridLayout.addWidget(self.l_avatar, 0, 0, 3, 1)
|
||||||
|
self.l_remark = QtWidgets.QLabel(Frame)
|
||||||
|
self.l_remark.setMinimumSize(QtCore.QSize(0, 30))
|
||||||
|
self.l_remark.setMaximumSize(QtCore.QSize(16777215, 30))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(15)
|
||||||
|
self.l_remark.setFont(font)
|
||||||
|
self.l_remark.setObjectName("l_remark")
|
||||||
|
self.gridLayout.addWidget(self.l_remark, 0, 1, 1, 1)
|
||||||
|
self.l_nickname = QtWidgets.QLabel(Frame)
|
||||||
|
self.l_nickname.setMinimumSize(QtCore.QSize(0, 30))
|
||||||
|
self.l_nickname.setMaximumSize(QtCore.QSize(16777215, 30))
|
||||||
|
self.l_nickname.setObjectName("l_nickname")
|
||||||
|
self.gridLayout.addWidget(self.l_nickname, 1, 1, 1, 1)
|
||||||
|
self.l_username = QtWidgets.QLabel(Frame)
|
||||||
|
self.l_username.setMinimumSize(QtCore.QSize(0, 20))
|
||||||
|
self.l_username.setMaximumSize(QtCore.QSize(16777215, 20))
|
||||||
|
self.l_username.setObjectName("l_username")
|
||||||
|
self.gridLayout.addWidget(self.l_username, 2, 1, 1, 1)
|
||||||
|
self.gridLayout.setRowStretch(0, 1)
|
||||||
|
self.gridLayout.setRowStretch(1, 1)
|
||||||
|
self.gridLayout.setRowStretch(2, 1)
|
||||||
|
self.verticalLayout.addLayout(self.gridLayout)
|
||||||
|
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
self.verticalLayout.addItem(spacerItem2)
|
||||||
|
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
||||||
|
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||||
|
self.label = QtWidgets.QLabel(Frame)
|
||||||
|
self.label.setMinimumSize(QtCore.QSize(80, 0))
|
||||||
|
self.label.setMaximumSize(QtCore.QSize(80, 16777215))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(15)
|
||||||
|
self.label.setFont(font)
|
||||||
|
self.label.setObjectName("label")
|
||||||
|
self.horizontalLayout.addWidget(self.label)
|
||||||
|
self.lineEdit = QtWidgets.QLineEdit(Frame)
|
||||||
|
self.lineEdit.setMinimumSize(QtCore.QSize(0, 25))
|
||||||
|
self.lineEdit.setMaximumSize(QtCore.QSize(16777215, 25))
|
||||||
|
font = QtGui.QFont()
|
||||||
|
font.setPointSize(15)
|
||||||
|
self.lineEdit.setFont(font)
|
||||||
|
self.lineEdit.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
|
||||||
|
self.lineEdit.setAutoFillBackground(False)
|
||||||
|
self.lineEdit.setStyleSheet("background:transparent;border-width:0;border-style:outset")
|
||||||
|
self.lineEdit.setObjectName("lineEdit")
|
||||||
|
self.horizontalLayout.addWidget(self.lineEdit)
|
||||||
|
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||||
|
spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
self.verticalLayout.addItem(spacerItem3)
|
||||||
|
self.progressBar = QtWidgets.QProgressBar(Frame)
|
||||||
|
self.progressBar.setProperty("value", 24)
|
||||||
|
self.progressBar.setObjectName("progressBar")
|
||||||
|
self.verticalLayout.addWidget(self.progressBar)
|
||||||
|
spacerItem4 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||||
|
self.verticalLayout.addItem(spacerItem4)
|
||||||
|
self.verticalLayout.setStretch(0, 2)
|
||||||
|
self.verticalLayout.setStretch(1, 3)
|
||||||
|
self.verticalLayout.setStretch(2, 4)
|
||||||
|
self.verticalLayout.setStretch(3, 1)
|
||||||
|
self.verticalLayout.setStretch(4, 4)
|
||||||
|
self.verticalLayout.setStretch(5, 1)
|
||||||
|
self.verticalLayout.setStretch(6, 2)
|
||||||
|
self.horizontalLayout_2.addLayout(self.verticalLayout)
|
||||||
|
spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||||
|
self.horizontalLayout_2.addItem(spacerItem5)
|
||||||
|
self.horizontalLayout_2.setStretch(0, 1)
|
||||||
|
self.horizontalLayout_2.setStretch(1, 2)
|
||||||
|
self.horizontalLayout_2.setStretch(2, 1)
|
||||||
|
self.horizontalLayout_3.addLayout(self.horizontalLayout_2)
|
||||||
|
|
||||||
|
self.retranslateUi(Frame)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(Frame)
|
||||||
|
|
||||||
|
def retranslateUi(self, Frame):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
Frame.setWindowTitle(_translate("Frame", "Frame"))
|
||||||
|
self.l_remark.setText(_translate("Frame", "曹雨萱"))
|
||||||
|
self.l_nickname.setText(_translate("Frame", "昵称:997"))
|
||||||
|
self.l_username.setText(_translate("Frame", "账号:TextLabel"))
|
||||||
|
self.label.setText(_translate("Frame", "备注名"))
|
||||||
|
self.lineEdit.setText(_translate("Frame", "曹雨萱"))
|
280
app/ui_pc/contact/userinfo/userinfoUi.ui
Normal file
280
app/ui_pc/contact/userinfo/userinfoUi.ui
Normal file
@ -0,0 +1,280 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Frame</class>
|
||||||
|
<widget class="QFrame" name="Frame">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>800</width>
|
||||||
|
<height>720</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="cursor">
|
||||||
|
<cursorShape>IBeamCursor</cursorShape>
|
||||||
|
</property>
|
||||||
|
<property name="mouseTracking">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="tabletTracking">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Frame</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="1,2,1">
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout" stretch="2,3,4,1,4,1,2">
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QGridLayout" name="gridLayout" rowstretch="1,1,1">
|
||||||
|
<property name="horizontalSpacing">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0" rowspan="3">
|
||||||
|
<widget class="QLabel" name="l_avatar">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>80</width>
|
||||||
|
<height>80</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>80</width>
|
||||||
|
<height>80</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap>../../../a_img/be0fa6c0c4707fb5f7b37b660de826d3.jpg</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="scaledContents">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLabel" name="l_remark">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>30</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>30</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>15</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>曹雨萱</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLabel" name="l_nickname">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>30</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>30</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>昵称:997</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLabel" name="l_username">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>账号:TextLabel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>80</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>80</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>15</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>备注名</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="lineEdit">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>25</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>25</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>15</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="cursor">
|
||||||
|
<cursorShape>ArrowCursor</cursorShape>
|
||||||
|
</property>
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">
|
||||||
|
background:transparent;border-width:0;border-style:outset
|
||||||
|
</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>曹雨萱</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QProgressBar" name="progressBar">
|
||||||
|
<property name="value">
|
||||||
|
<number>24</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_4">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
Loading…
Reference in New Issue
Block a user