Tkinter顶层小部件不显示python

2024-04-25 00:22:24 发布

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

直到我完成了我的python和其他窗口小部件的嵌入工作,我才能够在窗口中显示其他窗口小部件。这个框架出现了,它正确地循环了我的其他代码,但是text/progressbar小部件只有在我以某种方式中断循环时才会出现。框架最终被成功摧毁。见下文。在

下面是我的顶层代码:

class ProgressTrack:
    def __init__(self, master, variable, steps, application):
        self.progress_frame = Toplevel(master)
        self.progress_frame.geometry("500x140+30+30")
        self.progress_frame.wm_title("Please wait...")
        self.progress_frame.wm_iconbitmap(bitmap="R:\\CHPcomm\\SLS\\PSSR\\bin\\installation_files\\icon\\PSIDiaryLite.ico")

        progress_text = Canvas(self.progress_frame)
        progress_text.place(x=20,y=20,width=480,height=60)
        progress_text.create_text(10, 30, anchor=W, width=460, font=("Arial", 12), text="Please do not use " + application + " during execution. Doing so, will interrupt execution.")

        self.progress_bar = Progressbar(self.progress_frame, orient='horizontal', length=440, maximum=steps, variable=variable, mode='determinate')
        self.progress_bar.place(x=20,y=100,width=450,height=20)

我从以下类的一个实例调用它,该类是在用户单击主窗口上的按钮时创建的:

^{pr2}$

Tags: 代码textselfmaster框架application部件place
2条回答

根据上面@Eric Levieil的链接,只需将以下内容添加到我的代码中即可:

self.progress.progress_frame.update()

全部更改:

^{pr2}$

谢谢你,埃里克!在

你得知道tkinter是单线程的。此外,窗口(以及您在屏幕上看到的所有内容)只在空闲(不做任何事情)或调用w.update_idletasks()时更新其外观,其中w是任何小部件。这意味着当你在一个循环中,改变一个进度条,在循环结束之前,屏幕上不会发生任何事情。在

所以你的新代码现在可以

    while var:
        #MY OTHER CODE
        self.progress.progress_bar.step()
        self.progress.progress_frame.update_idletasks()
    self.progress.progress_frame.destroy()

相关问题 更多 >