Python Tkinter界面应用开发-05 拉出

视频教程观看地址:http://study.163.com/course/courseMain.htm?courseId=1003853008

为了能够实现计时,我们要创建一个新的方法,命名为update.为了演示这个函数的调用情况,我们在这里打印出一个Update字符串。

 
 
    def update(self):         print('updated')
接着,我们希望我们的Update函数每秒被调用一次,这应该如何实现呢。不知道大家还记得我们的全局应用程序变量master,我们可以通过它,来使Update函数每秒调用一次。它有一个函数after,它的第一个参数是毫秒数。所以1000毫秒是一秒。然后我们希望每隔一秒调用一次它,所以第二个参数是self.update:
    def update(self): print('updated')         self.master.after(1000, self.update)
现在,我们来到init函数中调用它: 在所有的控件都创建之后,我们调用self.update:
        self.build_gird() self.build_banner() self.build_buttons() self.build_timer()         self.update()
好的,所以现在运行一下。你看,每隔一秒窗口就打印一次update: 实际上,在这个方法中,我还需要处理计时器的递减以及计时器的重置。所以,首先,让我们计算计时器剩余的时间。我们会说:
    def update(self):         time_left = self.time_left.get()
然后,如果计时器在运行并且还有剩余的时间:
        if self.running and time_left:   self.master.after(1000, self.update)
那么,我们就要让时间减一秒。所以,
        if self.running and time_left:             self.time_left.set(time_left-1)
否则,我们就暂停计时器。
        if self.running and time_left: self.time_left.set(time_left-1)         else:             self.stop_timer()
这样。它就会停止计时,并且重置按钮。 那么接下来,我们来对计时器的标签进行一些操作,实际上,我们现在已经在我们的build_timer函数中绘制了计时器的标签。
    def build_timer(self): timer = tkinter.Label( self.mainframe, text = self.timer_text.get(), font = ('微软雅黑', 36) )
在构造函数中,我们也创建了一个用于显示时间的的字符串变量。
        self.timer_  = tkinter.StringVar()
所以现在,我们想告诉这个变量,当这个变量被写入数据时,或者说,被赋值时,我们就调用build_timer函数,所以w意味着‘写入’。
        self.timer_text = tkinter.StringVar()         self.timer_text.trace('w', self.build_timer)
所以现在build_timer将被自己调用。但它被自己调用的时候,我们希望它发送更多的信息。我们不得不使用args来记录这些信息,我们不会用到这些信息,但如果不补充这个参数,Python的语法是不允许的:
    def build_timer(self, *args): timer = tkinter.Label(
接下来,让我们来更新这个标签。首先,我们需要创建一个函数,来计算剩下的分钟数和秒数。它需要一个参数:秒数。 我想返回的分钟,所以,这里返回的应该是秒除以60.还有秒模60.
    def minutes_seconds(self, seconds): return int(seconds/60), int(seconds%60)   def update(self):
所以在Update函数中,让我们转换下秒数.
    def update(self): time_left = self.time_left.get() if self.running and time_left: minutes, seconds = self.minutes_seconds(time_left)
然后我们要做就是对文本变量time_text写入数据。self.timer_text.set()。 这里我们还需要为定时器文本设置一个格式。通常我们会这样做,因为我们想要分和秒,所以需要用零来填充两个数字。
            minutes, seconds = self.minutes_seconds(time_left)             self.timer_text.set(                 '{:02}:{:0<2}'.format(minutes, seconds)             )
然后在else语句之后.还需要在设置一次文本,所以复制这里,然后粘贴到else语句之后,然后修改为DEFAULT_GAP:
        else:             minutes, seconds = self.minutes_seconds(DEFAULT_GAP)             self.timer_text.set(                 '{:0<2}:{:0<2}'.format(minutes, seconds)             ) self.stop_timer()
我们运行试试效果: 你看,当我们开始时,计时递减,点击stop按钮,重置计时器,没问题。 接着。我们再来测试,当25分钟过后,是否正确,但这里,我不想等待25分钟。所以让我们修改默认的计时,所以,来到文件的顶部,修改值为5:
DEFAULT_GAP = 25 * 60 DEFAULT_GAP = 5
再次运行。 当计时结束时,重置。Stop按钮被禁用。 更多精彩内容尽在视频中! 本文固定链接:http://www.oxox.work/web/tkinter/pull/ | 虚幻大学

查看原文:http://www.oxox.work/web/tkinter/pull/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚坏叔叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值