1
我正在嘗試使用ComboBox
控件跟蹤變量。當我改變ComboBox
值我得到以下錯誤:跟蹤變量 - 組合框Tkinter
AttributeError: 'StringVar' object has no attribute '_report_exception'
我在做什麼錯?
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()
這還不是全部。處理程序的定義必須改爲接受另外三個參數:'def eventest(self,a,b,c):'。我不確定附加參數包含什麼,但在這種情況下可以忽略它們。 – martineau
@martineau:我在最後一段談到了這一點。至於他們是什麼,請參閱http://stackoverflow.com/questions/29690463/what-are-the-arguments-to-tkinter-variable-trace-method-callbacks –
哎呀,對不起,我錯過了你的答案的一部分。無論如何,感謝您的鏈接。 – martineau