为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着星空守着你 2022-12-20 14:40:09
所以我的应用程序有一个计时器,每隔几分钟就会提醒做几秒钟的事情。例如它倒计时 10 分钟,然后在接下来的 10 秒内我将拉伸,计时器将计时 10 秒。当这 10 秒结束时,它会再次重置为 10 分钟。因此,如果第一个计时器用完,我希望它说“是时候伸展了”并显示一个 Windows Toast 通知。在 10 秒拉伸的第二个计时器结束后,我想显示另一个通知,上面写着“好的,你可以回去做你正在做的任何事情”。这是应用程序:这是代码:from PyQt5 import QtWidgetsfrom PyQt5.QtWidgets import QApplication, QMainWindowfrom PyQt5 import QtCoreimport sysfrom win10toast import ToastNotifierimport itertoolsDURATION_INT = 10toaster = ToastNotifier()TIME_CYCLER = itertools.cycle([10, 5])  # 10 minutes, 10 secondsiterToast = 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 minsecclass 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可能不是我要找的东西。任何帮助都会很棒:)
查看完整描述

1 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

好的,所以我找到了解决方案。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()

所以最终,我手动将变量设置为每个通知所需的任何值。


查看完整回答
反对 回复 2022-12-20
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信