【问题标题】:Python/Tkinter - How can I create infinite copies of a window?Python/Tkinter - 如何创建一个窗口的无限副本?
【发布时间】:2019-01-14 01:12:12
【问题描述】:

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

我尝试过创建一个无限循环,每次都调用该函数,但这不起作用。我也尝试在函数中创建一个,但它只是在我关闭旧窗口后重新创建窗口。这是否意味着窗口不能被复制?

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/解释器来停止。

【问题讨论】:

标签: python tkinter


【解决方案1】:

如果您在无限循环中创建窗口,您将永远无法将控制权返回给 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()

【讨论】:

  • 您将永远不会看到新窗口,因为您的函数永远不会将控制权返回给mainloop
  • @BryanOakley 感谢您纠正我。我已经更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 2016-01-17
  • 1970-01-01
相关资源
最近更新 更多