当前位置: 首页 > 知识库问答 >
问题:

Time.sleep()函数放置

傅翰池
2023-03-14

我遇到的问题是,当我试图保持屏幕上的第一个函数(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()

共有2个答案

曹建明
2023-03-14

因此,我们定义了三个函数:firstScreensecondScreenchangeScreen。想法是运行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()

我希望有帮助!

夹谷浩宕
2023-03-14

时间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编程的新手,当我将函数放置在构造函数调用的函数的开头时,面板中的组件丢失了,但在结尾处却可以正常工作。参见下面的代码: 将函数放置在方法的开头或结尾可能是什么问题。 问题答案: 正如评论和其他答案中已经指出的那样: 添加完所有组件后,您应该在最后致电。 这不会直接回答您的问题。您的问题的答案是: 是的,这有所作为 。如果您在添加所有组件之前进行调用,则在某些情况下,