Skip to content
This repository was archived by the owner on Dec 31, 2025. It is now read-only.

Commit e00b7cf

Browse files
committed
feat: add page for class and grade comparison with UI and handler logic
1 parent 57476a8 commit e00b7cf

5 files changed

Lines changed: 458 additions & 1 deletion

File tree

ui_page/page_top_in_grade.ui

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>page_top_in_grade</class>
4+
<widget class="QWidget" name="page_top_in_grade">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>800</width>
10+
<height>600</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>班级第一与年级第一对比</string>
15+
</property>
16+
<layout class="QHBoxLayout" name="horizontalLayout">
17+
<item>
18+
<widget class="QFrame" name="leftPanel">
19+
<property name="maximumSize">
20+
<size>
21+
<width>280</width>
22+
<height>16777215</height>
23+
</size>
24+
</property>
25+
<property name="styleSheet">
26+
<string notr="true">
27+
background-color: white;
28+
border-radius: 8px;
29+
padding: 10px;
30+
</string>
31+
</property>
32+
<layout class="QGridLayout" name="gridLayout">
33+
<item row="0" column="0">
34+
<layout class="QVBoxLayout" name="verticalLayout_2">
35+
<item>
36+
<widget class="QLabel" name="labelExamList">
37+
<property name="styleSheet">
38+
<string notr="true">font-weight: bold; font-size: 14px;</string>
39+
</property>
40+
<property name="text">
41+
<string>选择考试</string>
42+
</property>
43+
</widget>
44+
</item>
45+
<item>
46+
<widget class="QListView" name="listView">
47+
<property name="styleSheet">
48+
<string notr="true">
49+
QListView {
50+
border: 1px solid #dcdfe6;
51+
border-radius: 4px;
52+
padding: 4px;
53+
background-color: #ffffff;
54+
}
55+
QListView::item {
56+
padding: 8px 12px;
57+
border-bottom: 1px solid #ebeef5;
58+
}
59+
QListView::item:hover {
60+
background-color: #f5f7fa;
61+
}
62+
QListView::item:selected {
63+
background-color: #ecf5ff;
64+
color: #409eff;
65+
border-left: 3px solid #409eff;
66+
}
67+
</string>
68+
</property>
69+
</widget>
70+
</item>
71+
</layout>
72+
</item>
73+
</layout>
74+
</widget>
75+
</item>
76+
<item>
77+
<widget class="QFrame" name="rightPanel">
78+
<property name="styleSheet">
79+
<string notr="true">
80+
background-color: white;
81+
border-radius: 8px;
82+
padding: 10px;
83+
</string>
84+
</property>
85+
<layout class="QGridLayout" name="gridLayout_2">
86+
<item row="0" column="0">
87+
<layout class="QVBoxLayout" name="verticalLayout">
88+
<item>
89+
<layout class="QHBoxLayout" name="horizontalLayout_2">
90+
<item>
91+
<widget class="QLabel" name="labelClass">
92+
<property name="text">
93+
<string>选择班级:</string>
94+
</property>
95+
</widget>
96+
</item>
97+
<item>
98+
<widget class="QComboBox" name="comboBoxClass"/>
99+
</item>
100+
</layout>
101+
</item>
102+
<item>
103+
<widget class="QLabel" name="labelChartTitle">
104+
<property name="styleSheet">
105+
<string notr="true">font-weight: bold; font-size: 14px;</string>
106+
</property>
107+
<property name="text">
108+
<string>班级第一&amp;年级第一对比图</string>
109+
</property>
110+
</widget>
111+
</item>
112+
<item>
113+
<widget class="QWidget" name="widgetChart" native="true">
114+
<property name="minimumSize">
115+
<size>
116+
<width>0</width>
117+
<height>400</height>
118+
</size>
119+
</property>
120+
</widget>
121+
</item>
122+
</layout>
123+
</item>
124+
</layout>
125+
</widget>
126+
</item>
127+
</layout>
128+
</widget>
129+
<resources/>
130+
<connections/>
131+
</ui>

ui_page/ui_page_top_in_grade.py

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
# -*- coding: utf-8 -*-
2+
3+
################################################################################
4+
## Form generated from reading UI file 'page_top_in_grade.ui'
5+
##
6+
## Created by: Qt User Interface Compiler version 6.7.0
7+
##
8+
## WARNING! All changes made in this file will be lost when recompiling UI file!
9+
################################################################################
10+
11+
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
12+
QMetaObject, QObject, QPoint, QRect,
13+
QSize, QTime, QUrl, Qt)
14+
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
15+
QFont, QFontDatabase, QGradient, QIcon,
16+
QImage, QKeySequence, QLinearGradient, QPainter,
17+
QPalette, QPixmap, QRadialGradient, QTransform)
18+
from PySide6.QtWidgets import (QApplication, QComboBox, QFrame, QGridLayout,
19+
QHBoxLayout, QLabel, QListView, QSizePolicy,
20+
QVBoxLayout, QWidget)
21+
22+
class Ui_page_top_in_grade(object):
23+
def setupUi(self, page_top_in_grade):
24+
if not page_top_in_grade.objectName():
25+
page_top_in_grade.setObjectName(u"page_top_in_grade")
26+
page_top_in_grade.resize(800, 600)
27+
self.horizontalLayout = QHBoxLayout(page_top_in_grade)
28+
self.horizontalLayout.setObjectName(u"horizontalLayout")
29+
self.leftPanel = QFrame(page_top_in_grade)
30+
self.leftPanel.setObjectName(u"leftPanel")
31+
self.leftPanel.setMaximumSize(QSize(280, 16777215))
32+
self.leftPanel.setStyleSheet(u"\n"
33+
" background-color: white;\n"
34+
" border-radius: 8px;\n"
35+
" padding: 10px;\n"
36+
" ")
37+
self.gridLayout = QGridLayout(self.leftPanel)
38+
self.gridLayout.setObjectName(u"gridLayout")
39+
self.verticalLayout_2 = QVBoxLayout()
40+
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
41+
self.labelExamList = QLabel(self.leftPanel)
42+
self.labelExamList.setObjectName(u"labelExamList")
43+
self.labelExamList.setStyleSheet(u"font-weight: bold; font-size: 14px;")
44+
45+
self.verticalLayout_2.addWidget(self.labelExamList)
46+
47+
self.listView = QListView(self.leftPanel)
48+
self.listView.setObjectName(u"listView")
49+
self.listView.setStyleSheet(u"\n"
50+
" QListView {\n"
51+
" border: 1px solid #dcdfe6;\n"
52+
" border-radius: 4px;\n"
53+
" padding: 4px;\n"
54+
" background-color: #ffffff;\n"
55+
" }\n"
56+
" QListView::item {\n"
57+
" padding: 8px 12px;\n"
58+
" border-bottom: 1px solid #ebeef5;\n"
59+
" }\n"
60+
" QListView::item:hover {\n"
61+
" background-color: #f5f7fa;\n"
62+
" }\n"
63+
" QListView::item:selected {\n"
64+
" background-color: #ecf5ff;\n"
65+
" color: #409eff;\n"
66+
" border-left: 3px solid #409eff;\n"
67+
" }\n"
68+
" ")
69+
70+
self.verticalLayout_2.addWidget(self.listView)
71+
72+
73+
self.gridLayout.addLayout(self.verticalLayout_2, 0, 0, 1, 1)
74+
75+
76+
self.horizontalLayout.addWidget(self.leftPanel)
77+
78+
self.rightPanel = QFrame(page_top_in_grade)
79+
self.rightPanel.setObjectName(u"rightPanel")
80+
self.rightPanel.setStyleSheet(u"\n"
81+
" background-color: white;\n"
82+
" border-radius: 8px;\n"
83+
" padding: 10px;\n"
84+
" ")
85+
self.gridLayout_2 = QGridLayout(self.rightPanel)
86+
self.gridLayout_2.setObjectName(u"gridLayout_2")
87+
self.verticalLayout = QVBoxLayout()
88+
self.verticalLayout.setObjectName(u"verticalLayout")
89+
self.horizontalLayout_2 = QHBoxLayout()
90+
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
91+
self.labelClass = QLabel(self.rightPanel)
92+
self.labelClass.setObjectName(u"labelClass")
93+
94+
self.horizontalLayout_2.addWidget(self.labelClass)
95+
96+
self.comboBoxClass = QComboBox(self.rightPanel)
97+
self.comboBoxClass.setObjectName(u"comboBoxClass")
98+
99+
self.horizontalLayout_2.addWidget(self.comboBoxClass)
100+
101+
102+
self.verticalLayout.addLayout(self.horizontalLayout_2)
103+
104+
self.labelChartTitle = QLabel(self.rightPanel)
105+
self.labelChartTitle.setObjectName(u"labelChartTitle")
106+
self.labelChartTitle.setStyleSheet(u"font-weight: bold; font-size: 14px;")
107+
108+
self.verticalLayout.addWidget(self.labelChartTitle)
109+
110+
self.widgetChart = QWidget(self.rightPanel)
111+
self.widgetChart.setObjectName(u"widgetChart")
112+
self.widgetChart.setMinimumSize(QSize(0, 400))
113+
114+
self.verticalLayout.addWidget(self.widgetChart)
115+
116+
117+
self.gridLayout_2.addLayout(self.verticalLayout, 0, 0, 1, 1)
118+
119+
120+
self.horizontalLayout.addWidget(self.rightPanel)
121+
122+
123+
self.retranslateUi(page_top_in_grade)
124+
125+
QMetaObject.connectSlotsByName(page_top_in_grade)
126+
# setupUi
127+
128+
def retranslateUi(self, page_top_in_grade):
129+
page_top_in_grade.setWindowTitle(QCoreApplication.translate("page_top_in_grade", u"\u73ed\u7ea7\u7b2c\u4e00\u4e0e\u5e74\u7ea7\u7b2c\u4e00\u5bf9\u6bd4", None))
130+
self.labelExamList.setText(QCoreApplication.translate("page_top_in_grade", u"\u9009\u62e9\u8003\u8bd5", None))
131+
self.labelClass.setText(QCoreApplication.translate("page_top_in_grade", u"\u9009\u62e9\u73ed\u7ea7\uff1a", None))
132+
self.labelChartTitle.setText(QCoreApplication.translate("page_top_in_grade", u"\u73ed\u7ea7\u7b2c\u4e00&\u5e74\u7ea7\u7b2c\u4e00\u5bf9\u6bd4\u56fe", None))
133+
# retranslateUi
134+

view/main_window.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from view.pages.page_three import PageThree
1212
from view.pages.page_class_grade import PageClassGrade
1313
from view.pages.page_top_in_class import PageTopInClass
14+
from view.pages.page_top_in_grade import PageTopInGrade
1415
from view.pages.setting_page import SettingInterface
1516

1617
import resource_rc
@@ -33,6 +34,7 @@ def __init__(self):
3334
self.pageThree = PageThree(self)
3435
self.pageClassGrade = PageClassGrade(self)
3536
self.pageTopInClass = PageTopInClass(self)
37+
self.pageTopInGrade = PageTopInGrade(self)
3638
self.init_navigation()
3739
self.init_window()
3840

@@ -46,7 +48,8 @@ def init_navigation(self):
4648
{'widget': self.pageTwo, 'icon': MyIcon.EXCEL, 'text': '成绩曲线'},
4749
{'widget': self.pageThree, 'icon': MyIcon.TOOL, 'text': '个人成绩'},
4850
{'widget': self.pageClassGrade, 'icon': MyIcon.CLASS, 'text': '班级成绩'},
49-
{'widget': self.pageTopInClass, 'icon': MyIcon.CLASS, 'text': '班级单科王'},
51+
{'widget': self.pageTopInClass, 'icon': MyIcon.CLASS, 'text': '班单科王'},
52+
{'widget': self.pageTopInGrade, 'icon': MyIcon.CLASS, 'text': '第一对比'},
5053
]
5154
for item in sub_interface_list:
5255
self.addSubInterface(item['widget'], item['icon'], item['text'])

view/pages/page_top_in_grade.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from PySide6.QtWidgets import QWidget
2+
from common.utils import show_dialog
3+
from components.bar import ProgressInfoBar
4+
from ui_page.ui_page_top_in_grade import Ui_page_top_in_grade
5+
from view.pages.page_top_in_grade_handler import PageTopInGradeHandler
6+
7+
class PageTopInGrade(QWidget, Ui_page_top_in_grade):
8+
def __init__(self, parent=None):
9+
super().__init__(parent)
10+
self.loading_bar = None
11+
self.setupUi(self)
12+
self.handler = PageTopInGradeHandler(self)
13+
14+
def show_state_tooltip(self, title, content):
15+
self.loading_bar = ProgressInfoBar(title, content, self)
16+
self.loading_bar.show()
17+
18+
def close_state_tooltip(self):
19+
if self.loading_bar:
20+
self.loading_bar.hide()
21+
self.loading_bar = None
22+
23+
def on_common_error(self, msg):
24+
show_dialog(self, msg, '提示')
25+
26+
# 新增的刷新方法(可选)
27+
def refresh(self):
28+
self.handler.init_exam_list()
29+
self.handler.init_class_list()

0 commit comments

Comments
 (0)