循环两个不同的 Win 10 Toast 通知

所以我的应用程序有一个计时器,每隔几分钟就会提醒做几秒钟的事情。例如它倒计时 10 分钟,然后在接下来的 10 秒内我将拉伸,计时器将计时 10 秒。当这 10 秒结束时,它会再次重置为 10 分钟。

因此,如果第一个计时器用完,我希望它说“是时候伸展了”并显示一个 Windows Toast 通知。在 10 秒拉伸的第二个计时器结束后,我想显示另一个通知,上面写着“好的,你可以回去做你正在做的任何事情”。

这是应用程序:

http://img2.mukewang.com/63a158ea00011fbc01970228.jpg

这是代码:


from PyQt5 import QtWidgets

from PyQt5.QtWidgets import QApplication, QMainWindow

from PyQt5 import QtCore

import sys

from win10toast import ToastNotifier

import itertools


DURATION_INT = 10

toaster = ToastNotifier()

TIME_CYCLER = itertools.cycle([10, 5])  # 10 minutes, 10 seconds

iterToast = itertools.cycle([toaster.show_toast("test1", "test1", duration=3, threaded=True), toaster.show_toast("test2", "test2", duration=3, threaded=True)])


def secs_to_minsec(secs: int):

    mins = secs // 60

    secs = secs % 60

    minsec = f'{mins:02}:{secs:02}'

    return minsec


class App(QtWidgets.QMainWindow):

    def __init__(self):

        super().__init__()


        self.time_left_int = DURATION_INT

        self.myTimer = QtCore.QTimer(self)


        # App window

        self.app = QApplication(sys.argv)

        self.win = QMainWindow()

        self.win.setGeometry(200, 200, 200, 200)

        self.win.setWindowTitle("test")


        # Widgets

        self.titleLabel = QtWidgets.QLabel(self.win)

        self.titleLabel.setText("Welcome to my app")

        self.titleLabel.move(50,20)


        self.timerLabel = QtWidgets.QLabel(self.win)

        self.timerLabel.move(50,50)

        self.timerLabel.setAlignment(QtCore.Qt.AlignCenter)

        self.timerLabel.setStyleSheet("font: 10pt Helvetica")


        self.startButton = QtWidgets.QPushButton(self.win)

        self.startButton.setText("Start")

        self.startButton.move(50,100)

        self.startButton.clicked.connect(self.startTimer)


所以问题是这个cycle功能对我不起作用。每当我运行该应用程序时,它只显示第一个test1通知,并在每次时钟用完时重复。它甚至没有通过第二个通知循环,所以我想itertools可能不是我要找的东西。


任何帮助都会很棒:)


守着星空守着你
浏览 96回答 1
1回答

蛊毒传说

好的,所以我找到了解决方案。itertools我相信不适用于我的情况,但我在self.current_timer = 1我的类中创建了一个新变量并将此函数更改为如下所示:    def timerTimeout(self):        self.time_left_int -= 1        if self.time_left_int == 0:            if self.current_timer == 1:                toaster.show_toast("test1", "test1", duration=3, threaded=True)                self.current_timer = 2            elif self.current_timer == 2:                toaster.show_toast("test2", "test2", duration=3, threaded=True)                self.current_timer = 1            self.time_left_int = next(TIME_CYCLER)        self.update_gui()所以最终,我手动将变量设置为每个通知所需的任何值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python