我的问题很简单,但是我真的不知道问题是什么。 我试图几乎同时打开多个窗口,但是如果我这样做的话:
from tkinter import *
import threading
import time
class new_window:
def build(self, killtime):
self.w = Tk()
self.w.update()
time.sleep(killtime)
self.w.destroy()
def __init__(self, killtime):
threading.Thread(target=self.build(killtime)).start()
a = new_window(2)
time.sleep(2)
b = new_window(2)
它的行为不像:“打开,等待,打开” 而是像:“打开,等到被杀死,等待,打开”
我的意思是,延迟是在关闭第一个窗口之后开始的,而不是在窗口启动之后开始的。我以为线程可以帮助我,但事实并非如此。
希望你们当中的一个知道如何解决这个问题。
答案 0 :(得分:2)
您实际上不需要使用threading
模块。
稍后,您可以使用.after()
方法打开一个新窗口。
这是您的代码:
from tkinter import *
window = Tk()
window.title("window1")
def open_new_window():
window2 = Toplevel()
window2.title("Window2")
window.after(1000, open_new_window)
window.mainloop()
希望这会有所帮助!
编辑:上面的代码打开一个窗口,然后停止执行任何操作。如果您希望新窗口保持打开状态并且之间保持一小段延迟,则可以使用以下代码:
from tkinter import *
window = Tk()
window.title("window1")
def open_new_window():
window2 = Toplevel()
window2.title("Window2")
window.after(1000, open_new_window)
open_new_window()
window.mainloop()
希望这会有所帮助!
答案 1 :(得分:0)
我现在是这样做的。但是我仍然将@TheMaker的答案标记为解决方案,因为它更加紧凑和易于理解。
from tkinter import *
import threading
import time
from random import *
root = Tk()
root.configure(background='black')
root.attributes("-fullscreen", True)
class new_window:
def build(self, delay, x, y):
self.w = Tk()
self.w.title("")
self.ws = root.winfo_screenwidth() # width of the screen
self.hs = root.winfo_screenheight() # height of the screen
self.w.geometry(f"250x100+{int(round(self.ws/100*x))}+{int(round(self.hs/100*y))}")
self.w.update()
time.sleep(delay)
def __init__(self, delay, x, y):
threading.Thread(target=self.build(delay, x, y)).start()
def rdm(delay, count):
i = 1
while i<=count:
new_window(delay, randint(1, 100), randint(1, 100))
i+=1
rdm(0.02, 100)
root.mainloop()