python 计时器界面_python GUI开发之计时器

python GUI开发之计时器

1. 前言

pyqt5框架练手,实现一个计时器GUI。

2. 需求分析

实现计时器窗口。

功能需求:

可以倒计时也可以正计时;

以win平台可执行文件形式发布。

界面需求:

简洁美观;

计时器界面大小可调;

3. 详细设计

开发语言:python

框架:pyqt5,qtdesigner

3.1. 界面设计

界面样式:

3.2. singals/slot

singals/slot列表。

4. 开发过程

qtdesigner设计界面;

建立信号及槽之间的联系;

保存文件为xxx.ui;

pyuic生成xxx.py文件,即为主窗口界面文件;

新建time_clock.py做逻辑处理;

根据各项菜单,按钮的对应功能/槽函数逐一实现方法代码;

运行/调试。

5. 使用说明

5.1. 菜单

File:

start:同功能按钮“开始/暂停”;

reset:同功能按钮“重置”;

quit:退出。

Help:

About:程序说明。

5.2. 功能按钮

开始/暂停按钮:开始计时,如果spinbox值为0则正向计时;如果给定值大于0则倒计时;

开始计时后可暂停;暂停后可继续计时。

重置:计时器状态重置。

6. 主要代码

6.1. 逻辑处理代码

time_clock.py

#!/usr/bin/env python

#coding:utf-8

"""

----------------------------------------

description:

author: sss

date:

----------------------------------------

change:

----------------------------------------

"""

__author__ = ‘sss‘

import sys

from functools import partial

from PyQt5 import QtCore, QtGui, QtWidgets

from PyQt5.QtWidgets import *

from PyQt5.QtCore import *

from PyQt5.QtGui import *

from timer_clock import *

class TimerClock(QMainWindow, Ui_MainWindow):

def __init__(self, parent=None):

super(TimerClock, self).__init__()

self.setupUi(self)

self.statusBar().showMessage("Ready")

# status_running表示是否在计时状态中

# 0 初始态; 1 运行态; 2 暂停态

self.status_running = 0

self.counter = QTime()

self.timer = QTimer()

# 固定QTimer的轮询参数,指定轮询间隔为5ms

self.timer_start = partial(self.timer.start, 5)

self.elasped_time = 0

self.target_time = None

self.timer.timeout.connect(self.timer_timeout)

# 开始/暂停按钮功能实现

def click_start_button(self):

if self.status_running == 0:

self.target_time = int(self.spinBox.text()) * 60

self.target_time = None if self.target_time == 0 else self.target_time

self.status_running = 1

self.pushButton.setText("暂停")

self.counter.restart()

self.timer_start() # 开始计时

elif self.status_running == 1:

self.status_running = 2

self.pushButton.setText("继续")

self.elasped_time = self.elasped_time + self.counter.elapsed() // 1000

if self.target_time is not None:

self.target_time -= self.counter.elapsed() // 1000

self.timer.stop()

else:

self.status_running = 1

self.pushButton.setText("暂停")

self.counter.start()

self.timer_start() # 开始计时

# 重置按钮功能实现

def click_reset_button(self):

# 停止循环和计时

self.timer.stop()

#self.counter.restart()

# 参数重置,组件状态重置

self.status_running = 0

self.target_time = None

self.elasped_time = 0

self.pushButton.setText("开始")

self.lineEdit.setText("00:{:02}:00".format(int(self.spinBox.text())))

# 计时器轮询

def timer_timeout(self):

t_secs = self.counter.elapsed()//1000

if self.target_time is not None:

t_secs = self.target_time - t_secs

else:

t_secs += self.elasped_time

# 计时结束

if t_secs < 0:

msBox = QMessageBox(QMessageBox.NoIcon, "提示", "计时结束!")

msBox.exec_()

self.timer.stop()

self.pushButton.setText("开始")

t_str = "{:02}:{:02}:{:02}".format((t_secs//60)//60,(t_secs//60)%60, (t_secs)%60)

self.lineEdit.setText(t_str)

# spinbox值改变

def spinBox_valuechanged(self, value):

self.lineEdit.setText("00:{:02}:00".format(int(self.spinBox.text())))

def show_help_message(self):

msBox = QMessageBox(QMessageBox.NoIcon, "关于", "计时器\r\n Version:0.1\r\n 作者:SSS")

msBox.exec_()

if __name__ == ‘__main__‘:

app = QtWidgets.QApplication(sys.argv)

ui = TimerClock()

ui.show()

sys.exit(app.exec_())

原文:https://www.cnblogs.com/wodeboke-y/p/12697319.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值