修改部分ui,增加数据库错误提示 #136

This commit is contained in:
shuaikangzhou 2023-12-14 22:24:35 +08:00
parent 8978ab59da
commit 02020a7886
27 changed files with 4955 additions and 4285 deletions

View File

@ -1 +1,2 @@
from .contact_info_ui import ContactQListWidgetItem from .contact_info_ui import ContactQListWidgetItem
from .scroll_bar import ScrollBar

View File

@ -7,6 +7,8 @@ from PyQt5.QtGui import QPainter, QFont, QColor, QPixmap, QPolygon, QFontMetrics
from PyQt5.QtWidgets import QWidget, QLabel, QHBoxLayout, QSizePolicy, QVBoxLayout, QSpacerItem, \ from PyQt5.QtWidgets import QWidget, QLabel, QHBoxLayout, QSizePolicy, QVBoxLayout, QSpacerItem, \
QScrollArea, QScrollBar QScrollArea, QScrollBar
from app.components.scroll_bar import ScrollBar
class MessageType: class MessageType:
Text = 1 Text = 1
@ -204,51 +206,6 @@ class ScrollArea(QScrollArea):
) )
class ScrollBar(QScrollBar):
def __init__(self):
super().__init__()
self.setStyleSheet(
'''
QScrollBar:vertical {
border-width: 0px;
border: none;
background:rgba(64, 65, 79, 0);
width:5px;
margin: 0px 0px 0px 0px;
}
QScrollBar::handle:vertical {
background: qlineargradient(x1:0, y1:0, x2:1, y2:0,
stop: 0 #DDDDDD, stop: 0.5 #DDDDDD, stop:1 #aaaaff);
min-height: 20px;
max-height: 20px;
margin: 0 0px 0 0px;
border-radius: 2px;
}
QScrollBar::add-line:vertical {
background: qlineargradient(x1:0, y1:0, x2:1, y2:0,
stop: 0 rgba(64, 65, 79, 0), stop: 0.5 rgba(64, 65, 79, 0), stop:1 rgba(64, 65, 79, 0));
height: 0px;
border: none;
subcontrol-position: bottom;
subcontrol-origin: margin;
}
QScrollBar::sub-line:vertical {
background: qlineargradient(x1:0, y1:0, x2:1, y2:0,
stop: 0 rgba(64, 65, 79, 0), stop: 0.5 rgba(64, 65, 79, 0), stop:1 rgba(64, 65, 79, 0));
height: 0 px;
border: none;
subcontrol-position: top;
subcontrol-origin: margin;
}
QScrollBar::sub-page:vertical {
background: rgba(64, 65, 79, 0);
}
QScrollBar::add-page:vertical {
background: rgba(64, 65, 79, 0);
}
'''
)
class ChatWidget(QWidget): class ChatWidget(QWidget):

View File

@ -6,29 +6,76 @@ from PyQt5.QtWidgets import *
from .CAvatar import CAvatar from .CAvatar import CAvatar
Stylesheet = """
QWidget{
background: rgb(238,244,249);
}
"""
Stylesheet_hover = """
QWidget,QLabel{
background: rgb(230, 235, 240);
}
"""
Stylesheet_clicked = """
QWidget,QLabel{
background: rgb(230, 235, 240);
}
"""
class QListWidgetItemWidget(QWidget):
def __init__(self):
super().__init__()
self.is_selected = False
def leaveEvent(self, e): # 鼠标离开label
if self.is_selected:
return
self.setStyleSheet(Stylesheet)
def enterEvent(self, e): # 鼠标移入label
self.setStyleSheet(Stylesheet_hover)
# 自定义的item 继承自QListWidgetItem # 自定义的item 继承自QListWidgetItem
class ContactQListWidgetItem(QListWidgetItem): class ContactQListWidgetItem(QListWidgetItem):
def __init__(self, name, url, img_bytes=None): def __init__(self, name, url, img_bytes=None):
super().__init__() super().__init__()
# 自定义item中的widget 用来显示自定义的内容 # 自定义item中的widget 用来显示自定义的内容
self.widget = QWidget() self.widget = QListWidgetItemWidget()
# 用来显示name # 用来显示name
self.nameLabel = QLabel() self.nameLabel = QLabel(self.widget)
self.nameLabel.setText(name) self.nameLabel.setText(name)
# 用来显示avator(图像) # 用来显示avator(图像)
self.avatorLabel = CAvatar(None, shape=CAvatar.Rectangle, size=QSize(60, 60), self.avatorLabel = CAvatar(parent=self.widget, shape=CAvatar.Rectangle, size=QSize(60, 60),
url=url, img_bytes=img_bytes) url=url, img_bytes=img_bytes)
# 设置布局用来对nameLabel和avatorLabel进行布局 # 设置布局用来对nameLabel和avatorLabel进行布局
self.hbox = QHBoxLayout() hbox = QHBoxLayout()
self.hbox.addWidget(self.avatorLabel) hbox.addWidget(self.avatorLabel)
self.hbox.addWidget(self.nameLabel) hbox.addWidget(self.nameLabel)
self.hbox.addStretch(1) hbox.addStretch(1)
# 设置widget的布局 # 设置widget的布局
self.widget.setLayout(self.hbox) self.widget.setLayout(hbox)
self.widget.setStyleSheet(Stylesheet)
# 设置自定义的QListWidgetItem的sizeHint不然无法显示 # 设置自定义的QListWidgetItem的sizeHint不然无法显示
self.setSizeHint(self.widget.sizeHint()) self.setSizeHint(self.widget.sizeHint())
def select(self):
"""
设置选择后的事件
@return:
"""
self.widget.is_selected = True
self.widget.setStyleSheet(Stylesheet_clicked)
def dis_select(self):
"""
设置取消选择的事件
@return:
"""
self.widget.is_selected = False
self.widget.setStyleSheet(Stylesheet)
if __name__ == "__main__": if __name__ == "__main__":
app = QApplication(sys.argv) app = QApplication(sys.argv)

View File

@ -0,0 +1,48 @@
from PyQt5.QtWidgets import QScrollBar
class ScrollBar(QScrollBar):
def __init__(self):
super().__init__()
self.setStyleSheet(
'''
QScrollBar:vertical {
border-width: 0px;
border: none;
background:rgba(133, 135, 138, 0);
width:2px;
margin: 0px 0px 0px 0px;
}
QScrollBar::handle:vertical {
background: qlineargradient(x1:0, y1:0, x2:1, y2:0,
stop: 0 rgb(133, 135, 138), stop: 0.5 rgb(133, 135, 138), stop:1 rgb(133, 135, 138));
min-height: 20px;
max-height: 20px;
margin: 0 0px 0 0px;
border-radius: 2px;
}
QScrollBar::add-line:vertical {
background: qlineargradient(x1:0, y1:0, x2:1, y2:0,
stop: 0 rgba(133, 135, 138, 0), stop: 0.5 rgba(133, 135, 138, 0), stop:1 rgba(133, 135, 138, 0));
height: 0px;
border: none;
subcontrol-position: bottom;
subcontrol-origin: margin;
}
QScrollBar::sub-line:vertical {
background: qlineargradient(x1:0, y1:0, x2:1, y2:0,
stop: 0 rgba(133, 135, 138, 0), stop: 0.5 rgba(133, 135, 138, 0), stop:1 rgba(133, 135, 138, 0));
height: 0 px;
border: none;
subcontrol-position: top;
subcontrol-origin: margin;
}
QScrollBar::sub-page:vertical {
background: rgba(133, 135, 138, 0);
}
QScrollBar::add-page:vertical {
background: rgba(133, 135, 138, 0);
}
'''
)

View File

@ -1,12 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702562308255" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="14206" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M160 184h512v256H160z" fill="#FFD740" p-id="14207"></path><path d="M672 448H160a8 8 0 0 1-8-8v-256a8 8 0 0 1 8-8h512a8 8 0 0 1 8 8v256a8 8 0 0 1-8 8z m-504-16h496V192h-496v240z" fill="#263238" p-id="14208"></path><path d="M704 944H128c-26.464 0-48-21.536-48-48V144c0-26.464 21.536-48 48-48h576c26.464 0 48 21.536 48 48v752c0 26.464-21.536 48-48 48zM128 112c-17.648 0-32 14.352-32 32v752c0 17.648 14.352 32 32 32h576c17.648 0 32-14.352 32-32V144c0-17.648-14.352-32-32-32H128z" fill="#263238" p-id="14209"></path><path d="M784 1024H192c-26.464 0-48-21.536-48-48v-8a8 8 0 0 1 16 0v8c0 17.648 14.352 32 32 32h592c17.648 0 32-14.352 32-32V224c0-17.648-14.352-32-32-32h-8a8 8 0 0 1 0-16h8c26.464 0 48 21.536 48 48v752c0 26.464-21.536 48-48 48zM848 48h-64a8 8 0 0 1 0-16h64a8 8 0 0 1 0 16z" fill="#263238" p-id="14210"></path><path d="M816 80a8 8 0 0 1-8-8v-64a8 8 0 0 1 16 0v64a8 8 0 0 1-8 8zM936 136h-64a8 8 0 0 1 0-16h64a8 8 0 0 1 0 16z" fill="#263238" p-id="14211"></path><path d="M904 168a8 8 0 0 1-8-8V96a8 8 0 0 1 16 0v64a8 8 0 0 1-8 8zM240 392a8 8 0 0 1-6.304-12.896l112-144a8 8 0 0 1 6.048-3.088 7.472 7.472 0 0 1 6.24 2.688l121.616 136.816 106.096-136.4a8 8 0 1 1 12.624 9.808l-112 144a8 8 0 0 1-12.288 0.4l-121.616-136.816-106.096 136.4A8 8 0 0 1 240 392z" fill="#263238" p-id="14212"></path><path d="M240 384m-24 0a24 24 0 1 0 48 0 24 24 0 1 0-48 0Z" fill="#FFFFFF" p-id="14213"></path><path d="M240 416c-17.648 0-32-14.352-32-32s14.352-32 32-32 32 14.352 32 32-14.352 32-32 32z m0-48a16.016 16.016 0 0 0 0 32 16.016 16.016 0 0 0 0-32z" fill="#263238" p-id="14214"></path><path d="M480 384m-24 0a24 24 0 1 0 48 0 24 24 0 1 0-48 0Z" fill="#FFFFFF" p-id="14215"></path><path d="M480 416c-17.648 0-32-14.352-32-32s14.352-32 32-32 32 14.352 32 32-14.352 32-32 32z m0-48a16.016 16.016 0 0 0 0 32 16.016 16.016 0 0 0 0-32z" fill="#263238" p-id="14216"></path><path d="M352 240m-24 0a24 24 0 1 0 48 0 24 24 0 1 0-48 0Z" fill="#FFFFFF" p-id="14217"></path><path d="M352 272c-17.648 0-32-14.352-32-32s14.352-32 32-32 32 14.352 32 32-14.352 32-32 32z m0-48a16.016 16.016 0 0 0 0 32 16.016 16.016 0 0 0 0-32z" fill="#263238" p-id="14218"></path><path d="M592 240m-24 0a24 24 0 1 0 48 0 24 24 0 1 0-48 0Z" fill="#FFFFFF" p-id="14219"></path><path d="M592 272c-17.648 0-32-14.352-32-32s14.352-32 32-32 32 14.352 32 32-14.352 32-32 32z m0-48a16.016 16.016 0 0 0 0 32 16.016 16.016 0 0 0 0-32zM576 864c-57.344 0-104-46.656-104-104S518.656 656 576 656s104 46.656 104 104S633.344 864 576 864z m0-192c-48.528 0-88 39.488-88 88S527.472 848 576 848s88-39.488 88-88S624.528 672 576 672zM608 528H224a8 8 0 0 1 0-16h384a8 8 0 0 1 0 16zM608 608H224a8 8 0 0 1 0-16h384a8 8 0 0 1 0 16z" fill="#263238" p-id="14220"></path><path d="M643.872 827.872l0.032-0.016A96 96 0 0 0 576 664v96l67.872 67.872z" fill="#40C4FF" p-id="14221"></path><path d="M643.888 835.856a8 8 0 0 1-5.664-2.336l-67.872-67.872a7.936 7.936 0 0 1-2.352-5.648v-96a8 8 0 0 1 8-8c57.344 0 104 46.656 104 104a103.328 103.328 0 0 1-30.432 73.52 8 8 0 0 1-5.68 2.336zM584 756.688l59.632 59.632A87.36 87.36 0 0 0 664 760a88.128 88.128 0 0 0-80-87.648v84.336z" fill="#263238" p-id="14222"></path><path d="M576 856a95.68 95.68 0 0 0 67.904-28.144L576 760h-96a96 96 0 0 0 96 96z" fill="#FF5252" p-id="14223"></path><path d="M576 864a104.128 104.128 0 0 1-104-104 8 8 0 0 1 8-8h96c2.112 0 4.16 0.848 5.664 2.336l67.904 67.856a8 8 0 0 1 0 11.328A103.424 103.424 0 0 1 576 864z m-87.648-96c4.048 44.8 41.808 80 87.648 80a87.36 87.36 0 0 0 56.336-20.384L572.688 768h-84.336z" fill="#263238" p-id="14224"></path><path d="M368 688h-128a8 8 0 0 1 0-16h128a8 8 0 0 1 0 16z" fill="#263238" p-id="14225"></path><path d="M368 768h-128a8 8 0 0 1 0-16h128a8 8 0 0 1 0 16z" fill="#263238" p-id="14226"></path><path d="M368 848h-128a8 8 0 0 1 0-16h128a8 8 0 0 1 0 16z" fill="#263238" p-id="14227"></path><path d="M904 944a8 8 0 0 1-8-8v-32a8 8 0 0 1 16 0v32a8 8 0 0 1-8 8z" fill="#263238" p-id="14228"></path><path d="M904 880a8 8 0 0 1-8-8v-288a8 8 0 0 1 16 0v288a8 8 0 0 1-8 8z" fill="#263238" p-id="14229"></path></svg>
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg t="1699702054249" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
p-id="11802"
width="16" height="16">
<path d="M919.647 118.99h-812c-11.046 0-20 8.954-20 20v72.793c0 11.045 8.954 20 20 20h50.648V833c0 11.046 8.954 20 20 20h670.703c11.046 0 20-8.954 20-20V231.784h50.648c11.046 0 20-8.955 20-20V138.99c0.001-11.046-8.953-20-19.999-20zM828.999 813H198.296V236.83h630.703V813z m70.648-621.216h-772V158.99h772v32.794z"
fill="" p-id="11803"></path>
<path d="M302.595 450.354c0 0.98 0.143 24.284 12.584 48.336 11.725 22.665 36.626 50.413 88.675 53.889 2.038 0.136 4.103 0.205 6.136 0.205 26.113 0 50.696-11.051 69.221-31.116 17.731-19.206 27.9-45.199 27.9-71.313 0-52.737-28.235-77.924-51.921-89.768-24.697-12.349-49.302-12.491-50.337-12.491-8.284 0-15 6.716-15 15v72.258h-72.258c-8.284 0-15 6.716-15 15z m102.258 15c8.284 0 15-6.716 15-15v-70.377c6.425 1.328 14.214 3.589 21.921 7.443 23.448 11.724 35.337 32.898 35.337 62.935 0 39.261-30.738 72.43-67.122 72.43-1.369 0-2.761-0.047-4.137-0.139-30.175-2.015-51.556-14.405-63.548-36.826-3.857-7.212-6.183-14.436-7.585-20.465h70.134z"
fill="" p-id="11804"></path>
<path d="M371.63 418.105V291.102s-39.842-5.032-88.183 39.508c-51.748 47.679-38.82 87.495-38.82 87.495H371.63zM575.922 327.976h198.527c9.665 0 17.5-7.835 17.5-17.5s-7.835-17.5-17.5-17.5H575.922c-9.665 0-17.5 7.835-17.5 17.5s7.835 17.5 17.5 17.5zM575.922 390.76h198.527c9.665 0 17.5-7.835 17.5-17.5s-7.835-17.5-17.5-17.5H575.922c-9.665 0-17.5 7.835-17.5 17.5s7.835 17.5 17.5 17.5zM620.038 520.799l44.902 34.716c7.245 5.602 17.579 4.671 23.706-2.131l63.284-70.245 14.989 14.484a9.142 9.142 0 0 0 12.926-0.221l9.379-65.614c1.119-6.864-0.319-8.253-1.262-9.164-3.166-3.059-4.193-4.052-10.544-2.244L712.165 432a9.142 9.142 0 0 0 0.221 12.926l14.36 13.877-53.24 59.095-43.373-33.534a17.503 17.503 0 0 0-22.138 0.596l-107.33 92.622c-7.317 6.314-8.13 17.365-1.816 24.683a17.457 17.457 0 0 0 13.257 6.066c4.05 0 8.119-1.398 11.426-4.251l96.506-83.281zM461.45 667.977H262.922c-9.665 0-17.5 7.835-17.5 17.5s7.835 17.5 17.5 17.5H461.45c9.665 0 17.5-7.835 17.5-17.5s-7.835-17.5-17.5-17.5zM461.45 736.76H262.922c-9.665 0-17.5 7.835-17.5 17.5s7.835 17.5 17.5 17.5H461.45c9.665 0 17.5-7.835 17.5-17.5s-7.835-17.5-17.5-17.5zM772.722 736.76v-33.941c0-9.665-7.835-17.5-17.5-17.5s-17.5 7.835-17.5 17.5v33.941h-14.993v-85.383c0-9.665-7.835-17.5-17.5-17.5s-17.5 7.835-17.5 17.5v85.383h-14.993v-59.383c0-9.665-7.835-17.5-17.5-17.5s-17.5 7.835-17.5 17.5v59.383h-14.993V607.332c0-9.665-7.835-17.5-17.5-17.5s-17.5 7.835-17.5 17.5V736.76H572.75v-46.907c0-9.665-7.835-17.5-17.5-17.5s-17.5 7.835-17.5 17.5v46.907h-4.794c-9.665 0-17.5 7.835-17.5 17.5s7.835 17.5 17.5 17.5h247.851c9.665 0 17.5-7.835 17.5-17.5s-7.835-17.5-17.5-17.5h-8.085zM328.595 877.5h-58.522c-9.665 0-17.5 7.835-17.5 17.5s7.835 17.5 17.5 17.5h58.522c9.665 0 17.5-7.835 17.5-17.5s-7.835-17.5-17.5-17.5zM417.674 877.5h-31.341c-9.665 0-17.5 7.835-17.5 17.5s7.835 17.5 17.5 17.5h31.341c9.665 0 17.5-7.835 17.5-17.5s-7.835-17.5-17.5-17.5zM753.675 877.5H480.077c-9.665 0-17.5 7.835-17.5 17.5s7.835 17.5 17.5 17.5h273.598c9.665 0 17.5-7.835 17.5-17.5s-7.835-17.5-17.5-17.5z"
fill="" p-id="11805"></path>
</svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -1,10 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702562131578" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6431" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M624.5 534.5m-325.5 0a325.5 325.5 0 1 0 651 0 325.5 325.5 0 1 0-651 0Z" fill="#C1E6DE" p-id="6432"></path><path d="M159.534 684.536c46.494-44.727 85.552-62.297 123.134-46.118 16.58 7.137 34.97 12.832 55.177 17.058a39.27 39.27 0 0 1 30.333 30.086c20.969 96.321 92.259 142.26 223.295 142.26 51.56 0 94.224-7.407 127.845-21.876 32.295-13.897 64.764-1.552 102.148 31.796v-220.63c0-94.239-30.647-152.84-90.93-183.574a39.273 39.273 0 0 1-21.42-33.974C704.862 235.03 616.634 159.545 434.403 159.545c-186.515 0-274.87 79.078-274.87 252.468v272.523z m92.085 26.028c2.48 1.067 0.207 1.546-7.93 6.597-14.267 8.859-32.893 25.731-55.043 50.436a61.702 61.702 0 0 1-45.94 20.514C108.625 788.111 81 760.481 81 726.397V412.013C81 193.18 206.34 81 434.404 81c214.652 0 338.605 99.388 352.16 294.146C861.73 422.736 900 504.862 900 617.113v269.384C900 918.81 873.806 945 841.5 945a58.5 58.5 0 0 1-43.55-19.441c-18.66-20.807-34.259-34.932-45.962-42.196-2.558-1.588-4.655-2.678-6.209-3.344-43.357 17.76-94.866 26.35-154.306 26.35-154.92 0-257.22-59.794-293.718-179.782-16.21-4.427-31.593-9.763-46.136-16.023z m70.156 21.795c-21.228-4.438-34.84-25.247-30.401-46.478 4.437-21.23 25.243-34.844 46.471-30.405 28.64 5.988 60.848 9.005 96.56 9.005 186.514 0 274.869-79.078 274.869-252.468 0-4.205-0.053-8.355-0.159-12.449-0.56-21.682 16.56-39.714 38.24-40.274 21.679-0.56 39.708 16.562 40.268 38.244 0.124 4.775 0.185 9.6 0.185 14.479 0 218.833-125.34 331.013-353.404 331.013-40.883 0-78.435-3.517-112.63-10.667z" fill="#0A0B0C" p-id="6433"></path></svg>
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg t="1699701643250" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4091"
width="16" height="16">
<path d="M767.424 130.032 256.576 130.032c-70.4 0-128 57.6-128 128l0 335.632c0 70.4 57.6 128 128 128l118.352 0 0 172.288 213.328-172.288 179.152 0c70.4 0 128-57.6 128-128L895.408 258.032C895.424 187.632 837.824 130.032 767.424 130.032zM815.424 593.664c0 26.016-21.984 48-48 48L588.272 641.664 560 641.664l-22 17.76-83.056 67.088 0-4.848 0-80-80 0-118.352 0c-26.016 0-48-21.984-48-48L208.592 258.032c0-26.016 21.984-48 48-48l510.848 0c26.016 0 48 21.984 48 48L815.44 593.664z"
p-id="4092"></path>
<path d="M347.888 425.872m-46.608 0a2.913 2.913 0 1 0 93.216 0 2.913 2.913 0 1 0-93.216 0Z" p-id="4093"></path>
<path d="M512 425.872m-46.608 0a2.913 2.913 0 1 0 93.216 0 2.913 2.913 0 1 0-93.216 0Z" p-id="4094"></path>
<path d="M676.096 425.872m-46.608 0a2.913 2.913 0 1 0 93.216 0 2.913 2.913 0 1 0-93.216 0Z" p-id="4095"></path>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702563339699" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="28057" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M512.4096 509.696m-432.3328 0a432.3328 432.3328 0 1 0 864.6656 0 432.3328 432.3328 0 1 0-864.6656 0Z" fill="#B688FF" p-id="28058"></path><path d="M287.4368 415.5904c-85.0432 0-160.4096 41.3696-207.104 105.0624 4.5568 182.7328 122.368 337.3056 285.952 396.032 103.2192-33.28 177.92-130.048 177.92-244.3776 0-141.7728-114.944-256.7168-256.768-256.7168z" fill="#C3A4FF" p-id="28059"></path><path d="M639.8976 358.7584c21.504 0 36.4032-21.7088 28.3648-41.6768-16.5888-41.216-56.9856-70.4-104.0384-70.4H460.544c-61.9008 0-112.0768 50.176-112.0768 112.0768v64.0512h61.44V358.7584c0-27.9552 22.6816-50.6368 50.6368-50.6368h103.68c20.9408 0 38.9632 12.8 46.6432 30.976 4.9664 11.6736 15.8208 19.712 28.5184 19.712h0.512z" fill="#D7C7FF" p-id="28060"></path><path d="M670.0032 395.2128H354.7648c-48.9472 0-88.6272 39.68-88.6272 88.6272v186.0608c0 48.9472 39.68 88.6272 88.6272 88.6272h315.2384c48.9472 0 88.6272-39.68 88.6272-88.6272V483.84c0-48.9472-39.68-88.6272-88.6272-88.6272z m-130.1504 188.2112v64.512a27.4432 27.4432 0 0 1-54.8864 0v-64.512a55.31648 55.31648 0 0 1-27.9552-48.0768c0-30.6176 24.7808-55.3984 55.3984-55.3984s55.3984 24.7808 55.3984 55.3984c0 20.6336-11.264 38.5536-27.9552 48.0768z" fill="#FFFFFF" p-id="28061"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,7 +1,7 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="1024" node-id="1" sillyvg="true" template-height="1024" template-width="1024" version="1.1" <svg height="64" node-id="1" sillyvg="true" template-height="64" template-width="64" version="1.1"
viewBox="0 0 1024 1024" width="1024" xmlns="http://www.w3.org/2000/svg"> viewBox="0 0 1024 1024" width="64" xmlns="http://www.w3.org/2000/svg">
<defs node-id="53"> <defs node-id="53">
<linearGradient gradientUnits="objectBoundingBox" id="linearGradient-3" node-id="6" spreadMethod="pad" x1="0" <linearGradient gradientUnits="objectBoundingBox" id="linearGradient-3" node-id="6" spreadMethod="pad" x1="0"
x2="0.5" y1="-0.11715827" y2="0.75683814"> x2="0.5" y1="-0.11715827" y2="0.75683814">

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702562737910" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="25002" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M0.853333 129.706667c0-28.16 22.186667-51.2 49.493334-51.2h336.213333c19.626667 0 37.546667 11.946667 45.226667 30.72l23.893333 58.88h438.613333c12.8 0 25.6 5.12 34.133334 15.36 9.386667 9.386667 14.506667 22.186667 14.506666 35.84v674.133333c0 13.653333-5.12 26.453333-14.506666 35.84s-21.333333 15.36-34.133334 15.36H50.346667c-12.8 0-25.6-5.12-34.133334-15.36-9.386667-9.386667-14.506667-23.04-14.506666-35.84-0.853333 0.853333-0.853333-763.733333-0.853334-763.733333z" fill="#FFA000" p-id="25003"></path><path d="M95.573333 213.333333h750.933334c34.133333 0 52.053333 17.92 52.053333 52.906667v477.866667c0 35.84-17.066667 52.906667-52.053333 52.906666h-750.933334c-34.133333 0-52.053333-17.92-52.053333-52.906666v-477.866667c0-35.84 17.92-52.906667 52.053333-52.906667z" fill="#FFFFFF" p-id="25004"></path><path d="M131.413333 293.546667h750.933334c34.133333 0 49.493333 17.066667 44.373333 51.2l-66.56 459.946666c-5.12 34.133333-24.746667 51.2-59.733333 51.2h-733.866667c-34.133333 0-49.493333-17.066667-44.373333-51.2l49.493333-459.946666c5.12-34.986667 25.6-51.2 59.733333-51.2z" fill="#EFC99A" opacity=".9" p-id="25005"></path><path d="M139.946667 315.733333h750.933333c34.133333 0 49.493333 17.066667 44.373333 51.2l-66.56 459.946667c-5.12 34.133333-24.746667 51.2-59.733333 51.2h-742.4c-34.133333 0-49.493333-17.066667-44.373333-51.2L80.213333 366.933333c5.12-34.986667 25.6-51.2 59.733334-51.2z" fill="#FFFFFF" p-id="25006"></path><path d="M131.413333 448.853333h843.946667c32.426667 0 49.493333 11.093333 49.493333 34.133334l-81.92 427.52c0 22.186667-16.213333 34.133333-49.493333 34.133333H49.493333c-32.426667 0-49.493333-11.093333-49.493333-34.133333l81.92-427.52c0-23.04 16.213333-34.133333 49.493333-34.133334z" fill="#FFCA28" p-id="25007"></path></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702562909327" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="27021" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M942.08 1024H81.92A81.92 81.92 0 0 1 0 942.08V81.92A81.92 81.92 0 0 1 81.92 0h860.16A81.92 81.92 0 0 1 1024 81.92v860.16A81.92 81.92 0 0 1 942.08 1024zM81.92 68.498286a13.421714 13.421714 0 0 0-13.458286 13.421714v860.16c0 7.424 6.034286 13.421714 13.458286 13.421714h860.16a13.458286 13.458286 0 0 0 13.421714-13.421714V81.92a13.458286 13.458286 0 0 0-13.421714-13.421714H81.92z" fill="#C50935" p-id="27022"></path><path d="M452.388571 607.085714c-2.194286-22.820571-1.097143-42.24 3.291429-58.258285 4.388571-16.018286 10.386286-29.842286 18.066286-41.472 7.68-11.629714 16.457143-21.723429 26.331428-30.281143 9.874286-8.557714 19.090286-16.822857 27.648-24.685715a137.874286 137.874286 0 0 0 21.394286-24.685714c5.705143-8.557714 8.557714-18.761143 8.557714-30.610286 0-15.36-4.278857-27.648-12.8-36.864-8.594286-9.216-23.844571-13.824-45.787428-13.824-7.021714 0-14.482286 0.731429-22.381715 2.304a159.195429 159.195429 0 0 0-23.698285 6.582858 191.707429 191.707429 0 0 0-42.130286 21.394285l-32.914286-63.195428c16.676571-11.410286 35.876571-20.845714 57.6-28.306286 21.723429-7.460571 47.945143-11.190857 78.665143-11.190857 41.252571 0 73.508571 9.984 96.768 29.952 23.259429 19.968 34.889143 46.811429 34.889143 80.64 0 22.381714-2.925714 40.923429-8.886857 55.588571a135.497143 135.497143 0 0 1-22.052572 37.558857c-8.777143 10.313143-18.432 19.382857-28.964571 27.318858a249.490286 249.490286 0 0 0-28.964571 25.344c-8.777143 8.996571-16.237714 19.382857-22.381715 31.268571-6.144 11.849143-9.216 26.989714-9.216 45.421714H452.388571z m-13.165714 93.476572c0-15.36 4.790857-27.538286 14.445714-36.571429 9.654857-8.96 22.381714-13.458286 38.180572-13.458286 16.676571 0 29.842286 4.498286 39.497143 13.494858 9.654857 8.996571 14.482286 21.174857 14.482285 36.534857 0 15.36-4.827429 27.648-14.482285 36.864s-22.820571 13.824-39.497143 13.824c-15.798857 0-28.525714-4.608-38.180572-13.824s-14.482286-21.504-14.482285-36.864z" fill="#5584FF" p-id="27023"></path></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702562226298" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12795" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M384 128V16h-128v112" fill="#D73636" p-id="12796"></path><path d="M336 128V16h-80v112" fill="#F73B2F" p-id="12797"></path><path d="M48 416v528h928V416" fill="#FFE183" p-id="12798"></path><path d="M976 416v528h-64V480H48v-64h928z" fill="#D9BF6F" p-id="12799"></path><path d="M577.408 352H16v64h488.288" fill="#F73B2F" p-id="12800"></path><path d="M833.232 416H1008v-64H768.784" fill="#F73B2F" p-id="12801"></path><path d="M368 656a96.048 96.048 0 0 0-28.112-67.888A96 96 0 0 0 176 656v96h192v-96z" fill="#FFFFFF" p-id="12802"></path><path d="M320 592h32v160h-32z" fill="#D9D9D9" p-id="12803"></path><path d="M256 352v64c0 12.736-5.056 24.944-14.064 33.936a47.936 47.936 0 0 1-67.872 0A47.936 47.936 0 0 1 160 416v-64H32L128 128h18.736a48.032 48.032 0 0 1 90.528 0h201.408A80.048 80.048 0 0 1 512 80a80.048 80.048 0 0 1 72.32 45.792A63.712 63.712 0 0 1 624 112c16.208 0 31.024 6.048 42.32 16h49.824A71.92 71.92 0 0 1 776 96c24.944 0 46.944 12.704 59.856 32H896l96 224H400v56a40 40 0 1 1-80 0V352h-64z" fill="#CBE9EA" p-id="12804"></path><path d="M896 128l96 224H416c324.768 19.904 531.216-28.112 480-224z" fill="#ADC6C7" p-id="12805"></path><path d="M496 528l176-176 176 176v352H496V528" fill="#FFD140" p-id="12806"></path><path d="M464 880h416v64H464z" fill="#5AB947" p-id="12807"></path><path d="M768 656a96.048 96.048 0 0 0-28.112-67.888 96.048 96.048 0 0 0-135.776 0A96.048 96.048 0 0 0 576 656v224h192V656z" fill="#D73636" p-id="12808"></path><path d="M648 563.44a92.4 92.4 0 0 1 43.888 24.672A96.048 96.048 0 0 1 720 656v224h-144V656c0-25.456 10.112-49.872 28.112-67.888a92.4 92.4 0 0 1 43.888-24.672z" fill="#F73B2F" p-id="12809"></path><path d="M496 528v64l176-176 144 144v320h32V512L672 352 496 528z" fill="#D9B236" p-id="12810"></path><path d="M640 720m-16 0a16 16 0 1 0 32 0 16 16 0 1 0-32 0Z" fill="#F73B2F" p-id="12811"></path><path d="M672.064 261.584v-0.016l242.624 234.688a32 32 0 0 1 0.768 45.232l-0.016 0.016a32 32 0 0 1-45.248 0.784L672.064 350.96 474.496 541.744a31.936 31.936 0 0 1-45.248-0.8l-0.016-0.016a32 32 0 0 1 0.768-45.232l242.064-234.112z" fill="#F73B2F" p-id="12812"></path><path d="M40.32 960.784A104.064 104.064 0 0 1 136 816a103.68 103.68 0 0 1 71.6 28.592 79.584 79.584 0 0 0 71.312 20.864A108.944 108.944 0 0 1 296 864c48.576 0 88 39.424 88 88" fill="#CBE9EA" p-id="12813"></path><path d="M16 944h992v64H16z" fill="#5AB947" p-id="12814"></path></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -1,9 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702562413637" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="21315" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M781.28 425.28v377.12H290.4V445.12c0-10.88 10.88-19.68 24.32-19.68h466.56z" fill="#B3C8FE" p-id="21316"></path><path d="M561.44 361.76h171.2v185.76h48.64V337.44c0-13.44-10.88-24.32-24.32-24.32H533.92l-78.4-88.32c-4.64-5.28-11.2-8.16-18.24-8.16H204.96c-13.44 0-24.32 10.88-24.32 24.32v537.28c0 13.44 10.88 24.32 24.32 24.32h278.08v-48.64H229.28V265.12h197.12l78.4 88.32c4.64 5.28 11.2 8.16 18.24 8.16l38.4 0.16z" fill="#5186F5" p-id="21317"></path><path d="M804.32 695.2l-77.92-77.92-34.4 34.4L728.16 688h-152.32v-95.04h-48.64v119.36c0 13.44 10.88 24.32 24.32 24.32h176.64l-36.32 36.32 34.4 34.4 77.92-77.92c9.6-9.28 9.6-24.8 0.16-34.24z" fill="#5186F5" p-id="21318"></path></svg>
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg t="1699272892992" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4188"
width="16" height="16">
<path d="M182.857143 146.285714h360.594286L768 370.834286V438.857143h146.285714V310.125714L604.16 0H36.571429v1024h877.714285v-146.285714H182.857143V146.285714z"
fill="#272536" p-id="4189"></path>
<path d="M987.428571 658.285714l-219.428571-146.285714v73.142857H475.428571v146.285714h292.571429v73.142858l219.428571-146.285715z"
fill="#272536" p-id="4190"></path>
</svg>

Before

Width:  |  Height:  |  Size: 692 B

After

Width:  |  Height:  |  Size: 1011 B

View File

@ -9,151 +9,154 @@
from PyQt5 import QtCore from PyQt5 import QtCore
qt_resource_data = b"\ qt_resource_data = b"\
\x00\x00\x08\xe8\ \x00\x00\x09\x14\
\x3c\ \x3c\
\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
\x30\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\x6e\ \x30\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\x6e\
\x6f\x22\x3f\x3e\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\x76\ \x6f\x22\x3f\x3e\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\x76\
\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\x43\ \x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\x43\
\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\x45\ \x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\x45\
\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\ \x4e\x22\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x22\x68\x74\x74\
\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\x53\ \x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\
\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\x31\ \x72\x61\x70\x68\x69\x63\x73\x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\
\x2e\x64\x74\x64\x22\x3e\x3c\x73\x76\x67\x20\x74\x3d\x22\x31\x36\ \x44\x54\x44\x2f\x73\x76\x67\x31\x31\x2e\x64\x74\x64\x22\x3e\x0d\
\x39\x38\x35\x39\x32\x30\x39\x35\x34\x39\x36\x22\x20\x63\x6c\x61\ \x0a\x3c\x73\x76\x67\x20\x74\x3d\x22\x31\x36\x39\x38\x35\x39\x32\
\x73\x73\x3d\x22\x69\x63\x6f\x6e\x22\x20\x76\x69\x65\x77\x42\x6f\ \x30\x39\x35\x34\x39\x36\x22\x20\x63\x6c\x61\x73\x73\x3d\x22\x69\
\x78\x3d\x22\x30\x20\x30\x20\x31\x30\x32\x34\x20\x31\x30\x32\x34\ \x63\x6f\x6e\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
\x22\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\ \x30\x20\x31\x30\x32\x34\x20\x31\x30\x32\x34\x22\x20\x76\x65\x72\
\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\ \x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x78\x6d\x6c\x6e\x73\
\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\ \x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\
\x67\x22\x20\x70\x2d\x69\x64\x3d\x22\x35\x32\x34\x33\x22\x20\x78\ \x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x70\x2d\
\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\ \x69\x64\x3d\x22\x35\x32\x34\x33\x22\x0d\x0a\x20\x20\x20\x20\x20\
\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\ \x77\x69\x64\x74\x68\x3d\x22\x31\x36\x22\x20\x68\x65\x69\x67\x68\
\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x77\x69\x64\x74\x68\x3d\ \x74\x3d\x22\x31\x36\x22\x3e\x0d\x0a\x20\x20\x20\x20\x3c\x70\x61\
\x22\x31\x36\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x36\x22\ \x74\x68\x20\x64\x3d\x22\x4d\x32\x31\x37\x2e\x39\x20\x33\x35\x36\
\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x31\x37\x2e\x39\ \x2e\x35\x63\x2d\x31\x34\x2e\x31\x20\x30\x2d\x32\x35\x2e\x35\x20\
\x20\x33\x35\x36\x2e\x35\x63\x2d\x31\x34\x2e\x31\x20\x30\x2d\x32\ \x31\x31\x2e\x34\x2d\x32\x35\x2e\x35\x20\x32\x35\x2e\x35\x73\x31\
\x35\x2e\x35\x20\x31\x31\x2e\x34\x2d\x32\x35\x2e\x35\x20\x32\x35\ \x31\x2e\x34\x20\x32\x35\x2e\x35\x20\x32\x35\x2e\x35\x20\x32\x35\
\x2e\x35\x73\x31\x31\x2e\x34\x20\x32\x35\x2e\x35\x20\x32\x35\x2e\ \x2e\x35\x20\x32\x35\x2e\x35\x2d\x31\x31\x2e\x34\x20\x32\x35\x2e\
\x35\x20\x32\x35\x2e\x35\x20\x32\x35\x2e\x35\x2d\x31\x31\x2e\x34\ \x35\x2d\x32\x35\x2e\x35\x2d\x31\x31\x2e\x34\x2d\x32\x35\x2e\x35\
\x20\x32\x35\x2e\x35\x2d\x32\x35\x2e\x35\x2d\x31\x31\x2e\x34\x2d\ \x2d\x32\x35\x2e\x35\x2d\x32\x35\x2e\x35\x7a\x4d\x32\x31\x37\x2e\
\x32\x35\x2e\x35\x2d\x32\x35\x2e\x35\x2d\x32\x35\x2e\x35\x7a\x4d\ \x34\x20\x34\x33\x33\x2e\x37\x63\x2d\x31\x31\x2e\x32\x20\x30\x2d\
\x32\x31\x37\x2e\x34\x20\x34\x33\x33\x2e\x37\x63\x2d\x31\x31\x2e\ \x32\x30\x2e\x34\x20\x39\x2e\x32\x2d\x32\x30\x2e\x34\x20\x32\x30\
\x32\x20\x30\x2d\x32\x30\x2e\x34\x20\x39\x2e\x32\x2d\x32\x30\x2e\ \x2e\x34\x76\x31\x37\x34\x2e\x34\x63\x30\x20\x31\x31\x2e\x32\x20\
\x34\x20\x32\x30\x2e\x34\x76\x31\x37\x34\x2e\x34\x63\x30\x20\x31\ \x39\x2e\x32\x20\x32\x30\x2e\x34\x20\x32\x30\x2e\x34\x20\x32\x30\
\x31\x2e\x32\x20\x39\x2e\x32\x20\x32\x30\x2e\x34\x20\x32\x30\x2e\ \x2e\x34\x73\x32\x30\x2e\x34\x2d\x39\x2e\x32\x20\x32\x30\x2e\x34\
\x34\x20\x32\x30\x2e\x34\x73\x32\x30\x2e\x34\x2d\x39\x2e\x32\x20\ \x2d\x32\x30\x2e\x34\x56\x34\x35\x34\x2e\x31\x63\x30\x2d\x31\x31\
\x32\x30\x2e\x34\x2d\x32\x30\x2e\x34\x56\x34\x35\x34\x2e\x31\x63\ \x2e\x32\x2d\x39\x2e\x32\x2d\x32\x30\x2e\x34\x2d\x32\x30\x2e\x34\
\x30\x2d\x31\x31\x2e\x32\x2d\x39\x2e\x32\x2d\x32\x30\x2e\x34\x2d\ \x2d\x32\x30\x2e\x34\x7a\x22\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\
\x32\x30\x2e\x34\x2d\x32\x30\x2e\x34\x7a\x22\x20\x66\x69\x6c\x6c\ \x20\x20\x20\x66\x69\x6c\x6c\x3d\x22\x23\x36\x42\x34\x30\x30\x44\
\x3d\x22\x23\x36\x42\x34\x30\x30\x44\x22\x20\x70\x2d\x69\x64\x3d\ \x22\x20\x70\x2d\x69\x64\x3d\x22\x35\x32\x34\x34\x22\x3e\x3c\x2f\
\x22\x35\x32\x34\x34\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\ \x70\x61\x74\x68\x3e\x0d\x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\
\x61\x74\x68\x20\x64\x3d\x22\x4d\x38\x37\x38\x2e\x37\x20\x33\x37\ \x20\x64\x3d\x22\x4d\x38\x37\x38\x2e\x37\x20\x33\x37\x39\x2e\x35\
\x39\x2e\x35\x76\x2d\x38\x36\x63\x30\x2d\x39\x36\x2e\x33\x2d\x35\ \x76\x2d\x38\x36\x63\x30\x2d\x39\x36\x2e\x33\x2d\x35\x37\x2e\x35\
\x37\x2e\x35\x2d\x31\x35\x33\x2e\x37\x2d\x31\x35\x33\x2e\x37\x2d\ \x2d\x31\x35\x33\x2e\x37\x2d\x31\x35\x33\x2e\x37\x2d\x31\x35\x33\
\x31\x35\x33\x2e\x37\x48\x32\x31\x38\x63\x2d\x39\x36\x2e\x33\x20\ \x2e\x37\x48\x32\x31\x38\x63\x2d\x39\x36\x2e\x33\x20\x30\x2d\x31\
\x30\x2d\x31\x35\x33\x2e\x37\x20\x35\x37\x2e\x35\x2d\x31\x35\x33\ \x35\x33\x2e\x37\x20\x35\x37\x2e\x35\x2d\x31\x35\x33\x2e\x37\x20\
\x2e\x37\x20\x31\x35\x33\x2e\x37\x76\x33\x32\x30\x2e\x37\x43\x36\ \x31\x35\x33\x2e\x37\x76\x33\x32\x30\x2e\x37\x43\x36\x34\x2e\x33\
\x34\x2e\x33\x20\x37\x31\x30\x2e\x35\x20\x31\x32\x31\x2e\x38\x20\ \x20\x37\x31\x30\x2e\x35\x20\x31\x32\x31\x2e\x38\x20\x37\x36\x38\
\x37\x36\x38\x20\x32\x31\x38\x20\x37\x36\x38\x68\x34\x35\x2e\x38\ \x20\x32\x31\x38\x20\x37\x36\x38\x68\x34\x35\x2e\x38\x76\x31\x32\
\x76\x31\x32\x30\x2e\x34\x4c\x34\x34\x39\x2e\x39\x20\x37\x36\x38\ \x30\x2e\x34\x4c\x34\x34\x39\x2e\x39\x20\x37\x36\x38\x68\x31\x31\
\x68\x31\x31\x2e\x32\x63\x31\x37\x2e\x32\x20\x31\x31\x2e\x33\x20\ \x2e\x32\x63\x31\x37\x2e\x32\x20\x31\x31\x2e\x33\x20\x33\x39\x20\
\x33\x39\x20\x31\x37\x2e\x35\x20\x36\x34\x2e\x36\x20\x31\x37\x2e\ \x31\x37\x2e\x35\x20\x36\x34\x2e\x36\x20\x31\x37\x2e\x35\x68\x31\
\x35\x68\x31\x36\x31\x2e\x36\x6c\x31\x33\x30\x2e\x37\x20\x38\x35\ \x36\x31\x2e\x36\x6c\x31\x33\x30\x2e\x37\x20\x38\x35\x76\x2d\x38\
\x76\x2d\x38\x35\x2e\x31\x68\x33\x33\x2e\x35\x63\x36\x36\x2e\x36\ \x35\x2e\x31\x68\x33\x33\x2e\x35\x63\x36\x36\x2e\x36\x20\x30\x20\
\x20\x30\x20\x31\x30\x37\x2e\x39\x2d\x34\x31\x2e\x33\x20\x31\x30\ \x31\x30\x37\x2e\x39\x2d\x34\x31\x2e\x33\x20\x31\x30\x37\x2e\x39\
\x37\x2e\x39\x2d\x31\x30\x37\x2e\x39\x56\x34\x38\x34\x2e\x38\x63\ \x2d\x31\x30\x37\x2e\x39\x56\x34\x38\x34\x2e\x38\x63\x2d\x30\x2e\
\x2d\x30\x2e\x31\x2d\x35\x36\x2e\x39\x2d\x33\x30\x2e\x33\x2d\x39\ \x31\x2d\x35\x36\x2e\x39\x2d\x33\x30\x2e\x33\x2d\x39\x35\x2e\x33\
\x35\x2e\x33\x2d\x38\x30\x2e\x37\x2d\x31\x30\x35\x2e\x33\x7a\x4d\ \x2d\x38\x30\x2e\x37\x2d\x31\x30\x35\x2e\x33\x7a\x4d\x34\x31\x37\
\x34\x31\x37\x2e\x38\x20\x34\x38\x34\x2e\x38\x76\x31\x39\x32\x2e\ \x2e\x38\x20\x34\x38\x34\x2e\x38\x76\x31\x39\x32\x2e\x38\x63\x30\
\x38\x63\x30\x20\x31\x36\x2e\x32\x20\x32\x2e\x35\x20\x33\x31\x20\ \x20\x31\x36\x2e\x32\x20\x32\x2e\x35\x20\x33\x31\x20\x37\x2e\x32\
\x37\x2e\x32\x20\x34\x34\x6c\x2d\x31\x30\x36\x2e\x31\x20\x37\x30\ \x20\x34\x34\x6c\x2d\x31\x30\x36\x2e\x31\x20\x37\x30\x2e\x31\x76\
\x2e\x31\x76\x2d\x37\x34\x2e\x39\x68\x2d\x31\x30\x31\x63\x2d\x36\ \x2d\x37\x34\x2e\x39\x68\x2d\x31\x30\x31\x63\x2d\x36\x37\x2e\x37\
\x37\x2e\x37\x2d\x30\x2e\x33\x2d\x31\x30\x32\x2e\x32\x2d\x33\x34\ \x2d\x30\x2e\x33\x2d\x31\x30\x32\x2e\x32\x2d\x33\x34\x2e\x38\x2d\
\x2e\x38\x2d\x31\x30\x32\x2e\x35\x2d\x31\x30\x32\x2e\x35\x56\x32\ \x31\x30\x32\x2e\x35\x2d\x31\x30\x32\x2e\x35\x56\x32\x39\x33\x2e\
\x39\x33\x2e\x35\x63\x30\x2e\x33\x2d\x36\x37\x2e\x37\x20\x33\x34\ \x35\x63\x30\x2e\x33\x2d\x36\x37\x2e\x37\x20\x33\x34\x2e\x38\x2d\
\x2e\x38\x2d\x31\x30\x32\x2e\x32\x20\x31\x30\x32\x2e\x35\x2d\x31\ \x31\x30\x32\x2e\x32\x20\x31\x30\x32\x2e\x35\x2d\x31\x30\x32\x2e\
\x30\x32\x2e\x35\x48\x37\x32\x35\x63\x36\x37\x2e\x37\x20\x30\x2e\ \x35\x48\x37\x32\x35\x63\x36\x37\x2e\x37\x20\x30\x2e\x33\x20\x31\
\x33\x20\x31\x30\x32\x2e\x32\x20\x33\x34\x2e\x38\x20\x31\x30\x32\ \x30\x32\x2e\x32\x20\x33\x34\x2e\x38\x20\x31\x30\x32\x2e\x35\x20\
\x2e\x35\x20\x31\x30\x32\x2e\x35\x76\x38\x33\x2e\x33\x48\x35\x32\ \x31\x30\x32\x2e\x35\x76\x38\x33\x2e\x33\x48\x35\x32\x35\x2e\x37\
\x35\x2e\x37\x63\x2d\x36\x36\x2e\x35\x20\x30\x2e\x31\x2d\x31\x30\ \x63\x2d\x36\x36\x2e\x35\x20\x30\x2e\x31\x2d\x31\x30\x37\x2e\x39\
\x37\x2e\x39\x20\x34\x31\x2e\x34\x2d\x31\x30\x37\x2e\x39\x20\x31\ \x20\x34\x31\x2e\x34\x2d\x31\x30\x37\x2e\x39\x20\x31\x30\x38\x7a\
\x30\x38\x7a\x20\x6d\x34\x39\x30\x2e\x34\x20\x31\x39\x32\x2e\x37\ \x20\x6d\x34\x39\x30\x2e\x34\x20\x31\x39\x32\x2e\x37\x63\x2d\x30\
\x63\x2d\x30\x2e\x32\x20\x33\x38\x2e\x36\x2d\x31\x38\x2e\x32\x20\ \x2e\x32\x20\x33\x38\x2e\x36\x2d\x31\x38\x2e\x32\x20\x35\x36\x2e\
\x35\x36\x2e\x36\x2d\x35\x36\x2e\x37\x20\x35\x36\x2e\x37\x68\x2d\ \x36\x2d\x35\x36\x2e\x37\x20\x35\x36\x2e\x37\x68\x2d\x38\x37\x2e\
\x38\x37\x2e\x32\x76\x34\x30\x2e\x33\x6c\x2d\x36\x31\x2d\x34\x30\ \x32\x76\x34\x30\x2e\x33\x6c\x2d\x36\x31\x2d\x34\x30\x2e\x33\x48\
\x2e\x33\x48\x35\x32\x35\x2e\x37\x63\x2d\x33\x38\x2e\x35\x2d\x30\ \x35\x32\x35\x2e\x37\x63\x2d\x33\x38\x2e\x35\x2d\x30\x2e\x32\x2d\
\x2e\x32\x2d\x35\x36\x2e\x36\x2d\x31\x38\x2e\x32\x2d\x35\x36\x2e\ \x35\x36\x2e\x36\x2d\x31\x38\x2e\x32\x2d\x35\x36\x2e\x37\x2d\x35\
\x37\x2d\x35\x36\x2e\x37\x56\x34\x38\x34\x2e\x38\x63\x30\x2e\x32\ \x36\x2e\x37\x56\x34\x38\x34\x2e\x38\x63\x30\x2e\x32\x2d\x33\x38\
\x2d\x33\x38\x2e\x36\x20\x31\x38\x2e\x32\x2d\x35\x36\x2e\x36\x20\ \x2e\x36\x20\x31\x38\x2e\x32\x2d\x35\x36\x2e\x36\x20\x35\x36\x2e\
\x35\x36\x2e\x37\x2d\x35\x36\x2e\x37\x68\x33\x32\x35\x2e\x37\x63\ \x37\x2d\x35\x36\x2e\x37\x68\x33\x32\x35\x2e\x37\x63\x33\x38\x2e\
\x33\x38\x2e\x35\x20\x30\x2e\x32\x20\x35\x36\x2e\x36\x20\x31\x38\ \x35\x20\x30\x2e\x32\x20\x35\x36\x2e\x36\x20\x31\x38\x2e\x32\x20\
\x2e\x32\x20\x35\x36\x2e\x37\x20\x35\x36\x2e\x37\x76\x31\x39\x32\ \x35\x36\x2e\x37\x20\x35\x36\x2e\x37\x76\x31\x39\x32\x2e\x37\x7a\
\x2e\x37\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x36\x42\x34\x30\ \x22\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x69\x6c\
\x30\x44\x22\x20\x70\x2d\x69\x64\x3d\x22\x35\x32\x34\x35\x22\x3e\ \x6c\x3d\x22\x23\x36\x42\x34\x30\x30\x44\x22\x20\x70\x2d\x69\x64\
\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\ \x3d\x22\x35\x32\x34\x35\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x0d\
\x4d\x38\x35\x31\x2e\x34\x20\x34\x32\x38\x2e\x31\x48\x35\x32\x35\ \x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x38\
\x2e\x37\x63\x2d\x33\x38\x2e\x35\x20\x30\x2e\x32\x2d\x35\x36\x2e\ \x35\x31\x2e\x34\x20\x34\x32\x38\x2e\x31\x48\x35\x32\x35\x2e\x37\
\x36\x20\x31\x38\x2e\x32\x2d\x35\x36\x2e\x37\x20\x35\x36\x2e\x37\ \x63\x2d\x33\x38\x2e\x35\x20\x30\x2e\x32\x2d\x35\x36\x2e\x36\x20\
\x76\x31\x39\x32\x2e\x38\x63\x30\x2e\x32\x20\x33\x38\x2e\x35\x20\ \x31\x38\x2e\x32\x2d\x35\x36\x2e\x37\x20\x35\x36\x2e\x37\x76\x31\
\x31\x38\x2e\x32\x20\x35\x36\x2e\x36\x20\x35\x36\x2e\x37\x20\x35\ \x39\x32\x2e\x38\x63\x30\x2e\x32\x20\x33\x38\x2e\x35\x20\x31\x38\
\x36\x2e\x37\x68\x31\x37\x37\x2e\x35\x6c\x36\x31\x20\x34\x30\x2e\ \x2e\x32\x20\x35\x36\x2e\x36\x20\x35\x36\x2e\x37\x20\x35\x36\x2e\
\x33\x76\x2d\x34\x30\x2e\x33\x68\x38\x37\x2e\x32\x63\x33\x38\x2e\ \x37\x68\x31\x37\x37\x2e\x35\x6c\x36\x31\x20\x34\x30\x2e\x33\x76\
\x35\x2d\x30\x2e\x32\x20\x35\x36\x2e\x36\x2d\x31\x38\x2e\x32\x20\ \x2d\x34\x30\x2e\x33\x68\x38\x37\x2e\x32\x63\x33\x38\x2e\x35\x2d\
\x35\x36\x2e\x37\x2d\x35\x36\x2e\x37\x56\x34\x38\x34\x2e\x38\x63\ \x30\x2e\x32\x20\x35\x36\x2e\x36\x2d\x31\x38\x2e\x32\x20\x35\x36\
\x2d\x30\x2e\x31\x2d\x33\x38\x2e\x36\x2d\x31\x38\x2e\x31\x2d\x35\ \x2e\x37\x2d\x35\x36\x2e\x37\x56\x34\x38\x34\x2e\x38\x63\x2d\x30\
\x36\x2e\x36\x2d\x35\x36\x2e\x37\x2d\x35\x36\x2e\x37\x7a\x4d\x35\ \x2e\x31\x2d\x33\x38\x2e\x36\x2d\x31\x38\x2e\x31\x2d\x35\x36\x2e\
\x36\x37\x20\x36\x32\x37\x2e\x34\x63\x2d\x32\x31\x2e\x31\x20\x30\ \x36\x2d\x35\x36\x2e\x37\x2d\x35\x36\x2e\x37\x7a\x4d\x35\x36\x37\
\x2d\x33\x38\x2e\x33\x2d\x31\x37\x2e\x32\x2d\x33\x38\x2e\x33\x2d\ \x20\x36\x32\x37\x2e\x34\x63\x2d\x32\x31\x2e\x31\x20\x30\x2d\x33\
\x33\x38\x2e\x33\x20\x30\x2d\x32\x31\x2e\x31\x20\x31\x37\x2e\x32\
\x2d\x33\x38\x2e\x33\x20\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\x20\
\x32\x31\x2e\x31\x20\x30\x20\x33\x38\x2e\x33\x20\x31\x37\x2e\x32\
\x20\x33\x38\x2e\x33\x20\x33\x38\x2e\x33\x20\x30\x20\x32\x31\x2e\
\x31\x2d\x31\x37\x2e\x32\x20\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\
\x20\x33\x38\x2e\x33\x7a\x20\x6d\x31\x32\x32\x2e\x32\x20\x30\x63\
\x2d\x32\x31\x2e\x31\x20\x30\x2d\x33\x38\x2e\x33\x2d\x31\x37\x2e\
\x32\x2d\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\x20\x30\x2d\x32\x31\
\x2e\x31\x20\x31\x37\x2e\x32\x2d\x33\x38\x2e\x33\x20\x33\x38\x2e\
\x33\x2d\x33\x38\x2e\x33\x20\x32\x31\x2e\x31\x20\x30\x20\x33\x38\
\x2e\x33\x20\x31\x37\x2e\x32\x20\x33\x38\x2e\x33\x20\x33\x38\x2e\
\x33\x20\x30\x20\x32\x31\x2e\x31\x2d\x31\x37\x2e\x32\x20\x33\x38\
\x2e\x33\x2d\x33\x38\x2e\x33\x20\x33\x38\x2e\x33\x7a\x20\x6d\x31\
\x32\x32\x2e\x33\x20\x30\x63\x2d\x32\x31\x2e\x31\x20\x30\x2d\x33\
\x38\x2e\x33\x2d\x31\x37\x2e\x32\x2d\x33\x38\x2e\x33\x2d\x33\x38\ \x38\x2e\x33\x2d\x31\x37\x2e\x32\x2d\x33\x38\x2e\x33\x2d\x33\x38\
\x2e\x33\x20\x30\x2d\x32\x31\x2e\x31\x20\x31\x37\x2e\x32\x2d\x33\ \x2e\x33\x20\x30\x2d\x32\x31\x2e\x31\x20\x31\x37\x2e\x32\x2d\x33\
\x38\x2e\x33\x20\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\x20\x32\x31\ \x38\x2e\x33\x20\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\x20\x32\x31\
\x2e\x31\x20\x30\x20\x33\x38\x2e\x33\x20\x31\x37\x2e\x32\x20\x33\ \x2e\x31\x20\x30\x20\x33\x38\x2e\x33\x20\x31\x37\x2e\x32\x20\x33\
\x38\x2e\x33\x20\x33\x38\x2e\x33\x20\x30\x20\x32\x31\x2e\x31\x2d\ \x38\x2e\x33\x20\x33\x38\x2e\x33\x20\x30\x20\x32\x31\x2e\x31\x2d\
\x31\x37\x2e\x32\x20\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\x20\x33\ \x31\x37\x2e\x32\x20\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\x20\x33\
\x38\x2e\x33\x7a\x22\x20\x66\x69\x6c\x6c\x3d\x22\x23\x46\x46\x44\ \x38\x2e\x33\x7a\x20\x6d\x31\x32\x32\x2e\x32\x20\x30\x63\x2d\x32\
\x35\x32\x34\x22\x20\x70\x2d\x69\x64\x3d\x22\x35\x32\x34\x36\x22\ \x31\x2e\x31\x20\x30\x2d\x33\x38\x2e\x33\x2d\x31\x37\x2e\x32\x2d\
\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x3c\x70\x61\x74\x68\x20\x64\x3d\ \x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\x20\x30\x2d\x32\x31\x2e\x31\
\x22\x4d\x35\x36\x37\x20\x35\x35\x30\x2e\x38\x63\x2d\x32\x31\x2e\ \x20\x31\x37\x2e\x32\x2d\x33\x38\x2e\x33\x20\x33\x38\x2e\x33\x2d\
\x31\x20\x30\x2d\x33\x38\x2e\x33\x20\x31\x37\x2e\x32\x2d\x33\x38\ \x33\x38\x2e\x33\x20\x32\x31\x2e\x31\x20\x30\x20\x33\x38\x2e\x33\
\x2e\x33\x20\x33\x38\x2e\x33\x20\x30\x20\x32\x31\x2e\x31\x20\x31\ \x20\x31\x37\x2e\x32\x20\x33\x38\x2e\x33\x20\x33\x38\x2e\x33\x20\
\x37\x2e\x32\x20\x33\x38\x2e\x33\x20\x33\x38\x2e\x33\x20\x33\x38\ \x30\x20\x32\x31\x2e\x31\x2d\x31\x37\x2e\x32\x20\x33\x38\x2e\x33\
\x2e\x33\x20\x32\x31\x2e\x31\x20\x30\x20\x33\x38\x2e\x33\x2d\x31\ \x2d\x33\x38\x2e\x33\x20\x33\x38\x2e\x33\x7a\x20\x6d\x31\x32\x32\
\x37\x2e\x32\x20\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\x20\x30\x2d\ \x2e\x33\x20\x30\x63\x2d\x32\x31\x2e\x31\x20\x30\x2d\x33\x38\x2e\
\x32\x31\x2e\x31\x2d\x31\x37\x2e\x32\x2d\x33\x38\x2e\x33\x2d\x33\ \x33\x2d\x31\x37\x2e\x32\x2d\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\
\x38\x2e\x33\x2d\x33\x38\x2e\x33\x7a\x4d\x36\x38\x39\x2e\x32\x20\ \x20\x30\x2d\x32\x31\x2e\x31\x20\x31\x37\x2e\x32\x2d\x33\x38\x2e\
\x35\x35\x30\x2e\x38\x63\x2d\x32\x31\x2e\x31\x20\x30\x2d\x33\x38\ \x33\x20\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\x20\x32\x31\x2e\x31\
\x2e\x33\x20\x31\x37\x2e\x32\x2d\x33\x38\x2e\x33\x20\x33\x38\x2e\ \x20\x30\x20\x33\x38\x2e\x33\x20\x31\x37\x2e\x32\x20\x33\x38\x2e\
\x33\x20\x30\x20\x32\x31\x2e\x31\x20\x31\x37\x2e\x32\x20\x33\x38\ \x33\x20\x33\x38\x2e\x33\x20\x30\x20\x32\x31\x2e\x31\x2d\x31\x37\
\x2e\x33\x20\x33\x38\x2e\x33\x20\x33\x38\x2e\x33\x20\x32\x31\x2e\ \x2e\x32\x20\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\x20\x33\x38\x2e\
\x31\x20\x30\x20\x33\x38\x2e\x33\x2d\x31\x37\x2e\x32\x20\x33\x38\ \x33\x7a\x22\x0d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\
\x2e\x33\x2d\x33\x38\x2e\x33\x20\x30\x2d\x32\x31\x2e\x31\x2d\x31\ \x69\x6c\x6c\x3d\x22\x23\x46\x46\x44\x35\x32\x34\x22\x20\x70\x2d\
\x37\x2e\x32\x2d\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\x2d\x33\x38\ \x69\x64\x3d\x22\x35\x32\x34\x36\x22\x3e\x3c\x2f\x70\x61\x74\x68\
\x2e\x33\x7a\x4d\x38\x31\x31\x2e\x35\x20\x35\x35\x30\x2e\x38\x63\ \x3e\x0d\x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
\x2d\x32\x31\x2e\x31\x20\x30\x2d\x33\x38\x2e\x33\x20\x31\x37\x2e\ \x4d\x35\x36\x37\x20\x35\x35\x30\x2e\x38\x63\x2d\x32\x31\x2e\x31\
\x32\x2d\x33\x38\x2e\x33\x20\x33\x38\x2e\x33\x20\x30\x20\x32\x31\ \x20\x30\x2d\x33\x38\x2e\x33\x20\x31\x37\x2e\x32\x2d\x33\x38\x2e\
\x2e\x31\x20\x31\x37\x2e\x32\x20\x33\x38\x2e\x33\x20\x33\x38\x2e\ \x33\x20\x33\x38\x2e\x33\x20\x30\x20\x32\x31\x2e\x31\x20\x31\x37\
\x33\x20\x33\x38\x2e\x33\x20\x32\x31\x2e\x31\x20\x30\x20\x33\x38\ \x2e\x32\x20\x33\x38\x2e\x33\x20\x33\x38\x2e\x33\x20\x33\x38\x2e\
\x2e\x33\x2d\x31\x37\x2e\x32\x20\x33\x38\x2e\x33\x2d\x33\x38\x2e\ \x33\x20\x32\x31\x2e\x31\x20\x30\x20\x33\x38\x2e\x33\x2d\x31\x37\
\x33\x20\x30\x2d\x32\x31\x2e\x31\x2d\x31\x37\x2e\x32\x2d\x33\x38\ \x2e\x32\x20\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\x20\x30\x2d\x32\
\x2e\x33\x2d\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\x7a\x22\x20\x66\ \x31\x2e\x31\x2d\x31\x37\x2e\x32\x2d\x33\x38\x2e\x33\x2d\x33\x38\
\x69\x6c\x6c\x3d\x22\x23\x36\x42\x34\x30\x30\x44\x22\x20\x70\x2d\ \x2e\x33\x2d\x33\x38\x2e\x33\x7a\x4d\x36\x38\x39\x2e\x32\x20\x35\
\x69\x64\x3d\x22\x35\x32\x34\x37\x22\x3e\x3c\x2f\x70\x61\x74\x68\ \x35\x30\x2e\x38\x63\x2d\x32\x31\x2e\x31\x20\x30\x2d\x33\x38\x2e\
\x3e\x3c\x2f\x73\x76\x67\x3e\ \x33\x20\x31\x37\x2e\x32\x2d\x33\x38\x2e\x33\x20\x33\x38\x2e\x33\
\x20\x30\x20\x32\x31\x2e\x31\x20\x31\x37\x2e\x32\x20\x33\x38\x2e\
\x33\x20\x33\x38\x2e\x33\x20\x33\x38\x2e\x33\x20\x32\x31\x2e\x31\
\x20\x30\x20\x33\x38\x2e\x33\x2d\x31\x37\x2e\x32\x20\x33\x38\x2e\
\x33\x2d\x33\x38\x2e\x33\x20\x30\x2d\x32\x31\x2e\x31\x2d\x31\x37\
\x2e\x32\x2d\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\x2d\x33\x38\x2e\
\x33\x7a\x4d\x38\x31\x31\x2e\x35\x20\x35\x35\x30\x2e\x38\x63\x2d\
\x32\x31\x2e\x31\x20\x30\x2d\x33\x38\x2e\x33\x20\x31\x37\x2e\x32\
\x2d\x33\x38\x2e\x33\x20\x33\x38\x2e\x33\x20\x30\x20\x32\x31\x2e\
\x31\x20\x31\x37\x2e\x32\x20\x33\x38\x2e\x33\x20\x33\x38\x2e\x33\
\x20\x33\x38\x2e\x33\x20\x32\x31\x2e\x31\x20\x30\x20\x33\x38\x2e\
\x33\x2d\x31\x37\x2e\x32\x20\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\
\x20\x30\x2d\x32\x31\x2e\x31\x2d\x31\x37\x2e\x32\x2d\x33\x38\x2e\
\x33\x2d\x33\x38\x2e\x33\x2d\x33\x38\x2e\x33\x7a\x22\x0d\x0a\x20\
\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x69\x6c\x6c\x3d\x22\x23\
\x36\x42\x34\x30\x30\x44\x22\x20\x70\x2d\x69\x64\x3d\x22\x35\x32\
\x34\x37\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x0d\x0a\x3c\x2f\x73\
\x76\x67\x3e\
" "
qt_resource_name = b"\ qt_resource_name = b"\
@ -179,7 +182,7 @@ qt_resource_struct_v2 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
\x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ \x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
\x00\x00\x01\x8b\x7b\xfa\x85\xc4\ \x00\x00\x01\x8c\x16\x33\xc3\xa6\
" "
qt_version = [int(v) for v in QtCore.qVersion().split('.')] qt_version = [int(v) for v in QtCore.qVersion().split('.')]
@ -190,13 +193,10 @@ else:
rcc_version = 2 rcc_version = 2
qt_resource_struct = qt_resource_struct_v2 qt_resource_struct = qt_resource_struct_v2
def qInitResources(): def qInitResources():
QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
def qCleanupResources(): def qCleanupResources():
QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
qInitResources() qInitResources()

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702562784487" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="26032" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32"><path d="M380.677 176.279l390.182 225.272c85.024 49.089 85.024 171.81 0 220.899L380.677 847.721c-85.024 49.089-191.304-12.272-191.304-110.449V286.728c0-98.177 106.28-159.538 191.304-110.449z" fill="#FF7B15" p-id="26033"></path></svg>

After

Width:  |  Height:  |  Size: 556 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702562083657" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5392" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M0 0m0 0l1024 0q0 0 0 0l0 1024q0 0 0 0l-1024 0q0 0 0 0l0-1024q0 0 0 0Z" fill="#E8EFF8" p-id="5393"></path><path d="M141.637818 405.643636A23.272727 23.272727 0 0 0 160.814545 442.181818h350.487273a23.272727 23.272727 0 0 0 18.455273-37.469091L364.683636 190.161455a46.545455 46.545455 0 0 0-75.170909 1.88509l-147.874909 213.620364z" fill="#69CB91" p-id="5394"></path><path d="M337.454545 884.363636a174.545455 174.545455 0 1 0 0-349.090909 174.545455 174.545455 0 0 0 0 349.090909z" fill="#247ADE" p-id="5395"></path><path d="M907.636364 186.181818a23.272727 23.272727 0 0 0-23.272728-23.272727h-209.454545a23.272727 23.272727 0 0 0-23.272727 23.272727v674.909091a23.272727 23.272727 0 0 0 23.272727 23.272727h209.454545a23.272727 23.272727 0 0 0 23.272728-23.272727V186.181818z" fill="#A0BFF7" p-id="5396"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702554736273" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4304" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M661.944889 73.144889H146.289778a36.679111 36.679111 0 0 0-36.579556 36.565333v804.579556a36.679111 36.679111 0 0 0 36.579556 36.565333h731.420444a36.679111 36.679111 0 0 0 36.579556-36.565333v-588.8L661.944889 73.144889z" fill="#FCCC5A" p-id="4305"></path><path d="M661.944889 288.910222a36.679111 36.679111 0 0 0 36.565333 36.579556h215.779556L661.944889 73.144889v215.765333z" fill="#FFD980" p-id="4306"></path><path d="M347.434667 420.565333V486.4h118.855111v288.910222h91.420444V486.4h118.855111v-65.834667z" fill="#FFFFFF" p-id="4307"></path></svg>

After

Width:  |  Height:  |  Size: 885 B

View File

@ -23,6 +23,10 @@
<file>icons/home.svg</file> <file>icons/home.svg</file>
<file>icons/help.svg</file> <file>icons/help.svg</file>
<file>icons/txt.svg</file> <file>icons/txt.svg</file>
<file>icons/get_wx_info.svg</file>
<file>icons/folder.svg</file>
<file>icons/start.svg</file>
<file>icons/decrypt.svg</file>
</qresource> </qresource>
<qresource prefix="/data"> <qresource prefix="/data">
<file>version_list.json</file> <file>version_list.json</file>

File diff suppressed because it is too large Load Diff

View File

@ -26,3 +26,7 @@ class Icon:
Tool_Icon = QIcon(':/icons/icons/tool.svg') Tool_Icon = QIcon(':/icons/icons/tool.svg')
Home_Icon = QIcon(':/icons/icons/home.svg') Home_Icon = QIcon(':/icons/icons/home.svg')
Help_Icon = QIcon(':/icons/icons/help.svg') Help_Icon = QIcon(':/icons/icons/help.svg')
Get_info_Icon = QIcon(':/icons/icons/get_wx_info.svg')
Folder_Icon = QIcon(':/icons/icons/folder.svg')
Start_Icon = QIcon(':/icons/icons/start.svg')
Decrypt_Icon = QIcon(':/icons/icons/decrypt.svg')

View File

@ -2,7 +2,7 @@ from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QWidget, QMessageBox, QAction, QLineEdit from PyQt5.QtWidgets import QWidget, QMessageBox, QAction, QLineEdit
from app.DataBase import micro_msg_db, misc_db, msg_db from app.DataBase import micro_msg_db, misc_db, msg_db
from app.components import ContactQListWidgetItem from app.components import ContactQListWidgetItem, ScrollBar
from app.person import ContactPC from app.person import ContactPC
from app.ui.Icon import Icon from app.ui.Icon import Icon
from app.util import search from app.util import search
@ -16,7 +16,6 @@ Stylesheet = """
QListWidget, QListView, QTreeWidget, QTreeView { QListWidget, QListView, QTreeWidget, QTreeView {
outline: 0px; outline: 0px;
border:none; border:none;
background-color:rgb(240,240,240)
} }
/*设置左侧选项的最小最大宽度,文字颜色和背景颜色*/ /*设置左侧选项的最小最大宽度,文字颜色和背景颜色*/
QListWidget { QListWidget {
@ -33,16 +32,11 @@ QListWidget::item{
} }
/*被选中时的背景颜色和左边框颜色*/ /*被选中时的背景颜色和左边框颜色*/
QListWidget::item:selected { QListWidget::item:selected {
background: rgb(204, 204, 204); background: rgb(230, 235, 240);
border-bottom: 2px solid rgb(9, 187, 7);
border-left:none; border-left:none;
color: black; color: black;
font-weight: bold; font-weight: bold;
} }
/*鼠标悬停颜色*/
HistoryPanel::item:hover {
background: rgb(52, 52, 52);
}
""" """
@ -59,6 +53,7 @@ class ChatWindow(QWidget, Ui_Form):
self.init_ui() self.init_ui()
self.show_chats() self.show_chats()
self.visited = set() self.visited = set()
self.now_index = 0
def init_ui(self): def init_ui(self):
search_action = QAction(self.lineEdit) search_action = QAction(self.lineEdit)
@ -66,6 +61,7 @@ class ChatWindow(QWidget, Ui_Form):
self.lineEdit.addAction(search_action, QLineEdit.LeadingPosition) self.lineEdit.addAction(search_action, QLineEdit.LeadingPosition)
self.lineEdit.returnPressed.connect(self.search_contact) self.lineEdit.returnPressed.connect(self.search_contact)
self.listWidget.clear() self.listWidget.clear()
self.listWidget.setVerticalScrollBar(ScrollBar())
self.listWidget.currentRowChanged.connect(self.setCurrentIndex) self.listWidget.currentRowChanged.connect(self.setCurrentIndex)
self.listWidget.setCurrentRow(0) self.listWidget.setCurrentRow(0)
self.stackedWidget.setCurrentIndex(0) self.stackedWidget.setCurrentIndex(0)
@ -113,7 +109,12 @@ class ChatWindow(QWidget, Ui_Form):
def setCurrentIndex(self, row): def setCurrentIndex(self, row):
# print(row) # print(row)
item = self.listWidget.item(self.now_index)
item.dis_select()
self.stackedWidget.setCurrentIndex(row) self.stackedWidget.setCurrentIndex(row)
item = self.listWidget.item(row)
item.select()
self.now_index = row
if row not in self.visited: if row not in self.visited:
chat_info_window = self.stackedWidget.currentWidget() chat_info_window = self.stackedWidget.currentWidget()
chat_info_window.update_history_messages() chat_info_window.update_history_messages()

View File

@ -2,7 +2,7 @@ from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QWidget, QMessageBox, QAction, QLineEdit from PyQt5.QtWidgets import QWidget, QMessageBox, QAction, QLineEdit
from app.DataBase import micro_msg_db, misc_db from app.DataBase import micro_msg_db, misc_db
from app.components import ContactQListWidgetItem from app.components import ContactQListWidgetItem, ScrollBar
from app.person import ContactPC from app.person import ContactPC
from app.ui.Icon import Icon from app.ui.Icon import Icon
from .contactInfo import ContactInfo from .contactInfo import ContactInfo
@ -21,7 +21,6 @@ QPushButton:hover {
QListWidget, QListView, QTreeWidget, QTreeView { QListWidget, QListView, QTreeWidget, QTreeView {
outline: 0px; outline: 0px;
border:none; border:none;
background-color:rgb(240,240,240)
} }
/*设置左侧选项的最小最大宽度,文字颜色和背景颜色*/ /*设置左侧选项的最小最大宽度,文字颜色和背景颜色*/
QListWidget { QListWidget {
@ -38,8 +37,7 @@ QListWidget::item{
} }
/*被选中时的背景颜色和左边框颜色*/ /*被选中时的背景颜色和左边框颜色*/
QListWidget::item:selected { QListWidget::item:selected {
background: rgb(204, 204, 204); background: rgb(230, 235, 240);
border-bottom: 2px solid rgb(9, 187, 7);
border-left:none; border-left:none;
color: black; color: black;
font-weight: bold; font-weight: bold;
@ -56,6 +54,7 @@ class ContactWindow(QWidget, Ui_Form):
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
self.now_index = 0
self.show_thread = None self.show_thread = None
self.setupUi(self) self.setupUi(self)
self.ok_flag = False self.ok_flag = False
@ -70,6 +69,7 @@ class ContactWindow(QWidget, Ui_Form):
self.lineEdit.addAction(search_action, QLineEdit.LeadingPosition) self.lineEdit.addAction(search_action, QLineEdit.LeadingPosition)
self.lineEdit.returnPressed.connect(self.search_contact) self.lineEdit.returnPressed.connect(self.search_contact)
self.listWidget.clear() self.listWidget.clear()
self.listWidget.setVerticalScrollBar(ScrollBar())
self.listWidget.currentRowChanged.connect(self.setCurrentIndex) self.listWidget.currentRowChanged.connect(self.setCurrentIndex)
self.listWidget.setCurrentRow(0) self.listWidget.setCurrentRow(0)
self.stackedWidget.setCurrentIndex(0) self.stackedWidget.setCurrentIndex(0)
@ -111,6 +111,12 @@ class ContactWindow(QWidget, Ui_Form):
def setCurrentIndex(self, row): def setCurrentIndex(self, row):
# print(row) # print(row)
item = self.listWidget.item(self.now_index)
item.dis_select()
self.stackedWidget.setCurrentIndex(row)
item = self.listWidget.item(row)
item.select()
self.now_index = row
self.stackedWidget.setCurrentIndex(row) self.stackedWidget.setCurrentIndex(row)

View File

@ -26,7 +26,9 @@ from ..person import MePC
# 美化样式表 # 美化样式表
Stylesheet = """ Stylesheet = """
QWidget{
background: rgb(238,244,249);
}
/*去掉item虚线边框*/ /*去掉item虚线边框*/
QListWidget, QListView, QTreeWidget, QTreeView { QListWidget, QListView, QTreeWidget, QTreeView {
outline: 0px; outline: 0px;
@ -36,16 +38,18 @@ QListWidget {
min-width: 120px; min-width: 120px;
max-width: 120px; max-width: 120px;
color: black; color: black;
background: white;
border:none; border:none;
} }
QListWidget::item{ QListWidget::item{
height:60; height:60;
} }
QListWidget::item:hover {
background: rgb(230, 235, 240);
}
/*被选中时的背景颜色和左边框颜色*/ /*被选中时的背景颜色和左边框颜色*/
QListWidget::item:selected { QListWidget::item:selected {
background: rgb(204, 204, 204); background: rgb(230, 235, 240);
border-left: 4px solid rgb(9, 187, 7); border-left: 3px solid rgb(62, 62, 62);
color: black; color: black;
font-weight: bold; font-weight: bold;
} }
@ -155,7 +159,10 @@ class MainWinController(QMainWindow, mainwindow.Ui_MainWindow):
self.avatar = QPixmap() self.avatar = QPixmap()
try: try:
img_bytes = misc_db.get_avatar_buffer(wxid) img_bytes = misc_db.get_avatar_buffer(wxid)
except AttributeError: except :
QMessageBox.critical(self, "数据库错误", "请重启微信后重试")
import shutil
shutil.rmtree('./app/Database/Msg')
return return
if not img_bytes: if not img_bytes:
return return

View File

@ -44,15 +44,16 @@ class Ui_MainWindow(object):
self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget") self.centralwidget.setObjectName("centralwidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setContentsMargins(10, 0, 0, 0)
self.horizontalLayout.setSpacing(0) self.horizontalLayout.setSpacing(0)
self.horizontalLayout.setObjectName("horizontalLayout") self.horizontalLayout.setObjectName("horizontalLayout")
self.frame_info = QtWidgets.QFrame(self.centralwidget) self.frame_info = QtWidgets.QFrame(self.centralwidget)
self.frame_info.setMinimumSize(QtCore.QSize(80, 500)) self.frame_info.setMinimumSize(QtCore.QSize(80, 500))
self.frame_info.setMaximumSize(QtCore.QSize(80, 16777215)) self.frame_info.setMaximumSize(QtCore.QSize(80, 16777215))
self.frame_info.setStyleSheet("background-color:rgb(240,240,240)") self.frame_info.setStyleSheet("")
self.frame_info.setFrameShape(QtWidgets.QFrame.NoFrame) self.frame_info.setFrameShape(QtWidgets.QFrame.NoFrame)
self.frame_info.setFrameShadow(QtWidgets.QFrame.Plain) self.frame_info.setFrameShadow(QtWidgets.QFrame.Plain)
self.frame_info.setLineWidth(5)
self.frame_info.setObjectName("frame_info") self.frame_info.setObjectName("frame_info")
self.myavatar = QtWidgets.QLabel(self.frame_info) self.myavatar = QtWidgets.QLabel(self.frame_info)
self.myavatar.setGeometry(QtCore.QRect(10, 40, 60, 60)) self.myavatar.setGeometry(QtCore.QRect(10, 40, 60, 60))

View File

@ -17,6 +17,7 @@ class Ui_Dialog(object):
Dialog.resize(611, 519) Dialog.resize(611, 519)
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("微软雅黑") font.setFamily("微软雅黑")
font.setPointSize(12)
Dialog.setFont(font) Dialog.setFont(font)
Dialog.setLayoutDirection(QtCore.Qt.LeftToRight) Dialog.setLayoutDirection(QtCore.Qt.LeftToRight)
self.verticalLayout_3 = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout_3 = QtWidgets.QVBoxLayout(Dialog)
@ -28,6 +29,7 @@ class Ui_Dialog(object):
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_4.addItem(spacerItem) self.horizontalLayout_4.addItem(spacerItem)
self.btn_help = QtWidgets.QPushButton(Dialog) self.btn_help = QtWidgets.QPushButton(Dialog)
self.btn_help.setMinimumSize(QtCore.QSize(0, 40))
self.btn_help.setMaximumSize(QtCore.QSize(200, 16777215)) self.btn_help.setMaximumSize(QtCore.QSize(200, 16777215))
self.btn_help.setObjectName("btn_help") self.btn_help.setObjectName("btn_help")
self.horizontalLayout_4.addWidget(self.btn_help) self.horizontalLayout_4.addWidget(self.btn_help)
@ -125,7 +127,7 @@ class Ui_Dialog(object):
self.gridLayout.setColumnStretch(1, 10) self.gridLayout.setColumnStretch(1, 10)
self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 2, 1) self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 2, 1)
self.btn_getinfo = QtWidgets.QPushButton(Dialog) self.btn_getinfo = QtWidgets.QPushButton(Dialog)
self.btn_getinfo.setMinimumSize(QtCore.QSize(0, 60)) self.btn_getinfo.setMinimumSize(QtCore.QSize(0, 40))
self.btn_getinfo.setObjectName("btn_getinfo") self.btn_getinfo.setObjectName("btn_getinfo")
self.gridLayout_2.addWidget(self.btn_getinfo, 0, 1, 1, 1) self.gridLayout_2.addWidget(self.btn_getinfo, 0, 1, 1, 1)
self.checkBox = QtWidgets.QCheckBox(Dialog) self.checkBox = QtWidgets.QCheckBox(Dialog)
@ -133,7 +135,7 @@ class Ui_Dialog(object):
self.checkBox.setObjectName("checkBox") self.checkBox.setObjectName("checkBox")
self.gridLayout_2.addWidget(self.checkBox, 0, 2, 1, 1) self.gridLayout_2.addWidget(self.checkBox, 0, 2, 1, 1)
self.btn_db_dir = QtWidgets.QPushButton(Dialog) self.btn_db_dir = QtWidgets.QPushButton(Dialog)
self.btn_db_dir.setMinimumSize(QtCore.QSize(0, 60)) self.btn_db_dir.setMinimumSize(QtCore.QSize(0, 40))
self.btn_db_dir.setObjectName("btn_db_dir") self.btn_db_dir.setObjectName("btn_db_dir")
self.gridLayout_2.addWidget(self.btn_db_dir, 1, 1, 1, 1) self.gridLayout_2.addWidget(self.btn_db_dir, 1, 1, 1, 1)
self.checkBox_2 = QtWidgets.QCheckBox(Dialog) self.checkBox_2 = QtWidgets.QCheckBox(Dialog)
@ -145,11 +147,11 @@ class Ui_Dialog(object):
self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.horizontalLayout_2.setObjectName("horizontalLayout_2")
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem4) self.horizontalLayout_2.addItem(spacerItem4)
self.pushButton_3 = QtWidgets.QPushButton(Dialog) self.btn_start = QtWidgets.QPushButton(Dialog)
self.pushButton_3.setMinimumSize(QtCore.QSize(0, 60)) self.btn_start.setMinimumSize(QtCore.QSize(0, 40))
self.pushButton_3.setMaximumSize(QtCore.QSize(100, 16777215)) self.btn_start.setMaximumSize(QtCore.QSize(100, 16777215))
self.pushButton_3.setObjectName("pushButton_3") self.btn_start.setObjectName("btn_start")
self.horizontalLayout_2.addWidget(self.pushButton_3) self.horizontalLayout_2.addWidget(self.btn_start)
self.label_tip = QtWidgets.QLabel(Dialog) self.label_tip = QtWidgets.QLabel(Dialog)
self.label_tip.setObjectName("label_tip") self.label_tip.setObjectName("label_tip")
self.horizontalLayout_2.addWidget(self.label_tip) self.horizontalLayout_2.addWidget(self.label_tip)
@ -192,6 +194,6 @@ class Ui_Dialog(object):
self.label_8.setText(_translate("Dialog", "微信路径")) self.label_8.setText(_translate("Dialog", "微信路径"))
self.btn_getinfo.setText(_translate("Dialog", "获取信息")) self.btn_getinfo.setText(_translate("Dialog", "获取信息"))
self.btn_db_dir.setText(_translate("Dialog", "设置微信路径")) self.btn_db_dir.setText(_translate("Dialog", "设置微信路径"))
self.pushButton_3.setText(_translate("Dialog", "开始启动")) self.btn_start.setText(_translate("Dialog", "开始启动"))
self.label_tip.setText(_translate("Dialog", "TextLabel")) self.label_tip.setText(_translate("Dialog", "TextLabel"))
self.label_ready.setText(_translate("Dialog", "未就绪")) self.label_ready.setText(_translate("Dialog", "未就绪"))

View File

@ -13,6 +13,7 @@ from app.decrypt import get_wx_info, decrypt
from app.log import logger from app.log import logger
from app.util import path from app.util import path
from . import decryptUi from . import decryptUi
from ...Icon import Icon
class DecryptControl(QWidget, decryptUi.Ui_Dialog): class DecryptControl(QWidget, decryptUi.Ui_Dialog):
@ -23,12 +24,16 @@ class DecryptControl(QWidget, decryptUi.Ui_Dialog):
super(DecryptControl, self).__init__(parent) super(DecryptControl, self).__init__(parent)
self.setupUi(self) self.setupUi(self)
self.pushButton_3.clicked.connect(self.decrypt) self.btn_start.clicked.connect(self.decrypt)
self.btn_getinfo.clicked.connect(self.get_info) self.btn_getinfo.clicked.connect(self.get_info)
self.btn_db_dir.clicked.connect(self.select_db_dir) self.btn_db_dir.clicked.connect(self.select_db_dir)
self.lineEdit.returnPressed.connect(self.set_wxid) self.lineEdit.returnPressed.connect(self.set_wxid)
self.lineEdit.textChanged.connect(self.set_wxid_) self.lineEdit.textChanged.connect(self.set_wxid_)
self.btn_help.clicked.connect(self.show_help) self.btn_help.clicked.connect(self.show_help)
self.btn_getinfo.setIcon(Icon.Get_info_Icon)
self.btn_db_dir.setIcon(Icon.Folder_Icon)
self.btn_start.setIcon(Icon.Start_Icon)
self.btn_help.setIcon(Icon.Help_Icon)
self.label_tip.setVisible(False) self.label_tip.setVisible(False)
self.info = {} self.info = {}
self.lineEdit.setFocus() self.lineEdit.setFocus()

View File

@ -9,7 +9,7 @@ from .toolUI import Ui_Dialog
# 美化样式表 # 美化样式表
Stylesheet = """ Stylesheet = """
QPushButton{ QPushButton{
background-color: #ffffff; background-color: rgb(250,252,253);
} }
QPushButton:hover { QPushButton:hover {
background-color: lightgray; background-color: lightgray;
@ -18,7 +18,6 @@ QPushButton:hover {
QListWidget, QListView, QTreeWidget, QTreeView { QListWidget, QListView, QTreeWidget, QTreeView {
outline: 0px; outline: 0px;
border:none; border:none;
background-color:rgb(240,240,240)
} }
/*设置左侧选项的最小最大宽度,文字颜色和背景颜色*/ /*设置左侧选项的最小最大宽度,文字颜色和背景颜色*/
QListWidget { QListWidget {
@ -35,16 +34,12 @@ QListWidget::item{
} }
/*被选中时的背景颜色和左边框颜色*/ /*被选中时的背景颜色和左边框颜色*/
QListWidget::item:selected { QListWidget::item:selected {
background: rgb(204, 204, 204);
border-bottom: 4px solid rgb(9, 187, 7); border-bottom: 4px solid rgb(9, 187, 7);
border-left:none; border-left:none;
color: black; color: black;
font-weight: bold; font-weight: bold;
} }
/*鼠标悬停颜色*/
HistoryPanel::item:hover {
background: rgb(52, 52, 52);
}
""" """
@ -63,10 +58,10 @@ class ToolWindow(QWidget, Ui_Dialog):
def init_ui(self): def init_ui(self):
self.listWidget.clear() self.listWidget.clear()
self.listWidget.currentRowChanged.connect(self.setCurrentIndex) self.listWidget.currentRowChanged.connect(self.setCurrentIndex)
chat_item = QListWidgetItem(Icon.Chat_Icon, '解密', self.listWidget) chat_item = QListWidgetItem(Icon.Decrypt_Icon, '解密', self.listWidget)
contact_item = QListWidgetItem(Icon.Contact_Icon, '别点', self.listWidget) contact_item = QListWidgetItem(Icon.Contact_Icon, '别点', self.listWidget)
myinfo_item = QListWidgetItem(Icon.MyInfo_Icon, '别点', self.listWidget) myinfo_item = QListWidgetItem(Icon.Home_Icon, '别点', self.listWidget)
tool_item = QListWidgetItem(Icon.MyInfo_Icon, '别点', self.listWidget) tool_item = QListWidgetItem(Icon.Home_Icon, '别点', self.listWidget)
decrypt_window = DecryptControl() decrypt_window = DecryptControl()
decrypt_window.get_wxidSignal.connect(self.get_info_signal) decrypt_window.get_wxidSignal.connect(self.get_info_signal)
decrypt_window.DecryptSignal.connect(self.decrypt_success_signal) decrypt_window.DecryptSignal.connect(self.decrypt_success_signal)
@ -85,5 +80,4 @@ class ToolWindow(QWidget, Ui_Dialog):
self.stackedWidget.setCurrentIndex(0) self.stackedWidget.setCurrentIndex(0)
def setCurrentIndex(self, row): def setCurrentIndex(self, row):
print(row)
self.stackedWidget.setCurrentIndex(row) self.stackedWidget.setCurrentIndex(row)