使用ToastNotifier(win10toast)后,程序的窗口关闭

时间:2019-12-02 09:50:08

标签: python datetime time pyqt5 notify

最近我遇到了这个问题。有一个提醒,它会在一段时间内通知某些事情。我使用Python 3.7和PyQt5创建界面。另外,还有一个名为“ win10toast”的库和一个用于通知的模块“ ToastNotifer”。输入数据(提示的时间和文本)并单击提交按钮后,窗口仅关闭,但有时窗口的标题变为“程序不应答”,并且在2-3秒后窗口也关闭。我认为这与win10toast有关。我需要关闭程序no,因为使用提醒后,用户可以返回并打开记事本,也可以在此处写下自己的标记。那是问题,我无法解决。我不知道为什么会这样。提醒的代码从类文件ush开始,直到结束片段。您必须从我的github下载zip文件,因为有主要的python和ui(interface)程序。请安装库win10toast并导入日期时间ToastNotifier,以了解当前时间。谢谢)链接到我的github在问题的结尾

我的代码:

import sys

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPlainTextEdit
from PyQt5.QtWidgets import QLabel, QPushButton, QMessageBox, QFileDialog
from PyQt5.QtWidgets import QTimeEdit
from PyQt5.QtGui import QPixmap
from win10toast import ToastNotifier
import time
from datetime import datetime

class fileush(QWidget):
    def __init__(self, *args):
        super().__init__()

        uic.loadUi('ui_fileush.ui', self)
        self.pushButton.clicked.connect(self.running)

    def running(self):
        toaster = ToastNotifier()
        self.now = datetime.now()
        self.tmf = self.tm.time()
        self.uak = self.tmf.toString()
        self.current_time = self.now.strftime("%H:%M:%S")
        self.seku = self.current_time.split(":")
        self.seku2 = self.uak.split(":")
        self.seknot = 3600 * (int(self.seku2[0])) + (int(self.seku2[1])) * 60
        self.sekcur = 3600 * (int(self.seku[0])) + (int(self.seku[1])) * 60 + (int(self.seku[2]))

        if self.sekcur >= self.seknot:
            self.label_5.setText('ERROR')

        else:
            self.label_5.setText('')
            self.secs = 3600 * (int(self.seku2[0]) - int(self.seku[0])) + 60 * (int(self.seku2[1]) - int(self.seku[1])) - int(self.seku[2])
            self.second_input = self.lineEdit_2.text()
            t = time.sleep(int(self.secs))
            toaster.show_toast(self.second_input)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = fileush()
    ex.show()
    sys.exit(app.exec())

链接到我的github:https://github.com/iMAGA07/reminder

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,但是我使用了一个线程来解决它。

如果您不熟悉线程,它们基本上可以帮助您同时运行不同的函数,我编写的代码是:

import threading

thread = threading.Thread(target=self.noti)
thread.start()

def noti(self):
    h = ToastNotifier()
    h.show_toast("TODO UPDATE", f"Hurry up, you have less than 3 days to finish the task you had set {task}!!", )

在这里,我试图创建一个待办事项应用程序,该程序在不到3天的时间完成设置任务时会发出通知。