Поместите цикл в свой второй поток, который спит большую часть времени, но каждый [Интервал] он просыпается и проверяет совместно используемую переменную, которая говорит его, выполнить ли Ваш метод или нет, и если та общая булевская переменная имеет значение true, то он выполняет метод, который выполняет любую задачу, которую Вы пытаетесь выполнить... В том методе имейте метод, собирают данные, требуемые от другой совместно используемой переменной.
В основном потоке GUI, помещенном данные в совместно используемую переменную параметра метода, затем устанавливает булеву совместно используемую переменную "Выполнения" на истинный...
Внутренняя часть метод рабочего, не забудьте сбрасывать общий bool "выполненная" переменная ко лжи, когда Вы будете сделаны, таким образом, выигранный цикл; t выполняют тот же экземпляр много раз...
>>> import datetime
>>> today = datetime.date.today()
>>> today + datetime.timedelta(days=-today.weekday(), weeks=1)
datetime.date(2009, 10, 26)
Несколько пояснений:
Возьмем сегодняшнюю дату. Вычтите количество дней, которые уже прошли на этой неделе (получится «последний» понедельник). Добавьте одну неделю.
Изменить : Выше для «следующего понедельника», но, поскольку вы искали «последний понедельник», вы можете использовать
today - datetime.timedelta(days=today.weekday())
Сообщение ChristopheD близко к тому, что вы хотите. У меня недостаточно представителей, чтобы сделать комментарий: (
Вместо (что фактически дает вам следующий предстоящий понедельник):
>>> today + datetime.timedelta(days=-today.weekday(), weeks=1) datetime.date(2009, 10, 26)
Я бы сказал:
>>> last_monday = today - datetime.timedelta(days=today.weekday())
Если вы хотите предыдущую неделю, добавьте 'недели = 1 'параметр.
Это делает код более читаемым, поскольку вы вычитаете временную дельту. Это устраняет любую путаницу, вызванную добавлением timedelta с отрицательным и положительным смещениями.
Использование модуля timedeltas и datetime:
import datetime
datetime.date.today()+datetime.timedelta(days=-datetime.date.today().weekday())
d = datetime.datetime.today().weekday()
дает вам сегодняшний день недели, считая от 0 (понедельник) до 6 (воскресенье)
datetime.datetime.today() + datetime.timedelta(days=(7-d)%7)
(7-d)% 7 дает вам дни до понедельника или оставляет вас там, где вы находитесь, если сегодня понедельник