我想为我的一个应用程序中的函数创建一个“加载”窗口。我试过进度条,但我想试试这个,看看它有什么不同。这个想法是在点击按钮时打开一个新窗口。新窗口将有“加载”一词,在短时间延迟后将有一个句号“.”。我已经使用了time.sleep()
函数,但它的性能并没有达到应有的水平
我将包括以下代码:
from tkinter import *
from tkinter.ttk import *
from tkinter import Button, Tk, HORIZONTAL
import time
def new_window():
variable_text = "Loading"
new_windy = Toplevel(main_window)
new_windy.title("New_Windy")
new_windy.geometry("200x200")
for i in range(10):
time.sleep(0.3)
new_windy.update_idletasks()
variable_text += "."
label = Label(new_windy, text=variable_text)
label.pack()
main_window = Tk()
main_window.title("AWESOME_SAUCE")
main_window.geometry('600x600')
button = Button(main_window, text="click_me", command=new_window)
button.pack()
main_window.mainloop()
上面的代码在点击按钮时创建了一个新窗口,但是它没有用附加的句号替换每个迭代中的“loading”一词,而是创建了10个版本的“loading”一词,并用连续的句号堆叠起来
我有两种方法可以做到这一点。一种是使用单词和
after()
的列表,另一种是在句子末尾添加点方法1: 首先,创建一个包含所有过渡词的列表:
现在,您需要为该列表编制索引,并调用标签上的每个项目,如:
方法2: 还有另一种方法,就像您使用
+= '.'
所做的那样。这将是:现在来解释一下:
这是因为
time.sleep()
与mainloop()
发生了混乱,导致了无反应。因此GUI会冻结,因此我们必须使用不冻结GUI的after()
。不仅time.sleep()
,而且while
和for
循环会与mainloop()
发生混乱,导致GUI无响应这是因为每次运行代码时,都会创建一个带有文本“Loading”的新标签,您要做的是,创建一次文本,然后使用
config()
在以后更改文本事实上,您的导入稍后会给您带来麻烦,您正在使用
ttk
中的小部件过度编写tkinter小部件,因此更改您的导入语句并相应地调整代码,如:现在,如果您想要tkinter小部件,请使用
tk.Label()
或者如果您想要ttk
小部件,请使用ttk.Label()
等等使用label.config()编辑已打包的标签
根据你的“加载”的要求,当窗口弹出时先显示,然后在某个时候出现“。”之后,我们可以把它看作是两个过程。在第一个中,我们需要打印“加载”,然后打印“.”。为此,我将For循环保持为迭代两次,第二次使用time.sleep()在出现“.”之前提供一些时间
请参考以下修改代码
相关问题 更多 >
编程相关推荐