所以我的应用程序有一个计时器,每隔几分钟就会提醒做几秒钟的事情。例如它倒计时 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()
所以最终,我手动将变量设置为每个通知所需的任何值。
添加回答
举报
0/150
提交
取消