2016-07-12 5 views
-1

python 스크립트를 작성하고 싶습니다. 여기에는 일부 체크 버튼과 활성 체크를 실행하기위한 버튼이 있습니다. 체크 버튼이 활성화되어 있고 "실행"을 클릭하면 def run_app가 활성화되어있는 체크 버튼을 선택해야합니다. 그러나 코드를 실행하면 터미널에서 "is_checked"라는 전역 이름이 정의되지 않는다고 말합니다. 당신의 __init__의 더 is_checked 변수 바깥이 없음을 의미 로컬로 만든Python Tkinter 체크 버튼 실행

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

관련 문제