On Mon, 28 May 2012 11:39:35 +0800, zw g <pekingmas...@gmail.com> wrote: > Hi Phil, > > > > It seems the latest version of PyQt4 still has this bug. > My installation: > > * Python 2.7.3 > * PyQt4 4.9.1 > * SIP 4.13.1 > * Mac OS X 10.7.4 > > I don't know if it is the same as the quoted below, but very similar, and > if i delete the instance of > QSystemTrayIcon before exiting, then everything is fine.
I don't think this, or the earlier report, is a bug. As I said in my original explanation the problem is probably the random order in which C++ instances get destroyed. Explicitly del'ing a object, or giving it an appropriate parent is the best way to deal with it. Phil > Quote below: > > ====================================================== > > On Fri, 5 Mar 2010 00:35:21 +0100, Kiwi <spiky.kiwi at gmail.com > <http://www.riverbankcomputing.com/mailman/listinfo/pyqt>> wrote: >>* Hi,*>* I'm totally new to PyQt programming.*>* While I was writing a >>very simple app for the system tray I think I found*a >>* bug.*>* Here is a simple testcase:*>* *>* # -*- coding: utf-8 -*-*>* >>import sys*>* from PyQt4 import QtGui, QtCore*>* *>* app = >>QtGui.QApplication(sys.argv)*>* *>* tray = QtGui.QSystemTrayIcon()*>* *>* >>def a(): pass*>* def b(): pass*>* def c(): pass*>* def d(): pass*>* def >>e(): pass*>* def f(): pass*>* def g(): pass*>* def h(): pass*>* def i(): >>pass*>* def j(): pass*>* def k(): pass*>* *>* cm = QtGui.QMenu()*>* >>cm.addAction("Exit",QtGui.QApplication.quit)*>* *>* >>tray.setContextMenu(cm)*>* *>* tray.show()*>* sys.exit(app.exec_())*>* *>* >>*>* note that the "defs" are needed to make the crash happen.*>* FYI, >>running linux on x86_64*>* versions:*>* qt: 4.6.2*>* pyqt: 4 4.7*>* sip: >>4.10*>* python: 2.6.4*>* gcc: 4.4.3*>* libX11 1.3.3*>* *>* here is the >>backtrace:*>* (gdb) run*>* Starting program: /usr/bin/python2.6 >>crash.py*>* [Thread debugging using libthread_db enabled]*>* >>QSystemTrayIcon::setVisible: No Icon set*>* *>* Program received signal >>SIGSEGV, Segmentation fault.*>* XFreeColormap (dpy=0x0, cmap=16777218) at >>FreeCmap.c:41*>* 41 FreeCmap.c: No such file or directory.*>* >>in FreeCmap.c*>* (gdb) bt*>* #0 XFreeColormap (dpy=0x0, cmap=16777218) at >>FreeCmap.c:41*>* #1 0x00007ffff5f1b558 in ~QSystemTrayIconSys >>(this=0x9c3070,*>* __in_chrg=<value optimized out>) at >>util/qsystemtrayicon_x11.cpp:213*>* #2 0x00007ffff5f19ff4 in >>QSystemTrayIconPrivate::remove_sys*>* (this=0x9bc310) at >>util/qsystemtrayicon_x11.cpp:352*>* #3 0x00007ffff5f0637f in >>~QSystemTrayIcon (this=0x8c6590,*>* __in_chrg=<value optimized out>) at >>util/qsystemtrayicon.cpp:152*>* #4 0x00007ffff65f46f2 in >>~sipQSystemTrayIcon (this=0x8c6590,*>* __in_chrg=<value optimized out>) at >>sipQtGuiQSystemTrayIcon.cpp:137*>* #5 0x00007ffff65f347c in >>release_QSystemTrayIcon (sipCppV=0x8c6590,*>* sipState=<value optimized >>out>) at sipQtGuiQSystemTrayIcon.cpp:752*>* #6 0x00007ffff219c289 in >>sipWrapper_dealloc (self=0x0) at siplib.c:9675*>* #7 0x00007ffff7adc0e5 >>in subtype_dealloc (self=0x7ffff7f1caf0) at*>* >>Objects/typeobject.c:1019*>* #8 0x00007ffff7aba0cf in insertdict >>(mp=0x63cf60, key=0x7ffff7f08870,*>* hash=2314047222216391292, >>value=0x7ffff7dab5d0) at*>* Objects/dictobject.c:459*>* #9 >>0x00007ffff7abcb15 in PyDict_SetItem (op=0x63cf60,*>* key=0x7ffff7f08870, >>value=0x7ffff7dab5d0) at Objects/dictobject.c:701*>* #10 >>0x00007ffff7abe48d in _PyModule_Clear (m=<value optimized out>) at*>* >>Objects/moduleobject.c:138*>* #11 0x00007ffff7b2ac4f in PyImport_Cleanup >>() at Python/import.c:439*>* #12 0x00007ffff7b33c46 in Py_Finalize () at >>Python/pythonrun.c:434*>* #13 0x00007ffff7b33d58 in Py_Exit (sts=0) at >>Python/pythonrun.c:1714*>* #14 0x00007ffff7b33e87 in handle_system_exit () >>at*Python/pythonrun.c:1116 >>* #15 0x00007ffff7b340cd in PyErr_PrintEx (set_sys_last_vars=1) at*>* >>Python/pythonrun.c:1126*>* #16 0x00007ffff7b345a6 in >>PyRun_SimpleFileExFlags (fp=0x7fffffffe578,*>* filename=0x7fffffffe578 >>"crash.py", closeit=1, flags=0x7fffffffe0d0)*>* at >>Python/pythonrun.c:935*>* #17 0x00007ffff7b40721 in Py_Main >>(argc=-134926176, argv=<value*>* optimized out>) at Modules/main.c:599*>* >>#18 0x00007ffff74ebbbd in __libc_start_main (main=<value optimized*>* >>out>, argc=<value optimized out>, ubp_av=<value optimized out>,*>* >>init=<value optimized out>,*>* fini=<value optimized out>, >>rtld_fini=<value optimized out>,*>* stack_end=0x7fffffffe1e8) at >>libc-start.c:220*>* #19 0x00000000004006b*>* (gdb) f 6*>* #6 >>0x00007ffff219c289 in sipWrapper_dealloc (self=0x0) at siplib.c:9675*>* >>9675 forgetObject((sipSimpleWrapper *)self);*>* (gdb) f 5*>* #5 >>0x00007ffff65f347c in release_QSystemTrayIcon (sipCppV=0x8c6590,*>* >>sipState=<value optimized out>) at sipQtGuiQSystemTrayIcon.cpp:752*>* >>warning: Source file is more recent than executable.*>* 752 >>delete reinterpret_cast<QSystemTrayIcon *>(sipCppV);*>* Current language: >>auto*>* The current source language is "auto; currently c++".*>* (gdb) f >>4*>* #4 0x00007ffff65f46f2 in ~sipQSystemTrayIcon (this=0x8c6590,*>* >>__in_chrg=<value optimized out>) at sipQtGuiQSystemTrayIcon.cpp:137*>* 137 >> }* > Crashes on exit like this are caused by Qt objects being deleted in the > "wrong" order. Unfortunately PyQt has (almost) no control over that order. > By adding those dummy functions you are altering the order in which things > get garbage collected. It doesn't happen with C++ applications because the > objects don't get deleted. > > The workaround is to experiment with explicitly deleting objects after > exec_() returns but before sys.exit() is called. In this case "del tray" > seems to avoid the crash. > > That said, PyQt does have a mechanism for making sure certain objects get > deleted before the QApplication does - and it seems that QSystemTrayIcon > should also be handled that way. The change will be in tonight's snapshot. > > Phil > > ====================================================== > > > > In my code ,after a long time debugging, i just found if i commented out > the following code: > > self.trayNotifier = > QtGui.QSystemTrayIcon(QtGui.QIcon('images/trayIcon.png')) > self.trayNotifier.show() > > Then no crash on exit. > Otherwise, every time i quit my app, crashing windows pop up with the > following information leave in terminal: > > Segmentation fault: 11 > > And the crashing information inside the pop-up window is attached. > > > > Gui _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt