2016-07-12 6 views
-1

Ich möchte ein Python-Skript schreiben, wo ich einige Checkbuttons und einen Button zum Ausführen meiner aktiven Checkbuttons habe. Wenn ein Häkchen aktiv ist und ich auf "Ausführen" klicke, sollte die Def run_app überprüfen, welche Checkbuttons aktiv sind. Aber wenn ich meinen Code ausführe, sagt das Terminal, dass der globale Name "is_checked" nicht definiert ist.Python Tkinter Run Checkbuttons

from Tkinter import * 
import os 
import sys 
import os.path 
import subprocess 

exe = (path of my exe) 
call = exe 

class App: 
    def __init__(self, master): 
    self.is_checked = IntVar() 
    frame = Frame(master) 
    frame.pack() 
    self.test = Checkbutton(frame, 
        text="Verzeichnisse", 
        ) 
    self.test.pack(side=LEFT) 

    self.slogan = Checkbutton(frame, 
        text="Visual Studio", 
        onvalue=1, 
        offvalue=0, 
        variable=self.is_checked 

        ) 
    self.slogan.pack(side=LEFT) 

    self.button = Button(frame, 
        text="RUN", fg="red", 
        command=self.run_app) 
    self.button.pack(side=LEFT) 

def open_vb(self): 
    subprocess.call(call, shell=True) 

def run_app(self): 
    if self.is_checked.get(): 
     command=self.open_vb 



root = Tk() 
app = App(root) 
root.mainloop() 

Antwort

1

is_checked lokal erstellt, das bedeutet, dass es keine is_checked Variable außerhalb Ihres __init__ ist.

Wenn Sie diese Variable außerhalb des Erstellungsbereichs verwenden möchten, müssen Sie sie entweder global oder eine Bindung an eine Klasse vornehmen. Da Sie bereits Klassenstruktur haben, ist es besser, letztere zu verwenden.

Sie müssen is_checked zu self.is_checked überall ändern, damit diese Variable ein Teil der Klasse ist.

+0

ich änderte is_checked zu self.is_checked. Jetzt bekomme ich keinen Fehler, aber meine exe doenst öffnen:/(änderte auch den Code meiner Frage) – Dennis

+0

@Dennis Sie sollten keine Änderungen an Ihrer Frage vornehmen, die Antworten irrelevant macht. Außerdem sehe ich nicht, was meinst du in 'command = self.open_vb' diese Zeile? Wenn Sie 'self.open_vb' ausführen wollen, brauchen Sie stattdessen' self.open_vb() '. – Lafexlos

+0

Okay sorry .. Ich denke, ich habe es behoben. :) – Dennis