【问题标题】:How to create loading screen while app is loading with Tkinter如何在使用 Tkinter 加载应用程序时创建加载屏幕
【发布时间】:2021-03-16 23:05:21
【问题描述】:

我有下一个问题。我是这个多线程的新手。我制作了一个程序来将 pdf 转换为 docx,反之亦然。问题是我想在转换发生时放置一个加载屏幕,但我找不到同时执行加载屏幕和方法的方法。我发现我可以使用多线程,但我仍然不能同时执行这两种方法。我有这个:

Thread(target = Conversor()).start()
Thread(target = loading_screen()).start()

Conversor 是一个具有__init__ 的对象,它会打开一个 tkinter 窗口。有了这段代码,加载画面,就是这样的:

def loading_screen():
    chars = "/—\|" 
    for char in chars:
        sys.stdout.write('\r'+'loading...'+char)
        time.sleep(.1)
        sys.stdout.flush()

甚至没有出现。即使确实如此,它也会在我完成 tkinter 窗口中的所有内容后出现。 首先,我想看看这两个方法是否同时执行,所以我会命令loading_screen方法在程序加载时出现,但它甚至没有出现。

有什么解决办法吗?提前致谢!

【问题讨论】:

    标签: python multithreading object tkinter


    【解决方案1】:

    您可能正在寻找类似的东西

    from tkinter import *
    import sys
    from threading import Thread
    import time
    
    class Conversor(Tk):
        def __init__(self):
            super().__init__()
            self.loaded=False
            self.geometry('400x300')
            Thread(target=self.loading_screen).start()
            label=Label(self)
            label.pack()
            for i in range(10000): #Increase load time
                label['text']+=str(i)
                if i%100==0:
                    label['text']+='\n'
    
        def loading_screen(self):
            idx=0
            while not self.loaded:
                chars = r"/—\|" 
                sys.stdout.write('\r'+'loading...'+chars[idx])
                sys.stdout.flush()
                if idx==len(chars)-1:
                    idx=0
                else:
                    idx+=1
                time.sleep(.1)
            else:
                sys.stdout.write('\nloaded')
    
        def start(self):
            self.loaded=True
            self.mainloop()
    
    if __name__=='__main__':
        conversor=Conversor()
        conversor.start()
    

    loading_screen 线程在 Tk 初始化后立即被调用,并且标志 self.loaded 设置为 False。在 mainloop() 开始指示 GUI 已加载之前,self.loaded 变为 True

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 2010-12-02
      • 1970-01-01
      相关资源
      最近更新 更多