我在这里问了这样一个问题: How to adjust Label in tkinter?
但是事件加载了,最终python无法处理事件,并且崩溃了。
如何避免这种情况发生?也许是因为它处于循环中,所以它们超载了吗? 我不知道如何使它不崩溃。
这是我的代码:
from tkinter import *
from time import *
print("""This is an app that basically you time the amount of time someone takes to fall from a cliff, then we will
use an equation to tell you how high the cliff is.
This is a recreation of the app Mark Rober created, by The way""")
window = Tk()
window.title("falling app")
window.geometry("700x700")
window.configure(bg = "sky blue")
"""We will use time import for this"""
mins = 0
seconds = 0
secs = Label(window, text = seconds, font = ("verdana", 60))
secs.place(relx = 0.48, rely = 0.35, anchor = "nw")
def start():
mins = 0
seconds = 0
while seconds != 60:
sleep(1.00)
seconds+= 1
secs.configure(text = seconds)
if seconds == 60:
mins = mins+1
seconds = 0
此行:secs.configure(text = seconds)
是罪魁祸首。我敢肯定。
提前谢谢!!!!!!!
编辑:这是它的外观,它空白了,并且没有响应。
答案 0 :(得分:0)
程序挂起的原因是因为您创建了一个无限循环,从而阻止tkinter能够处理事件。 Tkinter是单线程的,并且仅在能够处理稳定的事件流时才可以工作。您已经通过以下无限循环避免了这种情况:
while seconds != 60:
sleep(1.00)
seconds+= 1
secs.configure(text = seconds)
一种快速的解决方法是在该循环中调用update
。您的程序仍将冻结一秒钟,然后在几秒钟内变为活动状态,然后再次冻结。这是编写tkinter程序的非常低效的方式。
更好的方法是使用after
方法来连续安排您的函数每秒运行一次。该站点上可能有数十种而不是数百种该技术的示例。简而言之,它看起来像这样:
def update_clock()
global mins, seconds
seconds += 1
if seconds > 60:
seconds = 0
mins += 1
secs.configure(text = seconds)
window.after(1000, update_clock)
然后您在start
方法中调用一次此函数,它将继续每秒运行一次,直到程序退出:
def start():
global mins, seconds
mins = 0
seconds = 0
update_clock()