2016-03-29 5 views
0

Ich erstelle eine Desktop-Anwendung für Windows mit Python. Ich habe Tkinter für die GUI verwendet. Mein Code beinhaltet das Auslösen der GUI, wenn ich sie ausführe. Meine Anforderung ist, dass ich zu irgendeinem Zeitpunkt nur eine einzige Instanz der GUI ausführen sollte. Kann ich einen Parameter setzen, der die Erstellung neuer Instanzen in Tkinter blockiert?Die Erstellung mehrerer GUI-Instanzen verhindern

Bitte schlagen Sie einige Optionen für das gleiche vor.

+0

Würde eine neue Instanz sein erstellt aus dem Prozess oder würde es extern als neuer Prozess gestartet werden? Für Ersteres würde die klassenvariable Lösung funktionieren. –

Antwort

1

Welche Art von Verhalten möchten Sie, wenn jemand versucht, eine GUI zu generieren, wenn eine bereits ausgeführt wird? Grundsätzlich können Sie Ihrer Klasse ein num_instances-Attribut hinzufügen, das bei jeder Erstellung einer Instanz erhöht und dann in der Klassenmethode __del__ dekrementiert wird. Sie können dann entweder in __init__ oder __new__ überprüfen, je nach dem gewünschten Verhalten.

class GUI: 
    num_instances = 0 

    def __init__(self): 
     if self.__class__.num_instances: 
      raise 
     self.__class__.num_instances += 1 

    def __del__(self): 
     self.__class__.num_instances -= 1 

Dies ist nur ein Entwurf, also überprüfen Sie, dass es sich in der Tat immer wie gewünscht verhält, aber es sollte Sie in Gang bringen.

EDIT: ich vergessen, es zu erwähnen, aber natürlich können Sie auch den Blick auf singleton pattern

EDIT 2: für mehrere Durchläufe zu verhindern, schauen this post

+0

Ja, wenn eine GUI bereits läuft und eine neue Instanz ausgelöst wird, möchte ich immer noch nur eine einzige GUI behalten. Beide sind unabhängig. Ich bezweifle, dass diese Attribut-Addition wirklich helfen wird. –

+0

Was meinst du genau mit "beide sind unabhängig"? Meinst du, dass das Python-Skript mehrmals ausgeführt werden könnte? Soll das Betriebssystem nur eine Instanz Ihres Programms haben oder handelt es sich um das Python-Skript? – Silmathoron

+0

Das Python-Skript würde mehrere Male ausgeführt werden und ich möchte, dass das Betriebssystem nur eine Instanz des GUI-Skripts hat, das jedes Mal aufgerufen wird, wenn das Python-Skript ausgeführt wird. –

Verwandte Themen