2016-12-02 1 views
1

ComboBox 위젯을 사용하여 변수를 추적하려고합니다.추적 변수 - ComboBox Tkinter

AttributeError: 'StringVar' object has no attribute '_report_exception' 

내가 잘못 뭐하는 거지 : 나는 다음과 같은 오류를 얻을 ComboBox 값을 변경하면?

import tkinter as tk 
from tkinter import ttk, StringVar 

class TEST(tk.Frame): 
    def __init__(self, parent): 
     tk.Frame.__init__(self, parent) 
     self.parent = parent 

     self.estvalue = StringVar() 

     self.pestanas = ttk.Notebook(self.parent) 
     self.geometria = ttk.Frame(self.pestanas) 
     self.viento = ttk.Frame(self.pestanas) 
     self.topografia = ttk.Frame(self.pestanas) 
     self.pestanas.add(self.geometria, text="Parámetros Globales") 
     self.pestanas.add(self.viento, text="Viento") 
     self.pestanas.grid(sticky=tk.W, pady=6, padx=6) 
     Estructura = ["Edificios", 
         "Chimeneas, Tanques y Estructuras similares", 
         "Carteles llenos", 
         "Carteles abiertos y Estructuras similares"] 
     self.Estructura = tk.LabelFrame(self.geometria, text="Estructura", 
             labelanchor="nw", borderwidth="2", 
             relief="groove", pady=5, padx=5) 
     self.Estructura.grid(column=0, row=0, sticky=tk.W) 
     self.Est = ttk.Label(self.Estructura, text="Tipo de Estructura") 
     self.Est.grid(column=0, row=0, sticky=tk.W) 
     self.Est = ttk.Label(self.Estructura, text="Tipo de Estructura") 
     self.Est.grid(column=0, row=1, sticky=tk.W) 
     self.boxest = ttk.Combobox(self.Estructura, textvariable=self.estvalue, 
            state='readonly', width=36) 
     self.boxest['values'] = Estructura 
     self.boxest.current(0) 
     self.boxest.grid(column=1, row=0, sticky=tk.E, padx=5) 

     self.estvalue.trace_variable("w",self.eventest()) 

    def eventest(self): 
     if self.estvalue.get() == "Edificios": 
      print("foo") 
     else: 
      print("bar") 

def main(): 
    root = tk.Tk() 
    app = TEST(root) 
    app.grid() 
    root.title("App") 
    root.focus_force() 
    root.minsize(width=600, height=390) 
    root.columnconfigure(0, weight=1) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 

답변

3

당신은 함수에 참조를 추적 부여해야합니다. 대신, 당신은 함수를 호출하고 함수가 반환하는 것을 추적하여주는을 호출합니다. 당신이 그 인수를 허용하도록 기능을 수정해야하므로

는 추적 함수에 세 개의 값을 함께 전달합니다

self.estvalue.trace_variable("w",self.eventest) 

과 같이 추적 (주 누락 ())를 설정 같은 경우에도 그들을 사용하지 마십시오.

+0

그게 전부는 아닙니다. 핸들러의 정의는 세 개의 인수를 더 받아들이도록 변경되어야한다 : def eventest (self, a, b, c) :'. 추가 인수에 무엇이 들어 있는지 확실하지 않지만이 경우 무시할 수 있습니다. – martineau

+0

@martineau : 마지막 단락에서이 문제를 다루었습니다. 그들이 무엇인지에 관해서는 http://stackoverflow.com/questions/29690463/what-are-the-arguments-to-tkinter-variable-trace-method-callbacks을 참조하십시오. –

+0

죄송합니다, 나는 그 부분을 놓쳤습니다. 관계없이, 링크 주셔서 감사합니다. – martineau