[Tutor] Clock in tkinter?

Mic o0MB0o at hotmail.se
Wed Nov 16 17:59:12 CET 2011


Thanks for your quick answer. Hmm, I never thought that didn’t have to use a global variable.
When you mentioned time.localtime() method, did you mean that I should convert the time to numbers and then write an if statement?
Like, say that I make 1 hour equivalent to the integear clock= 1.  Then I write an if statement that says that the computer should print “Hi”
if clock>1:
    print (“hi”)

Did I understand that correctly?


Thanks for your answers!

Mic


From: Wayne Werner 
Sent: Wednesday, November 16, 2011 5:17 PM
To: Mic 
Cc: tutor at python.org 
Subject: Re: [Tutor] Clock in tkinter?

On Wed, Nov 16, 2011 at 9:28 AM, Mic <o0MB0o at hotmail.se> wrote:

  Hi!
  It is no homework, in fact am I working ahead of class. I have now, after five minutes thinking, solved my problem, but a new problem has risen.
  But to begin with, here is how I solved the problem:



  from tkinter import*
  import time

  the_time=''



  class Window(Frame):
      def __init__(self,master):
          super(Window,self).__init__(master)
          self.grid()
          self.create_widgets()
          

      def create_widgets(self):

          #Create a hello button:
          hej=self.hellobttn=Button(self,text="Hey")
          self.hellobttn.grid(row=0, column=0)

          #Create a label that displays time:
          self.display_time=Label(self, text=the_time)
          self.display_time.grid(row=0, column=1)

          def change_value_the_time():
              global the_time
              newtime = time.strftime('%H:%M:%S')
              if newtime != the_time:
                  the_time= newtime
                  self.display_time.config(text=the_time, font="40")
              self.display_time.after(20, change_value_the_time)

If you're going to put a function inside your class (since you're using self in there, I'm sure that's what you meant to do), you should change it to:

    def change_value_the_time(self):

and call it with

    self.display_time.after(20, self.change_value_the_time)

But your program also has unnecessary code. First, since you have a class then instead of using a global, you should simply declare `self.the_time = ''` in your __init__ for your class.

Personally, I would have written the function more like this:

def update_time(self):
    self.display_time.config(text=time.strftime('%H:%M:%S'), font='40')
    self.after(20, self.update_time)

Then at the end of my __init__ function I would call self.update_time()

I'm not sure how that will work with your current setup, though.

  I found some help on the internet about making a clock, although I had to modify a lot of the code to fit my own code and window.
  Now to my next question. Say that I want a text “Hi, how are you?” to be printed when the time passes 15:00:00 each day. How do I do that?

  At first I thought that I could just write an if statement. Like:

  if the_time>15:00:00:
      print (“Hi, how are you?”)

  But it is obviously not working.

You can write one very similar to that. Take a look at the time.localtime method.


  Thank you for your help! Another question, am I supposed to add tutor at python.org; as copy? You did that, right?

Yes - if you click "reply to all" in your email client, that will automatically send it to tutor at python.org 

HTH,
Wayne
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20111116/fbe221f6/attachment-0001.html>


More information about the Tutor mailing list