2016-04-22 12 views
0

Ich habe eine Exe eines Python-Programms mit cx_Freeze erstellt.
Ich habe PyQt4 verwendet, um eine GUI zu erstellen.Schließen Sie die geöffnete Konsole nach dem Schließen der PyQt4 GUI

Es öffnet sich perfekt, eine leere Konsole zuerst und dann die GUI.
Wenn ich jedoch die GUI schließe (nachdem ich das Programm ausgeführt habe oder nicht), bleibt die Konsole geöffnet. Wenn ich auf irgendeinen Teil der Konsole klicke, erscheint das Fehler-Popup "MeinProgramm funktioniert nicht mehr"

Dies wurde auf einem System (Win7-64bit) mit einer Python-Installation (3.4.4) und einem anderen System mit getestet kein Python (Win7-64bit).

Gibt es eine Möglichkeit, dass ich diese Konsole schließen kann, nachdem die GUI geschlossen wurde? oder besser noch ... Wie schließe ich die Konsole?

devenv
Python: 3.4
OS: Windows 7

bearbeiten:

ich mich um eine Arbeit zu finden geschafft ..... in meiner close_application Methode I der Linien, die Verwenden Sie psutil, um einen Prozess zu beenden. Dies funktioniert, wenn ich durch eine UI-Taste schließen aber nicht, wenn ich auf das „x“ in der oberen rechten Ecke des

Fenster klicken

Danke

Antwort

1

Ich glaube, Sie müssen das Ereignis Klicken auf das „x“ von oben nach verlinken rechte Maustaste mit den Linien des Tötungsvorgangs.

Dieses Thema könnte Ihnen helfen? PySide/PyQt detect if user trying to close window

+0

Perfekt danke, um diesen Link geholfen, ich overrode die closeevent() -Methode der Nähe Prozess zu bereinigen – Eoin

0

Ich verwende wxPython und konfrontiert das gleiche Problem. Die Lösung, die ich fand, war, die Hauptfunktion in eine sys.exit-Klausel zu packen. Also meine main.py sieht ungefähr so ​​aus:

import sys 
import wx 

class MyFrame(wx.Frame): 
    def __init__(self): 
     """Constructor""" 
     wx.Frame.__init__(self, None, title="Close Me") 
     panel = wx.Panel(self) 

     closeBtn = wx.Button(panel, label="Close") 
     closeBtn.Bind(wx.EVT_BUTTON, self.onClose) 

    def onClose(self, event): 
     self.Destroy() 

def main(): 
    app = wx.App(False) 
    frame = MyFrame() 
    frame.Show() 
    app.MainLoop() 


if __name__ == '__main__': 
    sys.exit(main())