如何在应用程序使用Tkinter加载时创建加载屏幕

2024-06-28 02:31:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下一个问题。我对这个多线程的东西是新手。我制作了一个程序,将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窗口中的所有操作后出现。 首先,我想看看这两个方法是否同时执行,因此我会命令加载屏幕方法在程序加载时出现,但它甚至没有出现

有解决办法吗?提前谢谢


Tags: 方法程序target屏幕tkinterstdoutsysscreen
1条回答
网友
1楼 · 发布于 2024-06-28 02:31:57

你可能在找这样的东西

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()

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

相关问题 更多 >