我是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()
我知道代码还没有完善(特别是函数停止和清除)。
答案 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()
答案 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()