0

hi guys.. ive tried to integrate a timer code (which works fine) into a tkinter window but im having errors. can u plz fix it 4 me? thanks.

this is the code i want to integrate.

import Tkinter as tk
    import time

    def start():
        global count_flag
        count_flag = True
        count = 0.0
        while True:
            if count_flag == False:
                break
            # put the count value into the label
            label['text'] = str(count)
            # wait for 0.1 seconds
            time.sleep(0.1)
            # needed with time.sleep()
            root.update()
            # increase count
            count += 0.1

    def stop():
        global count_flag
        count_flag = False


    # create a Tkinter window
    root = tk.Tk()

    # this will be a global flag
    count_flag = True

    # create needed widgets
    label = tk.Label(root, text='0.0')
    btn_start = tk.Button(root, text='start', command=start)
    btn_stop = tk.Button(root, text='stop', command=stop)

    # use a grid to place the widgets
    label.grid(row=0, column=0, columnspan=2)
    btn_start.grid(row=1, column=0, padx=5, pady=5)
    btn_stop.grid(row=1, column=1, padx=5)

    # start the event loop
    root.mainloop()

i want to integrate the above code in this tkinter a window but its not working.

import Tkinter as tk
    import time
    import sys,Queue
    import datetime as dt
    from Tkinter import *


    class stopwatch(Label):
        def __init__(self, parent, *args, **kwargs):
            Label.__init__(self, parent, *args, **kwargs)
            btn_start = Button(root, text='start', command=self.start)
            btn_stop = Button(root, text='stop', command=self.stop)
            canvas.grid(row=0, column=0, columnspan=2)
            btn_start.grid(row=1, column=0, padx=5, pady=5)
            btn_stop.grid(row=1, column=1, padx=5)

        def start(self):
            global count_flag
            count_flag = True
            count = 0.0
            while True:
                if count_flag == False:
                    break
                # put the count value into the label
                label['text'] = str(count)
                # wait for 0.1 seconds
                time.sleep(0.1)
                # needed with time.sleep()
                root.update()
                # increase count
                count += 0.1

        def stop(self):
            global count_flag
            count_flag = False


    # create a Tkinter window

    root=tk.Tk()

    canvas = tk.Canvas(root, width=1000, height=300, bg="#FFFFFF")
    stopwatch=stopwatch(root, text='0.0')
    stopwatch.pack(fill=BOTH, expand=1)
    canvas.pack()
    # this will be a global flag
    count_flag = True

    # create needed widgets
    #label = tk.Label(root, text='0.0')


    # use a grid to place the widgets
    #label.grid(row=0, column=0, columnspan=2)


    # start the event loop
    root.mainloop()
3
Contributors
4
Replies
5
Views
7 Years
Discussion Span
Last Post by jlm699
0

i want to integrate the above code in this tkinter a window but its not working.

What's not working? Are you getting an error? Your "tkinter a window" doesn't work for me. It never generates any windows and just hangs, so I'm not sure what you're looking for.

0

actually im going to present you another piece of code. forget the above codes. what i want is to display the the time elapsed when i click 'start'. thanks

import Tkinter as tk
import time

def start():
    global count_flag
    count_flag = True
    count = 0.0
    while True:
        if count_flag == False:
            break
        # put the count value into the label
        label['text'] = str(count)
        # wait for 0.1 seconds
        time.sleep(0.1)
        # needed with time.sleep()
        root.update()
        # increase count
        count += 0.1

def stop():
    global count_flag
    count_flag = False


# create a Tkinter window
root = tk.Tk()
canvas = tk.Canvas(root, width=1000, height=300, bg="#FFFFFF")
canvas.pack()
# this will be a global flag
count_flag = True

# create needed widgets
label = tk.Label(root, text='0.0')
btn_start = tk.Button(root, text='start', command=start)
btn_stop = tk.Button(root, text='stop', command=stop)

# use a grid to place the widgets
canvas.grid(row=0, column=0, columnspan=2)
btn_start.grid(row=1, column=0, padx=5, pady=5)
btn_stop.grid(row=1, column=1, padx=5)

# start the event loop
root.mainloop()
0

You need to place the label somewhere like you did with the buttons:

label.grid(row=1, column=2)

Also change:

while True:
    if count_flag == False:

To:

while count_flag:

Although that's not necessary, it's proper use of while loops.

0

Here's a working version of the classed code from above (I incorporated adam's suggestions from above and modified some behavior slightly):

import Tkinter as tk
import time

class stopwatch( object ):
    def __init__(self, parent, *args, **kwargs):
        self.parent = parent
        self.count_flag = False
        canvas = tk.Canvas(self.parent, *args, **kwargs)
        canvas.pack()
        # create needed widgets
        self.counter = tk.Label(self.parent, text='0.0')
        btn_start = tk.Button(self.parent, text='start', command=self.start)
        btn_stop = tk.Button(self.parent, text='stop', command=self.stop)
        # use a grid to place the widgets
        canvas.grid(row=0, column=0, columnspan=2)
        self.counter.grid(row=0, column=0, columnspan=2)
        btn_start.grid(row=1, column=0, padx=5, pady=5)
        btn_stop.grid(row=1, column=1, padx=5)

    def start(self):
        self.count_flag = True
        count = 0.0
        while self.count_flag:
            # put the count value into the label
            self.counter['text'] = str(count)
            # wait for 0.1 seconds
            time.sleep(0.1)
            # needed with time.sleep()
            self.parent.update()
            # increase count
            count += 0.1

    def stop(self):
        self.count_flag = False

def main():
    # create a Tkinter window
    root = tk.Tk()
    sw = stopwatch( root, width=50, height=40, bg="#A3A3A3" )
    # start the event loop
    root.mainloop()

if __name__ == '__main__':
    main()
This article has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.