Python / Tkinter-如何创建窗口的无限副本?

时间:2019-01-14 01:12:12

标签: python tkinter

我想制作一个不断创建的窗口,制作自己的许多副本。

我试图做一个无限循环,每次都调用该函数,但这是行不通的。我也尝试在函数中创建一个窗口,但是在关闭旧窗口后,它只是重新创建了窗口。这是否意味着该窗口无法复制?

import tkinter 
import os


def win():
    A = True
    while A == True:
        window = tkinter.Tk()
        window.title('WHOOPS')
        window.geometry('100x100')
        window.configure(background= "green")
        lbl = tkinter.Label(window, text= 'whoops', bg= 'red')

        window.mainloop()


quit = False
while quit == False:
    win()

有人可以告诉我如何在不对整个新块进行硬编码的情况下复制窗口吗,例如,针对win2()和win3()的每个函数添加新功能?

用户应该能够看到几乎无限的窗口流,这些流只能通过使用KeyboardInterrupt或关闭shell /解释器来停止。

1 个答案:

答案 0 :(得分:0)

如果在无限循环中创建窗口,则永远不会将控制权返回给main_loop。您可以执行以下操作之一:

#1 您可以将整数初始化为0,并且在特定计数更新根之后,然后再次继续创建窗口,并且在特定计数更新根之后,它继续...

import tkinter as tk
import time

def startInfiniteLoop():
    i = 0
    otherFrame = []
    while True:
        otherFrame.append(tk.Toplevel())
        i += 1
        if i%1000 == 0:
            time.sleep(1)
            root.update()

root = tk.Tk()
button_one = tk.Button(root, text="Infinite Window !", command=startInfiniteLoop)
button_one.grid(row=0, column=0)
root.mainloop()

#2 您可以编写一个创建窗口的函数,并在特定时间后一次又一次从该函数内部调用自身。

import tkinter as tk

def startInfiniteLoop():
    otherFrame = tk.Toplevel()
    root.after(1000, startInfiniteLoop)

root = tk.Tk()
button_one = tk.Button(root, text="Infinite Window !", command=startInfiniteLoop)
button_one.grid(row=0, column=0)
root.mainloop()