Python / Tkinter - Как я могу создавать бесконечные копии окна? - PullRequest
0 голосов
/ 14 января 2019

Я хочу сделать окно, которое постоянно создается, создавая множество своих копий.

Я попытался сделать бесконечный цикл, который вызывает функцию каждый раз, но это не работает. Я также попытался сделать один внутри функции, но он просто воссоздает окно после закрытия старого. Значит ли это, что окно не может быть продублировано?

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 или путем закрытия оболочки / интерпретатора.

1 Ответ

0 голосов
/ 14 января 2019

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