栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

健身训练计时器(2-2)-程序实现

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

健身训练计时器(2-2)-程序实现

主要知识点:线程Threading,语音播报 pyttsx3 (测试了系统语音包,没找到速度控制,放弃了)

# _*_ coding:utf-8 _*_
# @Time: 2021/10/5  16:48


from PyQt5 import QtWidgets
from Training_GUI import Ui_Form
# import win32com.client   #系统语音包
import pyttsx3  # 语音包

import threading  # 线程
import time


class MyWindow(QtWidgets.QWidget, Ui_Form):
    def __init__(self, total_training_time=0.0, total_rest_time=0.0):
        super(MyWindow, self).__init__()
        self.setupUi(self)
        # 初始化训练项目、次数、时间列表
        self.training_item = [self.lineEdit_Item_1.text(), self.lineEdit_Item_2.text(), self.lineEdit_Item_3.text(),
                              self.lineEdit_Item_4.text(),
                              self.lineEdit_Item_5.text(), self.lineEdit_Item_6.text(), self.lineEdit_Item_7.text()]
        self.training_time = [float(self.lineEdit_Training_Time_1.text()), float(self.lineEdit_Training_Time_2.text()),
                              float(self.lineEdit_Training_Time_3.text()), float(self.lineEdit_Training_Time_4.text()),
                              float(self.lineEdit_Training_Time_5.text()), float(self.lineEdit_Training_Time_6.text()),
                              float(self.lineEdit_Training_Time_7.text())]
        self.training_num = [int(self.lineEdit_Training_Num_1.text()), int(self.lineEdit_Training_Num_2.text()),
                             int(self.lineEdit_Training_Num_3.text()), int(self.lineEdit_Training_Num_4.text()),
                             int(self.lineEdit_Training_Num_5.text()), int(self.lineEdit_Training_Num_6.text()),
                             int(self.lineEdit_Training_Num_7.text())]
        self.rest_time = [float(self.lineEdit_Rest_Time_1.text()), float(self.lineEdit_Rest_Time_2.text()),
                          float(self.lineEdit_Rest_Time_3.text()), float(self.lineEdit_Rest_Time_4.text()),
                          float(self.lineEdit_Rest_Time_5.text()), float(self.lineEdit_Rest_Time_6.text()),
                          float(self.lineEdit_Rest_Time_7.text())]
        self.now_training_item = self.next_training_item = self.lineEdit_Item.text()
        self.now_training_num = self.next_training_num = self.lineEdit_Num.text()
        self.now_training_time = self.next_training_time = self.lineEdit_TrainingTime.text()
        self.now_rest_time = self.next_rest_time = self.lineEdit_RestTime.text()
        self.training_flag = False  # 开始训练标识
        self.rest_flag = False  # 开始休息标识
        # 初始化总时间
        for index in range(len(self.training_time)):
            total_training_time += self.training_time[index] * self.training_num[index]
            total_rest_time += self.rest_time[index] * self.training_num[index]

        self.lineEdit_Training_Time_Total.setText(str(total_training_time))
        self.lineEdit_Rest_Time_Total.setText(str(total_rest_time))

        self.engine = pyttsx3.init()  # 创建语音对象
        rate = self.engine.getProperty('rate')
        self.engine.setProperty('rate', rate + 50)  # 调节语速

        self.thread1 = threading.Thread(target=self.training_start)  # 创建计时线程1
        self.thread2 = threading.Thread(target=self.reading_start)  # 创建发音线程2
        self.thread1.setDaemon(True)  # 设为守护线程,主程序关闭,这本线程自动关闭
        self.thread2.setDaemon(True)
        # 创建信号和槽
        self.pushButton_Start.clicked.connect(self.threading1_start)
        self.pushButton_Pause.clicked.connect(self.training_pause)
        self.pushButton_Stop.clicked.connect(self.training_stop)
        # self.lineEdit_Num.textChanged.connect(self.say_num)
        # self.lineEdit_TrainingTime.textChanged.connect(self.say_time)
        # self.lineEdit_Item.textChanged.connect(self.say_item)
        # 设置按钮不可见
        self.pushButton_Pause.hide()



    def threading1_start(self):
        self.pushButton_Start.setEnabled(False)
        self.thread1.start()
        self.thread2.start()

    def reading_start(self):
        while True:
            if self.now_training_item != self.next_training_item:
                self.next_training_item = self.now_training_item
                self.engine.say("%s " % self.now_training_item)
                # self.engine.runAndWait()
            if self.now_training_num != self.next_training_num:
                self.next_training_num = self.now_training_num
                self.engine.say("第 %s 组" % self.now_training_num)
                # self.engine.runAndWait()
            if self.training_flag:
                self.engine.say("开始训练")
                self.training_flag = False
            if self.now_training_time != self.next_training_time:
                self.next_training_time = self.now_training_time
                self.engine.say(" %s " % self.now_training_time)
                # self.engine.runAndWait()
            if self.rest_flag:
                self.engine.say("开始休息")
                self.rest_flag = False
            if self.now_rest_time != self.next_rest_time:
                self.next_rest_time = self.now_rest_time
                self.engine.say(" %s " % self.now_rest_time)
                # self.engine.runAndWait()
            self.engine.runAndWait()


    def training_start(self):
        for item in range(len(self.training_time)):
            self.lineEdit_Item.setText(self.training_item[item])
            self.now_training_item = self.training_item[item]
            time.sleep(1)
            for num in range(1, self.training_num[item] + 1, 1):
                self.lineEdit_Num.setText(str(num))
                self.now_training_num = str(num)
                seconds = int(self.training_time[item] * 60)
                self.training_flag = True
                time.sleep(1)
                for second in range(seconds - 1, -1, -1):
                    self.lineEdit_TrainingTime.setText(str(second))
                    self.now_training_time = str(second)
                    time.sleep(1)
                seconds = int(self.rest_time[item] * 60)
                self.rest_flag = True
                for second in range(seconds - 1, -1, -1):
                    self.lineEdit_RestTime.setText(str(second))
                    self.now_rest_time = str(second)
                    time.sleep(1)

    def training_pause(self):
        pass

    def training_stop(self):
        myShow.close()


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    myShow = MyWindow()
    myShow.show()
    sys.exit(app.exec_())
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/314142.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号