如何在tkinter中显示函数的值

时间:2016-05-22 15:59:31

标签: python function python-3.x tkinter stopwatch

我是python和tkinter的新手,我决定制作秒表。 我已经找了很多有用的信息,但是我还没有找到如何在tkinter中显示函数的值。这是我目前的代码:

import time
from tkinter import*
import os

root = Tk()

def clock(event):
    second = 0
    minute = 0
    hour = 0  
    while True:
        time.sleep(0.99)
        second +=1
        print(hour,":",minute,":",second)
    return

def stop(event):
    time.sleep(1500)

def clear(event):
    os.system('cls')


button1 = Button(root, text="Start")
button2 = Button(root, text="Stop")
button3 = Button(root, text="Clear")

button1.bind("<Button-1>", clock)
button2.bind("<Button-1>", stop)
button3.bind("<Button-1>", clear)

button1.grid(row=2, column=0, columnspan=2)
button2.grid(row=2, column=2, columnspan=2)
button3.grid(row=2, column=4, columnspan=2)


root.mainloop()

我知道代码还没有完善(特别是函数停止和清除)。

2 个答案:

答案 0 :(得分:0)

您可以考虑使用回调函数(当发生某些事情时调用您的函数?例如,单击按钮时)

  

在Tkinter中,回调是由Tk调用的Python代码   有事情发生。例如,Button小部件提供了一个命令   用户单击按钮时调用的回调。你也用   带有事件绑定的回调。

     

您可以使用任何可调用的Python对象作为回调。这包括   普通函数,绑定方法,lambda表达式和可调用函数   对象。本文档简要讨论了这些替代方案。   例:   要将函数对象用作回调,请将其直接传递给Tkinter。

来自Tkinter import *

def callback():
    print "clicked!"

b = Button(text="click me", command=callback)
b.pack()

mainloop()

http://effbot.org/zone/tkinter-callbacks.htm

答案 1 :(得分:0)

您的示例代码中不清楚您要显示哪个功能的值。

无论如何,在tkinter中完成类似操作的好方法是创建其StringVar control class的实例,然后将其指定为另一个小部件的textvariable选项。完成此操作后,StringVar实例值的任何更改都将自动更新关联的窗口小部件文本。

下面的代码说明了这一点:

import os
import time
import tkinter as tk

class TimerApp(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master=None)
        self.grid()
        self.create_widgets()
        self.elapsed = 0
        self.refresh_timer()
        self.after_id = None  # used to determine and control if timer is running

    def create_widgets(self):
        self.timer = tk.StringVar()
        self.timer.set('')
        self.timer_label = tk.Label(self, textvariable=self.timer)
        self.timer_label.grid(row=1, column=2)

        self.button1 = tk.Button(self, text="Start", command=self.start_clock)
        self.button1.grid(row=2, column=0, columnspan=2)
        self.button2 = tk.Button(self, text="Stop", command=self.stop_clock)
        self.button2.grid(row=2, column=2, columnspan=2)
        self.button3 = tk.Button(self, text="Clear", command=self.clear_clock)
        self.button3.grid(row=2, column=4, columnspan=2)

    def start_clock(self):
        self.start_time = time.time()
        self.after_id = self.after(1000, self.update_clock)

    def stop_clock(self):
        if self.after_id:
            self.after_cancel(self.after_id)
            self.after_id = None

    def clear_clock(self):
        was_running = True if self.after_id else False
        self.stop_clock()
        self.elapsed = 0
        self.refresh_timer()
        if was_running:
            self.start_clock()

    def update_clock(self):
        if self.after_id:
            now = time.time()
            delta_time = round(now - self.start_time)
            self.start_time = now
            self.elapsed += delta_time
            self.refresh_timer()
            self.after_id = self.after(1000, self.update_clock)  # keep updating

    def refresh_timer(self):
        hours, remainder = divmod(self.elapsed, 3600)
        minutes, seconds = divmod(remainder, 60)
        self.timer.set('{:02d}:{:02d}:{:02d}'.format(hours, minutes, seconds))

app = TimerApp()
app.master.title('Timer')
app.mainloop()