python程序暂停十秒和恢复_python – 暂停并继续秒表

本文介绍如何用Python和Tkinter创建一个秒表应用,支持暂停和继续计时功能。通过一个可切换的Pause/Resume按钮实现秒表的暂停与恢复,并提供了完整的代码示例。
摘要由CSDN通过智能技术生成

我正在尝试制作秒表.我已经做到了,但我想暂停并继续我想要的时间.我尝试了一些东西,但我不知道该怎么做.有没有人会解释我怎么做?

import time, tkinter

canvas=tkinter.Canvas(width=1900,height=1000,bg='white')

canvas.pack()

canvas.create_text(950,300,text=':',font='Arial 600')

def write(x_rec,y_rec,x_text,rep):

canvas.create_rectangle(x_rec,0,y_rec,750,outline='white',fill='white')

if rep<10:

canvas.create_text(x_text,400,text='0'+str(rep),font='Arial 600')

else:

canvas.create_text(x_text,400,text=str(rep),font='Arial 600')

def write_minutes(rep):

write(0,900,450,rep)

def write_seconds(rep):

write(1000,1900,1450,rep)

def time(num,remember):

while remember[0]

remember[1]+=1

write_seconds(remember[1])

if remember[1]==60:

remember[0]+=1

remember[1]=0

write_seconds(remember[1])

write_minutes(remember[0])

canvas.update()

canvas.after(1000)

remember=[0,0]

num=1

write_seconds(remember[1])

write_minutes(remember[0])

time(5,remember)

解决方法:

我无法想出一个简洁的方法来修改你的代码来做你想做的事情,所以决定将stop watch作为一个类来实现,使程序更加面向对象并避免使用一堆全局变量.

我没有彻底测试过这个问题,但是有足够的工作来给你提供这个想法.另请注意,我将一个Resume Button更改为一个在其间和Pause Button之间切换的按钮.这种方法不再需要添加另一个Button.

更新

我注意到当显示更新时,越来越多的对象不断添加到Canvas中可能存在的潜在问题.对于短时间运行的StopWatch实例而言,这通常不会成为问题,但可能会导致长时间运行的问题.

为了避免这种情况,我修改了代码以更新现有的相应Canvas文本对象(如果有).我还将Buttons移动到了StopWatch上方的顶部.

import time

import tkinter as tk

from functools import partial

PAUSE, RESUME = 0, 1

# Button callback functions

def _toggle(callback):

toggle_btn.state = 1 - toggle_btn.state

toggle_btn.config(**toggle_btn_states[toggle_btn.state])

callback()

def _stop():

stopwatch.cancel_updates()

toggle_btn.config(state=tk.DISABLED)

stop_btn.config(state=tk.DISABLED)

class StopWatch:

def __init__(self, parent, run_time, width, height):

self.run_time = run_time

self.width, self.height = width, height

self.font = 'Arial 600'

self.canvas = tk.Canvas(parent, width=width, height=height, bg='white')

self.canvas.pack()

self.canvas.create_text(950, 300, text=':', font=self.font)

self.running, self.paused = False, False

self.after_id = None

def start(self):

self.elapsed_time = 0 # In seconds.

self._display_time()

self.after_id = self.canvas.after(1000, self._update)

self.running, self.paused = True, False

def _update(self):

if self.running and not self.paused:

if self.elapsed_time == self.run_time:

_stop() # Sets self.running to False.

self.canvas.bell() # Beep.

else:

self.elapsed_time += 1

self._display_time()

if self.running: # Keep update process going.

self.after_id = self.canvas.after(1000, self._update)

def _display_time(self):

mins, secs = divmod(self.elapsed_time, 60)

self._write_seconds(secs)

self._write_minutes(mins)

def _write_minutes(self, mins):

self._write(0, 900, 450, 'mins', mins)

def _write_seconds(self, secs):

self._write(1000, 1900, 1450, 'secs', secs)

def _write(self, x_rec, y_rec, x_text, tag, value):

text = '%02d' % value

# Update canvas text widget if it has non-empty text.

if self.canvas.itemcget(tag, 'text'):

self.canvas.itemconfigure(tag, text=text)

else: # Otherwise create it.

self.canvas.create_text(x_text, 400, text=text, tag=tag, font=self.font)

def pause_updates(self):

if self.running:

self.paused = True

def resume_updates(self):

if self.paused:

self.paused = False

def cancel_updates(self):

self.running, self.paused = False, False

if self.after_id:

self.canvas.after_cancel(self.after_id)

self.after_id = None

# main

root = tk.Tk()

# Create a Frame for Buttons (allows row of them to be centered).

button_frame = tk.Frame(root)

button_frame.pack(side=tk.TOP)

# Create StopWatch and configure buttons to use it.

stopwatch = StopWatch(root, 5, 1900, 1000)

toggle_btn = tk.Button(button_frame)

toggle_btn_states = {}

toggle_btn_states.update({

PAUSE: dict(

text='Pause', bg='red', fg='white',

command=partial(_toggle, stopwatch.pause_updates)),

RESUME: dict(

text='Resume', bg='green', fg='white',

command=partial(_toggle, stopwatch.resume_updates))

})

toggle_btn.state = PAUSE

toggle_btn.config(**toggle_btn_states[toggle_btn.state])

toggle_btn.pack(side=tk.LEFT, padx=2)

stop_btn = tk.Button(button_frame, text='Stop', bg='blue', fg='white', command=_stop)

stop_btn.pack(side=tk.LEFT, padx=2)

stopwatch.start()

root.mainloop()

标签:python,tkinter

来源: https://codeday.me/bug/20190522/1152483.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值