2016-07-12 12 views
-1

私はいくつかのチェックボタンとアクティブなチェックボタンを実行するためのボタンがあるpythonスクリプトを書いています。チェックボタンがアクティブで、 "実行"をクリックすると、def run_appはどのチェックボタンがアクティブであるかを確認する必要があります。しかし、私が自分のコードを実行すると、端末はグローバル名 "is_checked"が定義されていないと言っています。あなたの__init__の外ではis_checked変数がないことを意味し、ローカルに作成さPython Tkinter Checkボタンを実行

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() 

答えて

1

is_checked

作成した場所以外でその変数を使用する場合は、globalにするか、クラスにバインドする必要があります。あなたはすでにクラス構造を持っているので、後者を使う方が良いです。

is_checkedからself.is_checkedに変更して、その変数がクラスの一部であるようにする必要があります。

+0

is_checkedをself.is_checkedに変更しました。今私はエラーは出ませんが、私のexeは開かれています:/(私の質問のコードも変更しました) – Dennis

+0

@Dennis回答を無関係にするあなたの質問を編集しないでください。また、 'command = self.open_vb'でこの行に何を意味するのか分かりません。 'self.open_vb'を実行するには、その代わりに' self.open_vb() 'が必要です。 – Lafexlos

+0

申し訳ありません..私はそれを修正したと思います。 :) – Dennis

関連する問題