我遇到的问题是,当我试图保持屏幕上的第一个函数(StartUpScr)小部件3秒钟使用time.sleep(3)删除所有它的小部件放在屏幕上,然后继续放置下一个函数(MenuScr)小部件。我已经成功地使用销毁()删除第一个小部件,并用第二个小部件替换它们,但由于某种原因,当输入time.sleep(3)在函数和主程序的任何地方,而不是第一个小部件停留3秒钟然后被替换,它会延迟程序的开始,产生一个空白屏幕,然后迅速闪过第一个屏幕到第二个屏幕上。
from tkinter import *
import tkinter
import time
window = tkinter.Tk()
window.title("BINARY-SUMS!!!")
window.geometry("1000x800")
window.wm_iconbitmap('flower3.ico')
window.configure(background='lavender')
def StartUpScr():
StartUpScr = tkinter.Label(window, text="FIRST-SCREEN!!!",fg = "Aqua",bg = "Lavender",font = ("Adobe Gothic Std B", 90, "bold" )).pack()
StartUpLabel = tkinter.Label(window, text="Developed by Robert Bibb 2016",bg = "Lavender",font = ("Calibri Light (Headings)", 10, "italic" ))
StartUpLabel.pack()
StartUpLabel.place(x = 400, y = 775)
def MenuScr():
StartUpScr = tkinter.Label(window, text="SECOND-SCREEN!!!",fg = "green",bg = "Lavender",font = ("Adobe Gothic Std B", 85, "bold" ))
StartUpScr.pack()
if __name__ == "__main__":
StartUpScr()
time.sleep(3)
for widget in window.winfo_children():
widget.destroy()
MenuScr()
因此,我们定义了三个函数:firstScreen
、secondScreen
和changeScreen
。想法是运行firstScreen
,3秒钟后运行changeScreen
,这将破坏当前父窗口(master
),并创建下一个全新的父窗口(master2
),该窗口将调用具有全新世界的secondScreen
)。这就是它将如何发生:
from tkinter import *
root = Tk()
import time
class App:
def __init__(self, master):
self.master = master
self.master.geometry("500x500-500+50")
def firstScreen(self):
self.master.title("FIRST SCREEN")
self.label1 = Label(self.master, width=50, height=20,
text="This is my FIRST screen", bg='red')
self.label1.pack()
self.master.after(3000, self.changeScreen)
def secondScreen(self):
self.label2 = Label(self.master, width=50, height=20,
text="This is my SECOND screen", bg='yellow')
self.label2.pack()
def changeScreen(self):
self.master.destroy()
self.master2 = Tk()
self.master2.title('SECOND SCREEN')
myapp = App(self.master2)
myapp.secondScreen()
myapp = App(root)
myapp.firstScreen()
我希望有帮助!
时间sleep()在这里不起作用,因为它会停止程序的执行,您必须在。。。在GUI编程中使用睡眠也是一种不好的做法。
root.after(time_delay, function_to_run, args_of_fun_to_run)
所以在你的情况下
def destroy():
#destroy here
for widget in window.winfo_children():
widget.destroy()
在if语句之后-
if __name__ == "__main__":
StartUpScr()
window.after(3000, destroy)
MenuScr()
描述 (Description) 方法sleep()暂停执行给定的秒数。 参数可以是浮点数,以指示更精确的睡眠时间。 实际的暂停时间可能小于请求的时间,因为任何捕获的信号将在执行该信号的捕获例程后终止sleep()。 语法 (Syntax) 以下是sleep()方法的语法 - time.sleep(t) 参数 (Parameters) t - 这是要暂停的执行秒数。 返回值 (Return Va
问题内容: 我等待5秒钟后试图删除文本框内的文本,但是该程序无法运行,并且会休眠其他所有内容。还有一种方法可以让我的文本框进入睡眠状态,以便在冻结文本时可以运行其他代码? 问题答案: 您确实应该使用Tkinter after方法而不是。 在另一个stackoverflow问题中有一个使用after方法的示例。 这是使用after方法的脚本的修改版本:
问题内容: 我想在我的多线程Python应用程序中定期执行操作。我已经看到了两种不同的方法 要么 一种方法比另一种方法有优势吗?是使用更少的资源还是与其他线程和GIL更好地协作?哪一个使我的应用程序中的其余线程响应更快? (假设有一些外部事件集或,我愿意在关闭时等待完整的延迟) 问题答案: 使用将具有更高的响应速度,因为在设置时,您将立即退出while循环。使用,即使在设置了事件之后,您也将在通话
问题内容: 鉴于此,我从PyQt5模块开始,我仍在慢慢了解其背后的逻辑。就是说,我有一个我找不到答案的问题,希望您能为我提供帮助。 我有这个脚本: 在网上搜索时,我发现问题与“ time.sleep(2)”有关,也就是说,该指令阻止了直到两秒钟后才出现的窗口。 事实是,我想花一两秒钟的时间来显示该小节的完成,然后重置并继续执行“ def run(self)”中包含的下一条语句。 因此,有没有一种方
问题内容: 当我转到页面时,第一个示例是hello world程序。当我在python上运行它时,我看不出与正常的任何区别, 有人可以告诉我区别并举一个简单的例子吗? 我故意将时间从1秒增加到5秒,希望看到一些特别的东西,但我没有。 问题答案: 您不会看到什么特别的东西,因为您的代码中没有太多异步工作。但是,主要区别在于它是阻塞的,并且是非阻塞的。 当被调用时,它会阻止脚本的整个执行,它会被搁置,
问题内容: 我是Java GUI编程的新手,当我将函数放置在构造函数调用的函数的开头时,面板中的组件丢失了,但在结尾处却可以正常工作。参见下面的代码: 将函数放置在方法的开头或结尾可能是什么问题。 问题答案: 正如评论和其他答案中已经指出的那样: 添加完所有组件后,您应该在最后致电。 这不会直接回答您的问题。您的问题的答案是: 是的,这有所作为 。如果您在添加所有组件之前进行调用,则在某些情况下,