=====Системные методы===== Эти методы не являются виджет-специфичными, т.е. хотя они являются методами виджетов они влияют на работу интерпретатора //tcl/tk//. ====after, after_idle и after_cancel==== Таймеры. С помощью этих методов вы можете отложить выполнение какого-нибудь кода на определённое время. * **after** - принимает два аргумента: время в миллисекундах и функцию, которую надо выполнить через указанное время. Возвращает идентификатор, который может быть использован в after_cancel. * **after_idle** - принимает один аргумент - функцию. Эта функция будет выполнена после завершения всех отложенных операций (после того, как будут обработаны все события). Возвращает идентификатор, который может быть использован в after_cancel. * **after_cancel** - принимает один аргумент: идентификатор задачи, полученный предыдущими функциями, и отменяет это задание. Пример, часы: from tkinter import * import time def tick(): label.after(200, tick) label['text'] = time.strftime('%H:%M:%S') root=Tk() label = Label(font='sans 20') label.pack() label.after_idle(tick) root.mainloop() {{ :python:application:clock.png?200 |}} ====update и update_idletasks==== Две функции, для работы с очередью задач. Их выполнение вызывает обработку отложенных задач. * **update_idletasks** выполняет задачи, обычно откладываемые "на потом", когда приложение будет простаивать. Это приводит к прорисовке всех виджетов, расчёту их расположения и т.д. Обычно эта функция используется если были внесены изменения в состояние приложения, и вы хотите, чтобы эти изменения были отображены на экране немедленно, не дожидаясь завершения сценария. * **update** обрабатывает все задачи, стоящие в очереди. Обычно эта функция используется во время "тяжёлых" расчётов, когда необходимо чтобы приложение оставалось отзывчивым на действия пользователя. Пример: from tkinter import * import math def hard_job(): x = 1000 while True: x = math.log(x) ** 2.8 root.update() root=Tk() button = Button() button.pack() root.after(500, hard_job) root.mainloop() ====eval и evalfile==== Две недокументированные функции для выполнения кода на **tcl**. **eval** позволяет выполнить строку на языке программирования **tcl**, а **evalfile** - выполнить код, записанный в файл. В качестве аргументов принимают соответственно строку и путь к файлу. Данные функции полезны при использовании дополнительных модулей, написанных на **tcl**. Пример: from tkinter import * root=Tk() root.eval('package require tile; ttk::style theme use clam') root.eval('ttk::button .b -text {ttk button}; pack .b') root.mainloop() {{ :python:оконное_приложение:tkinter:system1.png?200 |}}