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