如何在python中每隔几秒在tkinter窗口中更改一行文本[重复]
Posted
技术标签:
【中文标题】如何在python中每隔几秒在tkinter窗口中更改一行文本[重复]【英文标题】:How to change a line of text in a tkinter window every few seconds in python [duplicate] 【发布时间】:2019-12-29 17:43:48 【问题描述】:我试图在 tkinter 窗口中每隔几秒显示一个字典中的随机短语。
我可以通过在 tkinter 的文本框中运行一个变量来显示该短语,但我似乎无法让该短语在所需的时间间隔内更改。
到目前为止,这是我拥有的代码。
import time
import sys
import random
import tkinter as tk
from tkinter import *
""" DICTIONARY PHRASES """
phrases = ["Phrase1", "Phrase2", "Phrase3"]
def phraserefresh():
while True:
phrase_print = random.choice(phrases)
time.sleep(1)
return phrase_print
phrase = phraserefresh()
# Root is the name of the Tkinter Window. This is important to remember.
root=tk.Tk()
# Sets background color to black
root.configure(bg="black")
# Removes the window bar at the top creating a truely fullscreen
root.wm_attributes('-fullscreen','true')
tk.Button(root, text="Quit", bg="black", fg="black", command=lambda root=root:quit(root)).pack()
e = Label(root, text=phrase, fg="white", bg="black", font=("helvetica", 28))
e.pack()
root.mainloop()
运行此代码的结果是 tkinter 窗口永远不会打开,而不是更改显示的文本。我知道我一定是在看一些简单的东西,但我似乎无法弄清楚是什么。提前感谢您的帮助!
【问题讨论】:
【参考方案1】:由于while True
循环,此函数永远不会返回:
def phraserefresh():
while True:
phrase_print = random.choice(phrases)
time.sleep(1)
return phrase_print # This line is never reached
您可以使用after()
方法设置重复延迟并更改标签文本。
def phrase_refresh():
new_phrase = random.choice(phrases)
e.configure(text=new_phrase) # e is your label
root.after(1000, phrase_refresh) # Delay measured in milliseconds
【讨论】:
感谢您的帮助!虽然当运行该代码时,我要么根本没有得到这个短语,只是数字和函数名,要么是一个错误说 e 没有定义。我做错了什么? @Megastrik3 尝试将函数声明放在声明e
的行之后(就在 mainloop()
之前)
其实没关系。我得到了它!您发布的代码不起作用的原因是我的 e = Label... 和 e.pack() 行的顺序错误。我通过在这两行之间添加phrase_refresh() 来修复它。所以它现在可以工作了!非常感谢您的时间和帮助!
@Megastrik3 再想一想,我只是在标签(“标签”)这个词中有一个拼写错误,我的大脑就是不让我看到。 掌心。所以现在它正在工作。非常感谢您的提问!
是的,会做到的@Kristen_G!很高兴你能弄清楚! ?以上是关于如何在python中每隔几秒在tkinter窗口中更改一行文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章