#python #time #while-loop #timer #psutil
Вопрос:
Су, я ученик, и я совсем новичок в кодировании. Я хочу создать приложение, которое запускает таймер при запуске игры (в частности, игры Valorant), которую я получаю, выполняя поиск, запущен ли процесс игры. Затем я получаю уведомления от приложения каждые 30 минут. Наконец, когда я закрываю игру, приложение должно приостановить таймер и сообщить мне, как долго я играл. Однако, когда я закрываю игру, таймер не останавливается, и я обнаружил, что приложение никогда не понимает, что процесс прекратился, даже если я использую цикл while. Это код: Заранее благодарю вас!
из win10toast импорт ToastNotifier импорт блока питания время импорта расписание импорта
значение show_name(): игра = «VALORANT-Win64-Shipping.exe» в (i.name() для i в файле psutil.process_iter())
if game == True:
def timer():
game = "VALORANT-Win64-Shipping.exe" in (i.name() for i in psutil.process_iter())
m = 0
s = 0
while game == True:
time.sleep(1)
s = 1
print(m , s)
if s == 59:
m =1
s = 0
if m == 30:
toast = ToastNotifier()
toast.show_toast("Hello!", "You have been playing for 30 minutes", duration=20)
elif m == 60:
toast = ToastNotifier()
toast.show_toast("Hello!", "You have been playing for an hour", duration=20)
elif m == 90:
toast = ToastNotifier()
toast.show_toast("Hello!", "You have been playing for 1 hour and 30 minutes", duration=20)
elif m == 120:
toast = ToastNotifier()
toast.show_toast("Hello!", "You have been playing for 2 hours", duration=20)
else:
toast = ToastNotifier()
toast.show_toast("Hello!", "You have played for " str(m) " minutes and " str(s) " seconds!", duration=20)
schedule.every(4).seconds.do(timer)
расписание.каждые(4).seconds.do(показать имя)
в то время как 1: schedule.run_pending() время.сна(1)
Комментарии:
1. В вашем коде есть некоторое дублирование, и первая и последняя части неправильно отформатированы. Не могли бы вы это убрать?
Ответ №1:
Причина, по которой цикл while не прерывается, заключается в том, что вы не изменяете переменную игры в цикле while. Это означает, что, если игра верна в начале, while game == True
это то же while True
самое, что и цикл. Вам нужно повторно проверять игру на каждой итерации.
пробовать While"VALORANT-Win64-Shipping.exe" in (i.name() for i in psutil.process_iter()):
Кстати, вы можете напрямую писать While game:
вместо While game == True
Комментарии:
1. Спасибо тебе большое, ха-ха!! В этом-то и была проблема! Хорошего дня!! =)