2016-07-26 29 views
1

Ich habe ein Python-Programm, das ich mit cx_freeze verpackt, um ausführbar zu machen. Das Programm ist ausschließlich ein Desktop-Programm zur Datenerfassung. Es funktioniert gut und geht gut auf jedem Computer, aber auf einem Desktop eines unserer Mitarbeiter mit Windows 7 stürzt es nur beim Beenden ab (ich betone, dass keine Python-Fehler gegeben sind. Nur ein Low-Level-Absturz mit Null Informationen über es). Einfach starten und beenden des Programms stürzt ab!Python 3.4: PyQt unter Windows: Absturz beim Beenden nur auf einigen Computern

Ich habe den Kerl, um ein Speicherabbild für mich zu erstellen, und er hat. Die seltsame Teil ist die folgende: ein Speicherabbild aus dieser Erstellung und Analyse des mit WinDbg die folgende Kette von Fehlern ergibt:

STACK_TEXT: 
WARNING: Stack unwind information not available. Following frames may be wrong. 
0020f940 5c51b34e 5c7bd640 9d7a3385 03c93748 QtCore4!QHashData::free_helper+0x26 
0020f974 76e314bd 00b30000 00000000 03e0c4c0 QtGui4!QGestureRecognizer::reset+0x1f9e 
0020f9a0 5c51c968 03c93748 5d3608c2 00000001 kernel32!HeapFree+0x14 
0020f9a8 5d3608c2 00000001 03c93748 03891250 QtGui4!QGestureRecognizer::reset+0x35b8 
0020f9c0 5d3627b5 9d0dae1c 03891250 03cac0a0 QtCore4!QObjectPrivate::deleteChildren+0x72 
00000000 00000000 00000000 00000000 00000000 QtCore4!QObject::~QObject+0x3e5 

Nun, was mich wundert ist, dass eine Beschwerde von QGestureRecognizer (die eine part of QtGUI apparently ist) ist gegeben! Aber warum? Ich verwende keine Touch-Funktionen! Die Module, die ich verwende, sind: QtCore und QtGUI. Woher kommt das? Kann ich alles, was mit dieser Klasse zusammenhängt, erzwingen: QGestureRecognizer? Was würdest du in diesem Fall tun?

Update:

Dieses Problem scheint nur auf Windows 7-Computer passieren. Es wurde auf 2 Computern mit Windows 7 getestet und der gleiche Absturz passiert.

Antwort

0

Es stellte sich heraus, dass ALL die Probleme, die ich mit diesem Programm Absturz hatte, waren wegen QThread (unter Windows). Alle Benutzer, von denen ich weiß, dass sie QThread unter Windows benutzt haben, haben ähnliche Probleme, und aus irgendeinem Grund wird sie von niemandem behoben.

Vermeiden QThread auf Python. Es ist völlig nutzlos und schädlicher als nützlich. Ich ging jetzt zu multiprocessing. Es ist viel besser und wird nicht von GIL beeinflusst.

1

Es scheint Probleme zu haben, Speicher zu befreien. Sie könnten versuchen, es manuell mit einer Funktion wie folgt zu tun:

Dann definieren Sie eine Reinigungsmethode in Ihrem Hauptwidget.

class MyWindow(QWidget): 
    def cleanUp(self): 
     # Clean up everything 
     for i in self.__dict__: 
      item = self.__dict__[i] 
      clean(item) 

schließlich vor qt_app._exec() Aufruf, werden Sie so verbinden haben:

qt_app.aboutToQuit.connect(app.cleanUp) 

wo app Ihr Hauptfenster ist.


EDIT:

aller Verpackung unter der if __name__ == '__main__' Linie in eine einzige main() Funktion funktioniert manchmal, aber ich habe keine Ahnung, warum.

+0

Danke. Ich werde das versuchen und melden :) –

+0

Ich implementierte die Lösung ... funktioniert auf meinem Computer, funktioniert aber nicht auf dem Computer mit dem Problem ... es stürzt immer noch beim Beenden ab. –

+0

Was ist mit der bearbeiteten Antwort? – BusyAnt