Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 第二个托盘图标消息弹出应用程序崩溃_Python_Python 3.x_Pyqt5 - Fatal编程技术网

Python 第二个托盘图标消息弹出应用程序崩溃

Python 第二个托盘图标消息弹出应用程序崩溃,python,python-3.x,pyqt5,Python,Python 3.x,Pyqt5,我正在构建一个可以在Linux上使用Python 3和PyQt5“最小化到托盘”的应用程序。一旦它被隐藏并且通过trayIcon.showMessage()显示的消息被解除,尝试显示第二条消息将导致分段错误 该应用程序监视文件的更改,并通知用户与特定正则表达式匹配的事件。隐藏时,事件将通过带有托盘图标的消息显示给用户。 起初,我认为这是由于一些线程问题造成的,当窗口由于QObject::startTimer:timer之类的消息而被隐藏时,计时器只能用于控制台中以QThread启动的线程(我不知

我正在构建一个可以在Linux上使用Python 3和PyQt5“最小化到托盘”的应用程序。一旦它被隐藏并且通过
trayIcon.showMessage()
显示的消息被解除,尝试显示第二条消息将导致分段错误

该应用程序监视文件的更改,并通知用户与特定正则表达式匹配的事件。隐藏时,事件将通过带有托盘图标的消息显示给用户。 起初,我认为这是由于一些线程问题造成的,当窗口由于
QObject::startTimer:timer之类的消息而被隐藏时,计时器只能用于控制台中以QThread
启动的线程(我不知道为什么会发生这种情况,我没有创建任何线程),所以我决定只在窗口可见时更新它,但这不起作用

我能够把它缩小到触发信息的那一行:

if self.trayIcon.isVisible():
    print("about to show message")
    print(self.fileContentsList[-1])
    self.trayIcon.showMessage(
        "New match!",
        self.fileContentsList[-1])
但我不确定为什么会出现分割错误。我尝试过谷歌搜索,但我的情况似乎有些独特。可能是什么问题

编辑:我忘了添加的内容:使用strace(
strace python3 logwatch.py
)运行应用程序,不知何故阻止了分段错误的发生

EDIT2:该代码可在GitHub上获得,网址为

EDIT3:PyCharm控制台中显示的特定行是:
进程结束,退出代码为139(被信号11:SIGSEGV中断)


EDIT4:似乎将其附加到调试器防止崩溃的任何形式。我尝试了PyCharm的调试器和valgrind。

我修复了它。正如我最初所想,这是一个线程问题

看门狗模块的观察者运行在另一个线程上,这就是额外线程的来源。我重写了Watch类,通过
queue.queue
通知窗口,而不是直接调用回调。这使得回调在主线程上运行

中概述了修复方法。如果有更好的方法或其他方法,我非常想知道