【问题标题】:Python: How to Open a Window (tkinter) Before Loading an Initialization FilePython:如何在加载初始化文件之前打开一个窗口(tkinter)
【发布时间】:2021-06-16 04:39:59
【问题描述】:

我正在开发的 Python 应用程序从网上加载了一个较大的初始化文件。这个过程需要很长时间,以至于用户在窗口弹出之前重新启动应用程序。我正在寻找的是一种在应用程序加载网络文件之前弹出打开应用程序 tkinter 窗口(有或没有加载消息)的方法。这将使用户知道正在发生的事情,并防止他们重新启动应用程序。

换句话说,我如何在调用 mainloop() 打开窗口之后,但在用户界面空闲等待点击之前自动运行一些代码?

我目前用来弹出窗口的代码:

winWid = 650
winHei = 390
window = tkinter.Tk()
window.geometry(str(winWid) + "x" + str(winHei))
window.title("AppTitle")
window.configure(bg="#FFFFDC")

# Load Initialization file - goal is to have this automatically happen after window opens

window.mainloop()

编辑: 启动一个初始化线程可能会解决问题,但是当我想要做的只是用网络文件的内容填充 gui 中的一个列表时,这似乎过于激烈了。

【问题讨论】:

  • 我建议使用两个线程,但我不认为tkinter 会在两个不同的线程之间进行通信。
  • 听起来你需要看看threading
  • 这不是程序最初使用 splashscreens 的原因 - 你可以在另一个线程加载配置时出现一个小通知,然后关闭并进入主应用程序跨度>
  • 添加第二个线程似乎对我的小应用程序来说是一个激进的措施。我希望有一些更直接的东西。
  • 尝试将加载任务放在一个函数中,例如loading_configs() 并在 window.mainloop() 之前致电 window.after(100, loading_configs)。请注意,如果loading_configs() 是一项耗时的任务,它仍然会阻止您与窗口进行交互。

标签: python user-interface tkinter


【解决方案1】:

答案来自@CoolCloud 和@acw1668 以after() 方法的形式。

window.after(1, loadAndDisplay) # Wait for a single millisecond before calling
window.mainloop()               # Pop open the window

after(milliseconds,function,*args) 将在毫秒计时器到期后启动给定函数。通过将计时器设置为一毫秒,该函数几乎没有延迟地启动。文档表明延迟 0 将在 mainloop 完成设置后立即启动该方法。然而,在实践中,我发现只要调用mainloop,零就会导致调用发生。

更多详情可在此链接中找到:tkinter: how to use after method

【讨论】:

    【解决方案2】:

    您如何让buttonprompt 他们启动该过程,然后他们可以等待它完成而不是一直重新启动。例如:就像在一个应用程序中,他们首先要求您下载或执行任何需要完成的操作。

    from tkinter import *
    root = Tk()
    
    
    def process():
        pass
        #do your process here
        
        
    btn1 = Button(root, text="Start process",command=process)
    btn1.pack()
    
    root.mainloop()
    

    【讨论】:

    • init 文件填充了一个支持应用程序主要用途的列表。换句话说,没有文件,应用程序什么也不做。这就是为什么我想在应用启动之前开始这个漫长的过程,而不是让用户等待他们启动它。
    • 哦,让我看看我能做什么
    • 但是,如果应用程序在没有文件启动它并执行任务或不启动它的情况下什么都不做
    • gui 可以在没有文件数据的情况下存在。将大量数据加载到列表中,我希望它能够自动加载,同时仍尽可能快地显示窗口。
    • 好吧,我想我能破解这个
    猜你喜欢
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 2021-09-24
    • 2013-04-16
    • 1970-01-01
    相关资源
    最近更新 更多