2017-09-20 2 views
-1

Ich möchte ein Python-Programm (zB: program.py) ausführen, wenn ich in einem separaten Programm auf eine Schaltfläche im Tkinter-Fenster klicke. Wenn ich jedoch die Klasse aus dem Modul importiere, wird sie ausgeführt. Wie bekomme ich die Schaltfläche zum Ausführen des Moduls, wenn Sie darauf klicken? Jede Hilfe wird sehr geschätzt.Tkinter button - Modul importieren und ausführen

Andere Module Run (program.py):

class sampleProgram(): 
    def DoSomething(): 
     print('Do Something') 

Modul mit tkinter Taste:

from program import DoSomething 

class Window(Frame) 
    def __init__(self,master = None): 
     <Stuff In Window> 

    def addWidgets(self): 
     <Widgets To Add> 

    def init_window(self): 
     self.pack(fill=BOTH, expand=1) 
     RunButton = Button(self, text="Run", command=<**What Goes Here To Run sampleProgram?**>) 
+0

Mit dem gezeigten Code (und vorausgesetzt, Sie meinen "Klasse" (alle Kleinbuchstaben) anstelle von "Klasse") gibt es kein Problem mit dem Import des 'Programm'-Moduls, da es beim Import nur eine Klasse definiert. – BlackJack

+0

@BlackJack - Vielen Dank für Ihre Antwort. Ich habe die Frage bearbeitet, konnte sie aber basierend auf der ursprünglichen Antwort von @ReblochonMasque funktionieren lassen. Können Sie Ihren Kommentar zur Verwendung einer 'statischen Methode' erklären, anstatt die Funktionen in einer Klasse zu platzieren? Ich schätze die Chance, einen besseren Weg zu lernen, es zu schreiben! –

+0

Wenn eine Methode die Instanz, die sie aufgerufen hat, nicht als erstes Argument verwendet, dann handelt es sich nicht wirklich um eine Methode. Dies sollte mit [staticmethod()] verdeutlicht werden (https://docs.python.org/2/ Bibliothek/Funktionen.html # statische Methode). Andernfalls können Sie es nicht für eine Instanz aufrufen. Es ist auch ein Code-Geruch, um Funktionen/"statische Methoden" in einer Klasse zu platzieren. In seltenen Fällen macht es Sinn, aber nur, wenn Sie erklären können, warum es nicht einfach eine normale Funktion ist, sondern eine Funktion, die in einer Klasse steckt. – BlackJack

Antwort

0

Sie müssen DoSomething auf der sampleProgram Klasse anrufen; Dazu müssen Sie es importieren.

Class sampleProgram(): 
    def DoSomething():    # <--- this is a staticmethod 
     print('Do Something') 

Modul mit tkinter Taste:

from program import sampleProgram # <--- import the class sampleProgram 

Class Window(Frame) 
    def __init__(self,master = None): 
     <Stuff In Window> 

    def addWidgets(self): 
     <Widgets To Add> 

    def init_window(self): 
     self.pack(fill=BOTH, expand=1) 
     RunButton = Button(self, text="Run", command=sampleProgram.DoDomething) 

Sie binden die sampleProgram.DoDomething static zum runButton command; Wenn auf die Schaltfläche geklickt wird, wird dieser Befehl aufgerufen.

+0

'DoSomething' ist keine Klassenmethode. Sie müssen es mit 'classmethod' dekorieren, um eins zu werden, und es muss das Klassenobjekt als erstes Argument nehmen. Vielleicht willst du also eine statische Methode? Was dann die Frage aufwirft, warum Funktionen in eine "Klasse" verschoben werden. – BlackJack

+0

Guter Punkt, korrigierte ich den Beitrag –

1

from program import DoSomething

Auf der Befehl für diese Schaltfläche können Sie einfach anrufen def DoSomething()

RunButton = Button(self, text="Run", command=DoSomething)

Verwandte Themen