181 lines
6.0 KiB
Python
181 lines
6.0 KiB
Python
|
# coding: gb2312
|
|||
|
import random
|
|||
|
|
|||
|
from PyQt5.QtCore import QTimer
|
|||
|
|
|||
|
from LSZXPagesLibrary.consensus import *
|
|||
|
from LSZXPagesLibrary.exercise_page_layout_define import ExercisePageLayoutDefine
|
|||
|
from LSZXPagesLibrary.pop_message_dialog import PopDialogMessage
|
|||
|
from LSZXPagesLibrary.pop_summary_dialog import PopSummaryDialog
|
|||
|
from PureBackend.global_execrise_backend import GEB
|
|||
|
|
|||
|
STOP = "stop"
|
|||
|
HOME = "home"
|
|||
|
|
|||
|
|
|||
|
class ExercisePage(ExercisePageLayoutDefine):
|
|||
|
|
|||
|
def __init__(self):
|
|||
|
super(ExercisePage, self).__init__()
|
|||
|
self.exercise_name = None
|
|||
|
self.eb = GEB().get_geb()
|
|||
|
# ע<>᷵<EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD>İ<EFBFBD>ť
|
|||
|
self.back_home_button.clicked.connect(self.back_home)
|
|||
|
# ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
|
|||
|
self.stop_button.clicked.connect(self.stop)
|
|||
|
# <20><><EFBFBD><EFBFBD>Ѫ<EFBFBD><D1AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
# self.bo_widget.set_data([random.randrange(0, 100) for i in range(10)])
|
|||
|
# self.hr_widget.set_data([random.randrange(0, 120) for i in range(10)])
|
|||
|
self.had_done = False
|
|||
|
# <20><><EFBFBD><EFBFBD>Ѫ<EFBFBD><D1AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
self.max_size = 20
|
|||
|
self.bo_min = 100
|
|||
|
self.hr_max = 0
|
|||
|
self.hr_list = []
|
|||
|
self.bo_list = []
|
|||
|
# <20><><EFBFBD><EFBFBD>
|
|||
|
# ȷ<>ϵ<EFBFBD><CFB5><EFBFBD>
|
|||
|
self.message_pop_windows = PopDialogMessage(self)
|
|||
|
self.message_pop_windows.connect(self.message_pop_commit)
|
|||
|
# <20>жϵ<D0B6><CFB5><EFBFBD><EFBFBD>İ<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
|
|||
|
self.click_type = None
|
|||
|
# <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʵʱ<CAB5>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
self.timer = QTimer()
|
|||
|
self.timer.timeout.connect(self._update)
|
|||
|
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD>ܿ۷<DCBF><DBB7><EFBFBD><EEB5AF>
|
|||
|
self.pop_summary_dialog = PopSummaryDialog(self)
|
|||
|
self.pop_summary_dialog.connect(self.pop_summary_dialog_commit)
|
|||
|
# self.pop_summary_dialog.set_run_ahead('20<32><30>')
|
|||
|
# self.pop_summary_dialog.set_runaround_count('10<31><30>')
|
|||
|
|
|||
|
def _update(self):
|
|||
|
data = self.eb.get_score()
|
|||
|
countdown = int(data['countdown'])
|
|||
|
hr = int(data['hr'])
|
|||
|
bo = int(data['bo'])
|
|||
|
had_done = data['had_done']
|
|||
|
# <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if 'preempt' in data:
|
|||
|
preempt_value = data['preempt']
|
|||
|
preempt = f"{preempt_value:.2f}<EFBFBD><EFBFBD>"
|
|||
|
count_value = data['count']
|
|||
|
count = f"{count_value:.2f}<EFBFBD><EFBFBD>"
|
|||
|
self.pop_summary_dialog.set_run_ahead(preempt)
|
|||
|
self.pop_summary_dialog.set_runaround_count(count)
|
|||
|
# <20><><EFBFBD>¼<EFBFBD>ʱ
|
|||
|
minutes = int(countdown // 60)
|
|||
|
seconds = int(countdown % 60) # <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>
|
|||
|
minutes_str = f"{minutes:02}"
|
|||
|
seconds_str = f"{seconds:02}" # ת<><D7AA>Ϊ<EFBFBD><CEAA>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
count_time_str = f"{minutes_str}:{seconds_str}" # <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>ָ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
self.set_counter(count_time_str)
|
|||
|
# <20><><EFBFBD><EFBFBD>hrbo<62>б<EFBFBD>
|
|||
|
if len(self.hr_list) >= self.max_size:
|
|||
|
self.hr_list.pop(0)
|
|||
|
if len(self.bo_list) >= self.max_size:
|
|||
|
self.bo_list.pop(0)
|
|||
|
if hr > self.hr_max:
|
|||
|
self.hr_max = hr
|
|||
|
if bo < self.bo_min:
|
|||
|
self.bo_min = bo
|
|||
|
self.bo_list.append(bo)
|
|||
|
self.bo_widget.set_data(self.bo_list, self.bo_min)
|
|||
|
self.hr_list.append(hr)
|
|||
|
self.hr_widget.set_data(self.hr_list, self.hr_max)
|
|||
|
# <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if self.data[EXERCISE_TYPE] == RUNAROUND and had_done:
|
|||
|
self.pause()
|
|||
|
self.click_type = STOP
|
|||
|
self.pop_summary_dialog.show()
|
|||
|
elif had_done:
|
|||
|
self.pause()
|
|||
|
self.click_type = STOP
|
|||
|
self.message_pop_windows.show("<EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>, <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>?")
|
|||
|
|
|||
|
def start(self):
|
|||
|
self.timer.start(500) # ÿ 500 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡһ<C8A1><D2BB>֡
|
|||
|
|
|||
|
def pause(self):
|
|||
|
self.timer.stop()
|
|||
|
|
|||
|
def resume(self):
|
|||
|
self.timer.start(500)
|
|||
|
|
|||
|
def close(self):
|
|||
|
self.timer.stop()
|
|||
|
|
|||
|
def refresh(self):
|
|||
|
exercise_name = EXERCISE_TYPE_TABLE[self.data[EXERCISE_TYPE]]
|
|||
|
person_mes = self.data[PERSON_MES]
|
|||
|
frame_generator = self.data[FRAME_GENERATOR]
|
|||
|
_id = person_mes[ID]
|
|||
|
_class = person_mes[CLASS]
|
|||
|
name = person_mes[NAME]
|
|||
|
self.set_title(_id, name, _class, exercise_name)
|
|||
|
self.video_displayer.set_frame_generator(frame_generator)
|
|||
|
self.video_displayer.start()
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>¶<EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
self.start()
|
|||
|
|
|||
|
def set_title(self, _id, name, _class, exercise_name):
|
|||
|
self.id_box.setText(_id)
|
|||
|
self.name_box.setText(name)
|
|||
|
self.class_box.setText(_class)
|
|||
|
self.title_label.setText(exercise_name)
|
|||
|
|
|||
|
# <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>ֵ
|
|||
|
def set_counter(self, count_text):
|
|||
|
self.count_box.setText(count_text)
|
|||
|
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳʱ<D2B3><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
|||
|
def back_home(self):
|
|||
|
self.click_type = HOME
|
|||
|
self.message_pop_windows.show("<EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD>ҳɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>?")
|
|||
|
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
|||
|
def stop(self):
|
|||
|
self.click_type = STOP
|
|||
|
self.message_pop_windows.show("<EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD>ҳɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>?")
|
|||
|
|
|||
|
# <20><><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3>ҳɼ<D2B3><C9BC><EFBFBD><EFBFBD><EFBFBD>, <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>ť<EFBFBD>¼<EFBFBD>
|
|||
|
def message_pop_commit(self):
|
|||
|
self.eb.stop_exercise()
|
|||
|
# <20>жϵ<D0B6><CFB5><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
|
|||
|
if self.click_type == STOP:
|
|||
|
self.eb.update_score()
|
|||
|
# <20>ر<EFBFBD><D8B1><EFBFBD>Ƶ<EFBFBD><C6B5>
|
|||
|
self.video_displayer.pause()
|
|||
|
data = {
|
|||
|
EXERCISE_TYPE: self.data[EXERCISE_TYPE],
|
|||
|
PERSON_LIST: self.eb.select_exercise_score(self.data[EXERCISE_TYPE])
|
|||
|
}
|
|||
|
self.jump2(PICK_UP_PAGE, data)
|
|||
|
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܿ۷<DCBF><DBB7><EFBFBD><EEA3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܡ<EFBFBD>ײ<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>ϰ<EFBFBD>ť<EFBFBD><C5A5>Ӧ<EFBFBD>¼<EFBFBD>
|
|||
|
def pop_summary_dialog_commit(self):
|
|||
|
# <20>ر<EFBFBD><D8B1><EFBFBD>Ƶ<EFBFBD><C6B5>
|
|||
|
self.video_displayer.pause()
|
|||
|
# <20>رճɼ<D5B3><C9BC><EFBFBD><EFBFBD>¶<EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
self.timer.stop()
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
self.reset_info()
|
|||
|
self.eb.stop_exercise()
|
|||
|
# <20>жϵ<D0B6><CFB5><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
|
|||
|
if self.click_type == STOP:
|
|||
|
self.eb.update_score()
|
|||
|
|
|||
|
data = {
|
|||
|
EXERCISE_TYPE: self.data[EXERCISE_TYPE],
|
|||
|
PERSON_LIST: self.eb.select_exercise_score(self.data[EXERCISE_TYPE])
|
|||
|
}
|
|||
|
self.jump2(PICK_UP_PAGE, data)
|
|||
|
|
|||
|
# <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
|||
|
def reset_info(self):
|
|||
|
self.set_counter(str(0))
|
|||
|
self.bo_list = []
|
|||
|
self.bo_widget.set_data(self.bo_list, 100)
|
|||
|
self.hr_list = []
|
|||
|
self.hr_widget.set_data(self.hr_list, 0)
|