Python 跟踪变量-组合框Tkinter
我正在尝试使用Python 跟踪变量-组合框Tkinter,python,python-3.x,tkinter,combobox,Python,Python 3.x,Tkinter,Combobox,我正在尝试使用组合框小部件跟踪变量。当我更改组合框值时,会出现以下错误: AttributeError:“StringVar”对象没有属性“\u报告\u异常” 我做错了什么 import tkinter as tk from tkinter import ttk, StringVar class TEST(tk.Frame): def __init__(self, parent): tk.Frame.__init__(self, parent) sel
组合框
小部件跟踪变量。当我更改组合框
值时,会出现以下错误:
AttributeError:“StringVar”对象没有属性“\u报告\u异常”
我做错了什么
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()
必须为跟踪提供对函数的引用。相反,您调用函数并跟踪函数返回的任何内容
像这样设置跟踪(注意缺少的()
)
跟踪将向函数传递三个值,因此即使不使用这些参数,也需要修改函数以接受它们。这还不是全部。必须更改处理程序的定义以接受另外三个参数:
defeventest(self,a,b,c):
。我不确定附加的参数包含什么,但在这种情况下可以忽略它们。@martineau:我在最后一段提到了这个问题。至于它们是什么,请看,对不起,我错过了你答案的那一部分。不管怎样,谢谢你们的链接,谢谢你们。问题依然存在,但这是因为我缺乏知识。@Eduardo:当我做出这两个改变时,问题就消失了。还有什么问题?
self.estvalue.trace_variable("w",self.eventest)