Как открыть несколько Tk () windows одновременно? - PullRequest
1 голос
/ 08 мая 2020

Моя проблема проста, но я действительно не знаю, в чем проблема. Я пытаюсь открыть более одного окна почти одновременно, но если я сделаю это вот так:

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)

, это будет вести себя не так: «открой, подожди, открой», а вместо этого : "открыть, подождать, пока не убьют, подождите, откройте"

Я имею в виду, что задержка начинается после закрытия первого окна, а не после запуска окна. Я думал, что Thread поможет мне, но этого не произошло.

Надеюсь, один из вас знает, как это исправить.

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

Вам действительно не нужно использовать модуль 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()

Надеюсь, это поможет!

Изменить: приведенный выше код открывает одно окно, а затем перестает что-либо делать. Если вы хотите, чтобы новый windows продолжал открываться с небольшой задержкой между ними, вы можете использовать следующий код:

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

Надеюсь, это поможет!

0 голосов
/ 09 мая 2020

Я вот так и сделал сейчас. Но я все же пометил ответ @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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...