LISHUZUOXUN_yangjiang/LSZXPagesManagerLibrary/display_grade_summary.py

239 lines
11 KiB
Python
Raw Normal View History

2024-09-23 14:54:15 +08:00
# coding: gb2312
from PyQt5.QtGui import QColor
from PyQt5.QtWidgets import *
from LSZXPagesManagerLibrary.consensus import *
from PyQt5.QtCore import *
class GradeSummary(QWidget):
def __init__(self):
super().__init__()
self.animation = None
self.scroll_timer = None
self.data_list = []
self.header_type_table = HEADER_TYPE_TABLE
self.column_names = ['<EFBFBD><EFBFBD><EFBFBD><EFBFBD>', '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>', '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>', 'Ѫ<EFBFBD><EFBFBD>', '<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>', '<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>', '30*2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>', '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>', '<EFBFBD><EFBFBD><EFBFBD>Գ<EFBFBD>']
self.item_widget = self._init_item_widget()
self.item_title = self._init_item_title()
# <20><><EFBFBD><EFBFBD>
self.table_widget = self._init_table_widget()
self.main_layout = QVBoxLayout()
self.main_layout.setContentsMargins(10, 0, 10, 0)
self.main_layout.addWidget(self.item_title, 6)
self.main_layout.addWidget(self.table_widget, 94)
self.item_widget.setLayout(self.main_layout)
self.layout = QHBoxLayout()
self.layout.setContentsMargins(0, 0, 0, 0)
self.layout.addWidget(self.item_widget)
self.setLayout(self.layout)
def set_data(self, data):
self.data_list = data
self.draw_table()
def draw_table(self):
self.table_widget.setColumnCount(len(self.column_names))
self.table_widget.setHorizontalHeaderLabels(self.column_names)
self.table_widget.setRowCount(len(self.data_list))
for row_index, row_data in enumerate(self.data_list):
for col_index, col_name in enumerate(self.column_names):
if col_name == self.header_type_table[HR]:
value = str(row_data['hr']['hr'])
item = QTableWidgetItem(value)
item.setTextAlignment(Qt.AlignCenter) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>
if row_data['hr']['color'] == 'R':
item.setBackground(QColor("#FF0000")) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ɫ
item.setForeground(QColor("#000000"))
elif row_data['hr']['color'] == 'G':
item.setBackground(QColor("#74f035"))
item.setForeground(QColor("#000000"))
elif row_data['hr']['color'] == 'Y':
item.setBackground(QColor("#ffff00"))
item.setForeground(QColor("#000000"))
self.table_widget.setItem(row_index, col_index, item)
elif col_name == self.header_type_table[BO]:
value = str(row_data['bo']['bo'])
item = QTableWidgetItem(value)
item.setTextAlignment(Qt.AlignCenter) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>
if row_data['bo']['color'] == 'R':
item.setBackground(QColor("#FF0000")) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ɫ
item.setForeground(QColor("#000000"))
elif row_data['bo']['color'] == 'G':
item.setBackground(QColor("#74f035"))
item.setForeground(QColor("#000000"))
elif row_data['bo']['color'] == 'Y':
item.setBackground(QColor("#ffff00"))
item.setForeground(QColor("#000000"))
self.table_widget.setItem(row_index, col_index, item)
elif col_name == self.header_type_table[SIT_UP]:
situp_data = row_data['situp']
if situp_data['count'] is not None:
value = str(situp_data['count'])
else:
value = ""
item = QTableWidgetItem(value)
item.setTextAlignment(Qt.AlignCenter) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>
if row_data['situp']['is_changed']:
item.setBackground(QColor("#74f035")) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ɫ
item.setForeground(QColor("#000000"))
self.table_widget.setItem(row_index, col_index, item)
elif col_name == self.header_type_table[PULL_UP]:
situp_data = row_data['pullup']
if situp_data['count'] is not None:
value = str(situp_data['count'])
else:
value = ""
item = QTableWidgetItem(value)
item.setTextAlignment(Qt.AlignCenter) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>
if row_data['pullup']['is_changed']:
item.setBackground(QColor("#74f035")) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ɫ
item.setForeground(QColor("#000000"))
self.table_widget.setItem(row_index, col_index, item)
elif col_name == self.header_type_table[RUNAROUND]:
situp_data = row_data['runaround']
if situp_data['count'] is not None:
value = str(situp_data['count'])
else:
value = ""
item = QTableWidgetItem(value)
item.setTextAlignment(Qt.AlignCenter) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>
if row_data['runaround']['is_changed']:
item.setBackground(QColor("#74f035")) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ɫ
item.setForeground(QColor("#000000"))
self.table_widget.setItem(row_index, col_index, item)
elif col_name == self.header_type_table[RUNNING]:
situp_data = row_data['running']
if situp_data['count'] is not None:
value = str(situp_data['count'])
else:
value = ""
item = QTableWidgetItem(value)
item.setTextAlignment(Qt.AlignCenter) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>
if row_data['running']['is_changed']:
item.setBackground(QColor("#74f035")) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ɫ
item.setForeground(QColor("#000000"))
self.table_widget.setItem(row_index, col_index, item)
elif col_name == self.header_type_table[PUSH_UP]:
situp_data = row_data['pushup']
if situp_data['count'] is not None:
value = str(situp_data['count'])
else:
value = ""
item = QTableWidgetItem(value)
item.setTextAlignment(Qt.AlignCenter) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>
if row_data['pushup']['is_changed']:
item.setBackground(QColor("#74f035")) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ɫ
item.setForeground(QColor("#000000"))
self.table_widget.setItem(row_index, col_index, item)
else:
if col_name == self.header_type_table[NAME]:
value = row_data['name']
elif col_name == self.header_type_table[ID]:
value = str(row_data['id'])
else:
value = ""
item = QTableWidgetItem(value)
item.setTextAlignment(Qt.AlignCenter) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD>
self.table_widget.setItem(row_index, col_index, item)
# <20><><EFBFBD>ñ<EFBFBD>ͷ<EFBFBD><CDB7>ʽ
header = self.table_widget.horizontalHeader()
header.setStyleSheet("""
QHeaderView::section {
background-color: none;
font: 600 15px \"Microsoft YaHei UI\";
background: transparent;
border: 1px solid #0e5af4;
color: #08a4ff;
border-image: none;
padding-top: 3px;
padding-bottom: 3px;
border-left: none;
border-right: none;
}
""")
# <20><><EFBFBD><EFBFBD>ʾ<EFBFBD>к<EFBFBD>
self.table_widget.verticalHeader().setVisible(False)
# ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD>Ļ
self.table_widget.horizontalHeader().setStretchLastSection(True)
self.table_widget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.table_widget.horizontalHeader().setSectionResizeMode(len(self.column_names) - 1, QHeaderView.Fixed)
self.table_widget.setColumnWidth(len(self.column_names) - 1, 50)
# ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD>иߺ<D0B8><DFBA>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD>Ӧ
self.table_widget.verticalHeader().setDefaultSectionSize(30)
# ˫<><CBAB>ʱ<EFBFBD><CAB1><EFBFBD>ܶԱ<DCB6><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD>޸<EFBFBD>
self.table_widget.setEditTriggers(QAbstractItemView.NoEditTriggers)
# <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
self.table_widget.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.table_widget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
# <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
self.scroll_timer = QTimer(self)
self.scroll_timer.timeout.connect(self.auto_scroll)
self.scroll_timer.start(2000) # ÿ 2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
self.animation = QPropertyAnimation(self.table_widget.verticalScrollBar(), b"value")
self.animation.setDuration(1000) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
self.setMouseTracking(True)
def auto_scroll(self):
current_value = self.table_widget.verticalScrollBar().value()
if current_value == self.table_widget.verticalScrollBar().maximum():
self.animation.setEndValue(0) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
self.animation.start()
else:
new_value = current_value + 1
if new_value > self.table_widget.verticalScrollBar().maximum():
new_value = self.table_widget.verticalScrollBar().maximum() # <20><><EFBFBD><EFBFBD><EFBFBD>ڵײ<DAB5>
self.animation.setEndValue(new_value)
self.animation.start()
@staticmethod
def _init_table_widget():
table_widget = QTableWidget()
table_widget.setStyleSheet(
"background: transparent;"
"border: none;"
"border-image: none;"
"background-image: none;"
"color: #ffffff;"
"font: 15px \"Microsoft YaHei UI\";"
)
return table_widget
@staticmethod
def _init_item_title():
item_title = QLabel("<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
item_title.setAlignment(Qt.AlignCenter | Qt.AlignVCenter)
item_title.setStyleSheet(
"font: 600 24px \"Microsoft YaHei UI\";"
"color: #2c1654;"
"border: none;"
"border-image: none;"
"background-color: #fac14e;"
"margin: 6px 250px 6px 250px;"
"padding-top: 4px;"
"padding-bottom: 4px;"
"letter-spacing: 4px;"
)
return item_title
@staticmethod
def _init_item_widget():
item_widget = QWidget()
item_widget.setStyleSheet(
"background-color: none;"
"border: 2px solid #FFFF00;"
"border-radius: 4px;"
"background: none;"
)
return item_widget