Если у вас есть строгая политика безопасности содержимого, которая не позволяет @ vladimir-salguero ответить , вы можете использовать это (обратите внимание на сценарий nonce
):
Просто добавьте следующее в ссылку на таблицу стилей: media="none" data-async="true"
. Вот пример:
Пример для jQuery:
Вот более простой метод, который не включает потоки.
Держите счетчик и каждый второй вызов функции.
Обновление: Чтобы ответить на ваш вопрос в комментариях.
Это не застрянет в функции. некоторый цикл, который мешает нам достичь mainloop()
, потому что этот код добавляет только команду, которая должна быть запущена в списке событий с регулярным интервалом в 1 секунду. То, что на самом деле происходит, - это метод after()
, который добавит новое даже для запуска не раньше, чем через 1 секунду (1000 миллисекунд). Поскольку Tkinter управляется событиями, Tkinter будет обрабатывать каждый, даже в списке, как он приходит после каждого цикла mainloop()
.
import tkinter as tk
root = tk.Tk()
counter = 0
def change_text():
global counter
my_list = [".", "..", "...", ""]
if counter != 3:
l.config(text="Loading{}".format(my_list[counter]))
counter += 1
root.after(1000, change_text)
else:
l.config(text="Loading{}".format(my_list[counter]))
counter = 0
root.after(1000, change_text)
l = tk.Label(root, text = "")
l.pack()
change_text()
root.mainloop()
Вот такой же ответ, как @ Mike-SMT, но с использованием функции цикла, чтобы сделать его намного опрятным.
import tkinter as tk
from itertools import cycle
root = tk.Tk()
my_list = cycle([".", "..", "...", ""])
def change_text():
l.config(text="Loading{}".format(next(my_list)))
root.after(1000, change_text)
l = tk.Label(root)
l.pack()
change_text()
root.mainloop()
root.mainloop()
, так как он не должен застревать в бесконечном цикле change_test()
?
– Matt
13 July 2018 в 23:21
after
НЕ является циклом, все, что она делает, добавляет событие в список запланированных событий, в вашем случае он добавляет «в current_time + 1000 запустите функцию change_test». Затем он возвращается. Он не блокируется, как sleep
. Когда mainloop видит, что время больше запланированного времени, оно запускает change_text, что, конечно же, вызывает еще одно дополнение к расписанию событий.
– Novel
13 July 2018 в 23:31
after
не является циклом, но он изменяет mainloop, поэтому мы можем использовать его, как если бы это был цикл.
– Novel
13 July 2018 в 23:32
itertools
, но до сих пор не нуждался в них, и поэтому он не переходил мне в голову.
– Mike - SMT
14 July 2018 в 00:12
change_text()
и, следовательно, не сможет выполнитьroot.mainloop()
, чтобы создать окно. – Matt 13 July 2018 в 22:11itertools.cycle
? – Novel 13 July 2018 в 23:17