2016-07-12 3 views
-1

Я хочу написать скрипт python, где у меня есть некоторые кнопки Check и кнопка для запуска активных кнопок check. Если контрольная кнопка активна, и я нажимаю «Запустить», def run_app должен проверить, какие контрольные кнопки активны. Но если я запустил свой код, терминал говорит, что глобальное имя «is_checked» не определено.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() 

ответ

1

is_checked создается локально, что означает не is_checked переменных за пределов вашего __init__.

Если вы хотите использовать эту переменную за пределами того места, где она создана, вам необходимо либо сделать ее global, либо привязать к классу. Поскольку у вас уже есть классная структура, лучше использовать последнюю.

Вам нужно изменить is_checked на self.is_checked всюду, чтобы эта переменная была частью класса.

+0

Я изменил is_checked на self.is_checked. Теперь я не получаю никаких ошибок, но мой exe doenst open:/(тоже изменил код моего вопроса) – Dennis

+0

@Dennis Вы не должны вносить изменения в свой вопрос, что делает ответы нерелевантными. Кроме того, я не понимаю, что вы подразумеваете в 'command = self.open_vb' этой строке? Если вы хотите выполнить 'self.open_vb', вам нужно' self.open_vb() 'вместо этого. – Lafexlos

+0

Ладно, извините. Полагаю, я исправил это. :) – Dennis

Смежные вопросы