Примеры работы strptime() в python
Содержание:
- Замена графического чипа
- Получение текущего времени
- Работа с unix timestamp/time на python
- Измерение производительности небольших фрагментов кода.
- Constantes de fuseau horaire¶
- Как открыть HEIC
- Связанные темы и праздники
- Examples¶
- Модуль datetime
- Clock ID Constants¶
- Модуль time
- Метод after() — Погружение в сон для Tkinter
- Вызов sleep() в Tkinter и wxPython
- Зачем обновлять биос?
- Использование разных кодов формата с функцией strftime()
- Получение текущего объекта datetime
Замена графического чипа
Как же самому провести замену – спрашивают любители самостоятельно поковыряться в железе. Все очень просто – ноутбук нужно разобрать и добраться до видеокарты
Важно запомнить, откуда были выкручены винты и потом собрать технику в исходном виде. Не следует забывать подключать все шины и штекеры, иначе после сборки на ноутбуке пропадет звук или перестанет работать клавиатура
В процессе замены один графический чип меняется на новый. После нужно установить необходимые драйвера на новое оборудование. Стоит отметить, что у всех производителей железо расположено по-разному, у HP для доступа к оперативной памяти или видеокарте достаточно лишь снять верхнюю крышку, а компания Samsung для доступа к графике или процессору заставит полностью разобрать устройство.
Получение текущего времени
Чтобы преобразовать момент времени из секунд, начиная с значения эпохи с плавающей запятой, в кортеж времени, передайте значение с плавающей точкой функции (например, localtime), которая возвращает кортеж времени со всеми действительными девятью элементами.
#!/usr/bin/python3 import time localtime = time.localtime(time.time()) print ("Local current time :", localtime)
Это приведет к следующему результату, который может быть отформатирован в любой другой презентабельной форме —
Local current time : time.struct_time(tm_year = 2016, tm_mon = 2, tm_mday = 15, tm_hour = 9, tm_min = 29, tm_sec = 2, tm_wday = 0, tm_yday = 46, tm_isdst = 0)
Работа с unix timestamp/time на python
Совсем недавно, я начал свое изучение python. Мне потребовалось несколько дней для того чтобы начать писать на нем элементарные вещи. И мне бы хотелось сохранять полезную информацию в виде своих заметок и для питон.
Как преобразовать unix timestamp в datetime на Python?
Делается это очень просто:
#!/bin/env python3 import datetime timestamp = 1339521878.04 value = datetime.datetime.fromtimestamp(timestamp) print(value.strftime('%Y-%m-%d %H:%M:%S'))
Чтобы получить datetime времени (сейчас), можно выполнить:
#!/bin/env python3 import datetime,time dt = datetime.datetime.now() value = datetime.datetime.fromtimestamp(time.mktime(dt.timetuple())) print(value.strftime('%Y-%m-%d %H:%M:%S'))
Вывод будет следующим:
2017-08-04 14:25:21
Как преобразовать datetime в timestamp на Python?
Делается это очень просто:
#!/bin/env python3 from datetime import datetime import time # time tuple in local time to timestamp time_tuple = (2017, 11, 12, 13, 59, 27, 2, 317, 0) timestamp = time.mktime(time_tuple) print (repr(timestamp)) # time tuple in utc time to timestamp time_tuple_utc = (2017, 11, 12, 13, 59, 27, 2, 317, 0) timestamp_utc = calendar.timegm(time_tuple_utc) print (repr(timestamp_utc))
Конвертация в строку:
#!/bin/env python3 from datetime import datetime import time # datetime object to string dt_obj = datetime(2017, 11, 10, 17, 53, 59) date_str = dt_obj.strftime("%Y-%m-%d %H:%M:%S") print (date_str) # time tuple to string time_tuple = (2017, 11, 12, 13, 51, 18, 2, 317, 0) date_str = time.strftime("%Y-%m-%d %H:%M:%S", time_tuple) print (date_str)
Конвертация в datetime:
#!/bin/env python3 from datetime import datetime import time # time tuple to datetime object time_tuple = (2017, 11, 12, 13, 51, 18, 2, 317, 0) dt_obj = datetime(*time_tuple) print (repr(dt_obj)) # date string to datetime object date_str = "2017-11-10 17:53:59" dt_obj = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S") print (repr(dt_obj)) # timestamp to datetime object in local time timestamp = 1226527167.595983 dt_obj = datetime.fromtimestamp(timestamp) print (repr(dt_obj)) # timestamp to datetime object in UTC timestamp = 1226527167.595983 dt_obj = datetime.utcfromtimestamp(timestamp) print (repr(dt_obj))
Получаем вывод:
datetime.datetime(2017, 11, 12, 13, 51, 18) datetime.datetime(2017, 11, 10, 17, 53, 59) datetime.datetime(2008, 11, 12, 23, 59, 27, 595983) datetime.datetime(2008, 11, 12, 21, 59, 27, 595983)
Конвертация time tuples:
#!/bin/env python3 from datetime import datetime import time # datetime object to time tuple dt_obj = datetime(2017, 11, 10, 17, 53, 59) time_tuple = dt_obj.timetuple() print (repr(time_tuple)) # string to time tuple date_str = "2017-11-10 17:53:59" time_tuple = time.strptime(date_str, "%Y-%m-%d %H:%M:%S") print (repr(time_tuple)) # timestamp to time tuple in UTC timestamp = 1226527167.595983 time_tuple = time.gmtime(timestamp) print (repr(time_tuple)) # timestamp to time tuple in local time timestamp = 1226527167.595983 time_tuple = time.localtime(timestamp) print (repr(time_tuple))
Получим вывод:
time.struct_time(tm_year=2017, tm_mon=11, tm_mday=10, tm_hour=17, tm_min=53, tm_sec=59, tm_wday=4, tm_yday=314, tm_isdst=- 1) time.struct_time(tm_year=2017, tm_mon=11, tm_mday=10, tm_hour=17, tm_min=53, tm_sec=59, tm_wday=4, tm_yday=314, tm_isdst=- 1) time.struct_time(tm_year=2008, tm_mon=11, tm_mday=12, tm_hour=21, tm_min=59, tm_sec=27, tm_wday=2, tm_yday=317, tm_isdst=0 ) time.struct_time(tm_year=2008, tm_mon=11, tm_mday=12, tm_hour=23, tm_min=59, tm_sec=27, tm_wday=2, tm_yday=317, tm_isdst=0 )
Вот и все.
Измерение производительности небольших фрагментов кода.
Модуль предоставляет простой способ измерения времени выполнения (производительности) маленьких кусочков кода Python.
Он имеет как интерфейс командной строки, так и программный интерфейс. Это позволяет избежать ряда распространенных ловушек для измерения времени выполнения.
Примеры использования модуля :
Использование интерфейса командной строки для сравнения производительности трех различных выражений.
$ python3 -m timeit '"-".join(str(n) for n in range(100))' 10000 loops, best of 5: 30.2 usec per loop $ python3 -m timeit '"-".join()' 10000 loops, best of 5: 27.5 usec per loop $ python3 -m timeit '"-".join(map(str, range(100)))' 10000 loops, best of 5: 23.2 usec per loop
То же самое, только достигнуто с помощью интерфейса Python:
>>> import timeit >>> timeit.timeit('"-".join(str(n) for n in range(100))', number=10000) 0.3018611848820001 >>> timeit.timeit('"-".join()', number=10000) 0.2727368790656328 >>> timeit.timeit('"-".join(map(str, range(100)))', number=10000) 0.23702679807320237
Вызываемые объекты (функции, экземпляры классов и т.д.) также могут быть переданы из интерфейса Python.
>>> timeit.timeit(lambda "-".join(map(str, range(100))), number=10000) 0.19665591977536678
Обратите внимание, что функция автоматически определяет количество повторений только при использовании интерфейса командной строки. Можно предоставить оператор настройки , который выполняется только один раз в начале
Можно предоставить оператор настройки , который выполняется только один раз в начале.
Командная строка:
$ python -m timeit -s 'text = "sample string"; char = "g"' 'char in text' 5000000 loops, best of 5: .0877 usec per loop $ python -m timeit -s 'text = "sample string"; char = "g"' 'text.find(char)' 1000000 loops, best of 5: .342 usec per loop
То же самое, только программно:
>>> import timeit >>> timeit.timeit('char in text', setup='text = "sample string"; char = "g"') 0.41440500499993504 >>> timeit.timeit('text.find(char)', setup='text = "sample string"; char = "g"') 1.7246671520006203
То же самое можно сделать с помощью класса и его методов:
>>> import timeit >>> t = timeit.Timer('char in text', setup='text = "sample string"; char = "g"') >>> t.timeit() 0.3955516149999312 >>> t.repeat() #
В следующих примерах показано, как синхронизировать выражения, содержащие несколько строк. Здесь мы сравниваем стоимость использования функции и кроме проверки на отсутствие и представление атрибутов объекта.
Командная строка:
$ python -m timeit 'try:' ' str.__bool__' 'except AttributeError:' ' pass' 20000 loops, best of 5: 15.7 usec per loop $ python -m timeit 'if hasattr(str, "__bool__"): pass' 50000 loops, best of 5: 4.26 usec per loop $ python -m timeit 'try:' ' int.__bool__' 'except AttributeError:' ' pass' 200000 loops, best of 5: 1.43 usec per loop $ python -m timeit 'if hasattr(int, "__bool__"): pass' 100000 loops, best of 5: 2.23 usec per loop
То же самое, только программно:
>>> import timeit >>> # attribute is missing >>> s = """\ ... try: ... str.__bool__ ... except AttributeError: ... pass ... """ >>> timeit.timeit(stmt=s, number=100000) 0.9138244460009446 >>> s = "if hasattr(str, '__bool__'): pass" >>> timeit.timeit(stmt=s, number=100000) 0.5829014980008651 >>> >>> # attribute is present >>> s = """\ ... try: ... int.__bool__ ... except AttributeError: ... pass ... """ >>> timeit.timeit(stmt=s, number=100000) 0.04215312199994514 >>> s = "if hasattr(int, '__bool__'): pass" >>> timeit.timeit(stmt=s, number=100000) 0.08588060699912603
Чтобы предоставить модулю доступ к определенным функциям в коде, можно передать параметр настройки, который содержит оператор импорта:
def test(): """Stupid test function""" L = i for i in range(100)] if __name__ == '__main__' import timeit print(timeit.timeit("test()", setup="from __main__ import test"))
Другой вариант — передать функцию аргументу , что приведет к выполнению кода в текущем глобальном пространстве имен. Это может быть удобнее, чем указание импорта:
Constantes de fuseau horaire¶
-
Décalage du fuseau horaire DST local, en secondes à l’ouest de UTC, s’il en est défini un. Cela est négatif si le fuseau horaire DST local est à l’est de UTC (comme en Europe occidentale, y compris le Royaume-Uni). Utilisez ceci uniquement si est différent de zéro. Voir note ci-dessous.
-
Non nul si un fuseau horaire DST est défini. Voir note ci-dessous.
-
Décalage du fuseau horaire local (hors heure d’été), en secondes à l’ouest de l’UTC (négatif dans la plupart des pays d’Europe occidentale, positif aux États-Unis, nul au Royaume-Uni). Voir note ci-dessous.
-
Une paire de chaînes : la première est le nom du fuseau horaire local autre que DST, la seconde est le nom du fuseau horaire DST local. Si aucun fuseau horaire DST n’est défini, la deuxième chaîne ne doit pas être utilisée. Voir note ci-dessous.
Note
Pour les constantes de fuseau horaire ci-dessus (, , et ), la valeur est déterminée par les règles de fuseau horaire en vigueur au moment du chargement du module ou la dernière fois est appelé et peut être incorrect pour des temps passés. Il est recommandé d’utiliser et résulte de pour obtenir des informations sur le fuseau horaire.
Voir aussi
- Module
-
Interface plus orientée objet vers les dates et les heures.
- Module
-
Services d’internationalisation. Les paramètres régionaux affectent l’interprétation de nombreux spécificateurs de format dans et .
- Module
-
Fonctions générales liées au calendrier. est l’inverse de à partir de ce module.
Notes
-
L’utilisation de est maintenant obsolète, mais l’échappement qui donne le décalage horaire jusqu’à la minute et dépendant des paramètres régionaux n’est pas pris en charge par toutes les bibliothèques C ANSI. En outre, une lecture stricte du standard RFC 822 de 1982 milite pour une année à deux chiffres (%y plutôt que %Y), mais la pratique a migré vers des années à 4 chiffres de long avant l’année 2000. Après cela, la RFC 822 est devenue obsolète et l’année à 4 chiffres a été recommandée pour la première fois par la RFC 1123 puis rendue obligatoire par la RFC 2822.
Как открыть HEIC
Связанные темы и праздники
Examples¶
It is possible to provide a setup statement that is executed only once at the beginning:
$ python -m timeit -s 'text = "sample string"; char = "g"' 'char in text' 5000000 loops, best of 5: 0.0877 usec per loop $ python -m timeit -s 'text = "sample string"; char = "g"' 'text.find(char)' 1000000 loops, best of 5: 0.342 usec per loop
>>> import timeit >>> timeit.timeit('char in text', setup='text = "sample string"; char = "g"') 0.41440500499993504 >>> timeit.timeit('text.find(char)', setup='text = "sample string"; char = "g"') 1.7246671520006203
The same can be done using the class and its methods:
>>> import timeit >>> t = timeit.Timer('char in text', setup='text = "sample string"; char = "g"') >>> t.timeit() 0.3955516149999312 >>> t.repeat()
The following examples show how to time expressions that contain multiple lines.
Here we compare the cost of using vs. /
to test for missing and present object attributes:
$ python -m timeit 'try:' ' str.__bool__' 'except AttributeError:' ' pass' 20000 loops, best of 5: 15.7 usec per loop $ python -m timeit 'if hasattr(str, "__bool__"): pass' 50000 loops, best of 5: 4.26 usec per loop $ python -m timeit 'try:' ' int.__bool__' 'except AttributeError:' ' pass' 200000 loops, best of 5: 1.43 usec per loop $ python -m timeit 'if hasattr(int, "__bool__"): pass' 100000 loops, best of 5: 2.23 usec per loop
>>> import timeit >>> # attribute is missing >>> s = """\ ... try: ... str.__bool__ ... except AttributeError: ... pass ... """ >>> timeit.timeit(stmt=s, number=100000) 0.9138244460009446 >>> s = "if hasattr(str, '__bool__'): pass" >>> timeit.timeit(stmt=s, number=100000) 0.5829014980008651 >>> >>> # attribute is present >>> s = """\ ... try: ... int.__bool__ ... except AttributeError: ... pass ... """ >>> timeit.timeit(stmt=s, number=100000) 0.04215312199994514 >>> s = "if hasattr(int, '__bool__'): pass" >>> timeit.timeit(stmt=s, number=100000) 0.08588060699912603
To give the module access to functions you define, you can pass a
setup parameter which contains an import statement:
def test(): """Stupid test function""" L = i for i in range(100)] if __name__ == '__main__' import timeit print(timeit.timeit("test()", setup="from __main__ import test"))
Another option is to pass to the globals parameter, which will cause the code
to be executed within your current global namespace. This can be more convenient
than individually specifying imports:
def f(x): return x**2 def g(x): return x**4 def h(x): return x**8 import timeit print(timeit.timeit('', globals=globals()))
Модуль datetime
Модуль содержит классы:
Также существует класс , который применяется для работы с часовыми поясами.
Класс datetime.date
Класс принимает три аргумента: год, месяц и день.
>>> import datetime >>> date = datetime.date(2017, 4, 2) >>> date.year 2017 >>> date.month 4 >>> date.day 2
Давайте посмотрим, какой сейчас день:
>>> today = datetime.date.today() >>> today.year 2018 >>> today.month 4 >>> today.day 21
Класс datetime.datetime
Класс принимает аргументы: год, месяц, день, час, минута, секунда и микросекунда.
>>> date_time = datetime.datetime(2017, 4, 21, 13, 30, 10) >>> date_time.year 2017 >>> date_time.month 4 >>> date_time.day 21 >>> date_time.hour 13 >>> date_time.minute 30 >>> date_time.second 10
Давайте посмотрим, какое сейчас время:
>>> today = datetime.datetime.today() >>> today datetime.datetime(2018, 4, 21, 12, 43, 27, 786725) >>> today.hour 12 >>> today.minute 43
>>> datetime.datetime.now() # местное время datetime.datetime(2018, 4, 24, 13, 2, 39, 17479) >>> datetime.datetime.utcnow() # время по Гринвичу datetime.datetime(2018, 4, 24, 10, 2, 47, 46330)
Получить из объекта отдельно дату и отдельно время:
>>> today = datetime.datetime.today() >>> today datetime.datetime(2018, 4, 21, 13, 26, 54, 387462) >>> today.date() # отдельно дата datetime.date(2018, 4, 21) >>> today.time() # отдельно время datetime.time(13, 26, 54, 387462)
Классы и содержат метод , который позволяет создавать строку, отображающую время в более понятной для человека форме.
>>> today = datetime.date.today().strftime("%d.%m.%Y") >>> today '21.04.2018'
>>> import locale >>> locale.setlocale(locale.LC_ALL, "ru") # задаем локаль для вывода даты на русском языке 'ru' >>> today = datetime.datetime.today().strftime("%A, %d.%m.%Y") >>> today 'суббота, 21.04.2018'
Сокращенное название дня недели | |
Полное название дня недели | |
Сокращенное название месяца | |
Полное название месяца | |
Дата и время | |
День месяца | |
24-часовой формат часа | |
12-часовой формат часа | |
День года. Цифровой формат | |
Номер месяца. Цифровой формат | |
Минута. Цифровой формат | |
До полудня или после (AM или PM) | |
Секунда. Цифровой формат | |
Номер недели в году. Цифровой формат (с воскресенья) | |
День недели. Цифровой формат | |
Номер недели в году. Цифровой формат (с понедельника) | |
Дата | |
Время | |
Год без века. Цифровой формат | |
Год с веком. Цифровой формат | |
Временная зона | |
Знак процента |
Методы класса :
- — объект из текущей даты и времени; работает также, как и со значением .
- — объект из текущей даты и времени, местное время.
- — объект из текущей даты и времени, по Гринвичу.
- — дата из стандартного представления времени.
- — дата из числа, представляющего собой количество дней, прошедших с 01.01.1970.
- — объект из комбинации объектов и .
- — преобразует строку в (так же, как и функция из модуля ).
- — преобразует объект в строку согласно формату.
- — объект даты (с отсечением времени).
- — объект времени (с отсечением даты).
- — возвращает новый объект с изменёнными атрибутами.
- — возвращает из .
- — количество дней, прошедших с 01.01.1970.
- — возвращает время в секундах с начала эпохи Unix.
- — день недели в виде числа, понедельник — 0, воскресенье — 6.
- — день недели в виде числа, понедельник — 1, воскресенье — 7.
- — кортеж (год в формате ISO, ISO номер недели, ISO день недели).
- — красивая строка вида или, если ,
- — возвращает строковое представление текущего местного времени.
Класс datetime.timedelta
Класс позволяет выполнять операции над датами — складывать, вычитать, сравнивать. Конструктор принимает именованные аргументы , , , , , , :
>>> delta = datetime.timedelta(days = 5, hours = 1, minutes = 1) >>> delta datetime.timedelta(5, 3660)
Интервал времени 5 дней, 1 час и 1 минута. Получить результат можно с помощью атрибутов , и (5 дней и 3660 секунд):
>>> delta.days 5 >>> delta.seconds 3660
Получить результат в секундах позволяет метод :
>>> today = datetime.datetime.today() # текущая дата >>> today datetime.datetime(2018, 4, 21, 15, 19, 2, 515432) >>> future = datetime.datetime(2019, 4, 21, 15, 19, 2, 515432) # дата на один год больше >>> delta = future - today >>> delta datetime.timedelta(365) >>> delta.total_seconds() # 365 дней в секундах 31536000.0
Прибавить к текущей дате 10 дней, 10 часов и 10 минут:
>>> today = datetime.datetime.today() >>> delta = datetime.timedelta(days = 10, hours = 10, minutes = 10) >>> future = today + delta >>> today # 21 апреля 2018 года, 15:29 datetime.datetime(2018, 4, 21, 15, 29, 29, 265954) >>> future # 2 мая 2018 года, 01:39 datetime.datetime(2018, 5, 2, 1, 39, 29, 265954)
Clock ID Constants¶
These constants are used as parameters for and
.
-
Identical to , except it also includes any time that
the system is suspended.This allows applications to get a suspend-aware monotonic clock without
having to deal with the complications of , which may
have discontinuities if the time is changed using or
similar.: Linux 2.6.39 or later.
New in version 3.7.
-
The Solaris OS has a timer that attempts to use an optimal
hardware source, and may give close to nanosecond resolution.
is the nonadjustable, high-resolution clock.: Solaris.
New in version 3.3.
-
Clock that cannot be set and represents monotonic time since some unspecified
starting point.: Unix.
New in version 3.3.
-
Similar to , but provides access to a raw
hardware-based time that is not subject to NTP adjustments.: Linux 2.6.28 and newer, macOS 10.12 and newer.
New in version 3.3.
-
High-resolution per-process timer from the CPU.
: Unix.
New in version 3.3.
-
High-resolution per-process timer from the CPU.
: FreeBSD, NetBSD 7 or later, OpenBSD.
New in version 3.7.
-
The system must have a current leap second table in order for this to give
the correct answer. PTP or NTP software can maintain a leap second table.: Linux.
New in version 3.9.
-
Thread-specific CPU-time clock.
: Unix.
New in version 3.3.
-
Time whose absolute value is the time the system has been running and not
suspended, providing accurate uptime measurement, both absolute and
interval.: FreeBSD, OpenBSD 5.5 or later.
New in version 3.7.
-
Clock that increments monotonically, tracking the time since an arbitrary
point, unaffected by frequency or time adjustments and not incremented while
the system is asleep.: macOS 10.12 and newer.
New in version 3.8.
The following constant is the only parameter that can be sent to
.
Модуль time
Модуль основан на «эпохе Unix», которая началась 1 января 1970 года:
>>> import time >>> print(time.gmtime(0)) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
Функция возвращает время в секундах по Гринвичу, начиная с эпохи Unix, как число с плавающей запятой:
>>> time.time() 1524561056.103065
Функция преобразует время, выраженное в секундах с начала эпохи Unix, в строку вида «Tue Apr 24 10:36:06 2018»:
>>> print(time.ctime()) Tue Apr 24 10:36:06 2018
Функция возвращает время по Гринвичу как объект
>>> time.gmtime() time.struct_time(tm_year=2018, tm_mon=4, tm_mday=24, tm_hour=9, tm_min=6, tm_sec=29, tm_wday=1, tm_yday=114, tm_isdst=0)
Функция возвращает местное время (с учетом часового пояса) как объект
>>> time.localtime() time.struct_time(tm_year=2018, tm_mon=4, tm_mday=24, tm_hour=12, tm_min=6, tm_sec=51, tm_wday=1, tm_yday=114, tm_isdst=0)
Свойство показывает смещение часового пояса в секундах к западу от нулевого меридиана. Если часовой пояс находится восточнее, смещение отрицательно:
>>> time.altzone -14400
Функция приостановливает выполнение скрипта на определенное количество секунд.
Свойства и методы класса
- — смещение часового пояса в секундах от нулевого меридиана.
- — возвращает текущее время в секундах по Гринвичу, прошедшее с начала эпохи Unix.
- — возвращает строкове представление переданной либо текущей даты.
- — возвращает строковое представление текущего местного времени.
- — возвращает объект , текущего или переданного времени по Гринвичу.
- — возвращает объект , текущего или переданного времени. Представляющий местное время с начала эпохи Unix.
- — преобразует кортеж или объект во время в секундах.
- — приостановить выполнение программы на заданное количество секунд.
- — преобразует кортеж или в строку по формату.
Метод after() — Погружение в сон для Tkinter
tkinter является частью стандартной библиотеки Python. В случае, если вы используете заранее установленную версию Python на Linux или Mac, он может быть вам недоступен. При получении ошибки стоит самостоятельно добавить его в систему. В том случае, если вы ранее установили Python сами, должен быть доступен.
Начнем с разбора примера, где используется . Запустите следующий код и посмотрите, что произойдет при неправильном добавлении вызова в Python:
Python
import tkinter
import time
class MyApp:
def __init__(self, parent):
self.root = parent
self.root.geometry(«400×400″)
self.frame = tkinter.Frame(parent)
self.frame.pack()
b = tkinter.Button(text=»click me», command=self.delayed)
b.pack()
def delayed(self):
time.sleep(3)
if __name__ == «__main__»:
root = tkinter.Tk()
app = MyApp(root)
root.mainloop()
1 15 |
importtkinter importtime classMyApp def__init__(self,parent) self.root=parent self.root.geometry(«400×400») self.frame=tkinter.Frame(parent) self.frame.pack() b=tkinter.Button(text=»click me»,command=self.delayed) b.pack() defdelayed(self) if__name__==»__main__» root=tkinter.Tk() app=MyApp(root) root.mainloop() |
После запуска кода нажмите кнопку в GUI. Кнопка не будет реагировать три секунды, ожидая завершения . Если в приложении есть другие кнопки, на них тоже нельзя будет нажать. Закрыть приложение во время сна нельзя, так как оно не будет откликаться на событие закрытия.
Для должного погружения в сон потребуется использовать :
Python
import tkinter
class MyApp:
def __init__(self, parent):
self.root = parent
self.root.geometry(«400×400»)
self.frame = tkinter.Frame(parent)
self.frame.pack()
self.root.after(3000, self.delayed)
def delayed(self):
print(‘Я задержался’)
if __name__ == «__main__»:
root = tkinter.Tk()
app = MyApp(root)
root.mainloop()
1 10 |
importtkinter classMyApp def__init__(self,parent) self.root=parent self.root.geometry(«400×400») self.frame=tkinter.Frame(parent) self.frame.pack() defdelayed(self) print(‘Я задержался’) if__name__==»__main__» root=tkinter.Tk() app=MyApp(root) root.mainloop() |
Здесь создается приложение, высота которого 400 пикселей, и ширина также 400 пикселей. На нем нет виджетов. Оно только показывает фрейм. Затем вызывается , где является отсылкой к объекту . принимает два аргумента:
- Количество миллисекунд для сна;
- Метод который вызовется после завершения сна.
В данном случае приложение выведет строку в стандартный поток вывода (stdout) через 3 секунды. Можно рассматривать как Tkinter-версию того же , только он добавляет способность вызова функции после завершения сна.
Данную функциональность можно использовать для улучшения работы пользователя. Добавив в Python вызов , можно ускорить процесс загрузки приложения, после чего начать какой-то длительный процесс. В таком случае пользователю не придется ждать открытия приложения.
Вызов sleep() в Tkinter и wxPython
Вызовы в Python можно добавить не только для приложений командной строки. При создании графического пользовательского интерфейса (GUI) периодически нужно добавлять отсрочки. К примеру, при создании приложения FTP для скачивания около миллиона файлов будет разумно добавить вызов между партиями, чтобы снизить нагрузку на сервер.
GUI код выполнит всю обработку в основном потоке, называемом циклом обработки событий, или event loop. При использовании внутри кода GUI заблокируется цикл обработки событий.
К счастью, помимо , можно использовать некоторые другие методы специально для этой задачи. Далее мы рассмотрим, как добавить вызовы в Tkinter и wxPython.
Зачем обновлять биос?
Использование разных кодов формата с функцией strftime()
strftime() использует коды формата для представления метки времени в стандартном и поддерживаемом формате. Кроме того, мы можем использовать коды формата, чтобы отделить дни, часы, недели и т. д. От метки времени и отобразить их.
Давайте разберемся с кодами формата на некоторых примерах.
Пример 1: Код формата — «% A» для отображения текущей даты по местному времени.
from time import strftime day = strftime("%A") print("Current day:", day)
Выход:
Current day: Tuesday
Пример 2: Код формата — «% c» для отображения текущего местного времени.
Код формата — ‘% c’ используется для отображения текущего местного времени в следующем формате:
День Месяц Дата часы: мин: сек Год
from time import strftime day = strftime("%c") print("Current timestamp:", day)
Выход:
Current timestamp: Tue Apr 28 16:42:22 2020
Пример 3: Код формата — «% R» для представления времени в 24-часовом формате.
from time import strftime day = strftime("%R") print("Current time in a 24-hour format:", day)
Выход:
Current time in a 24-hour format: 16:44
Пример 4: Код формата — «% r» для отображения времени в формате H: M: S вместе с описанием, например, AM или PM.
from time import strftime day = strftime("%r") print("Current time -- hours:mins:seconds", day)
Выход:
Current time -- hours:mins:seconds 05:05:19 PM
Пример 5:
from time import strftime day = strftime("%x -- %X %p") print("Local date and time:", day)
В приведенном выше примере мы использовали код формата «% x» для представления местной метки времени в терминах даты и «% X» для представления местного времени в форме H: M: S. Код формата «% p» используется для обозначения того, принадлежит ли метка времени AM или PM.
Выход:
Local date and time: 04/28/20 -- 17:08:42 PM
Получение текущего объекта datetime
Теперь для большинства реальных программ можно использовать текущее время и сохранить его как объект datetime. Мы можем использовать функцию datetime.now() для отображения текущего времени как объекта datetime.
from datetime import datetime
Давайте теперь рассмотрим пример.
from datetime import datetime current_datetime = datetime.now() print(current_datetime)
Выход
datetime.datetime(2020, 6, 27, 22, 45, 54, 267673)
Выход совпадает. В нем указано, что текущее время — 27 июня 2020 года, 22:45:54 по моему местному часовому поясу (IST).
Теперь мы также можем использовать базовые операторы для получения прошлого или будущего времени.
from datetime import datetime, timedelta current_datetime = datetime.now() # future dates one_year_future_date = current_datetime + timedelta(days=365) print('Current Date:', current_datetime) print('One year from now Date:', one_year_future_date) # past dates three_days_before_date = current_datetime - timedelta(days=3) print('Three days before Date:', three_days_before_date)
Выход
Current Date: 2020-06-27 22:45:54.267673 One year from now Date: 2021-06-27 22:45:54.267673 Three days before Date: 2020-06-24 22:45:54.267673